From ecc4eefdeb50ad6c355dcb967e120e935f3c262b Mon Sep 17 00:00:00 2001 From: UA27 Date: Mon, 27 Dec 2021 16:18:01 -0500 Subject: [PATCH 1/5] remove vscode commands and update builder workflow --- .vscode/tasks.json | 11 +---- .vscodeignore | 2 +- CHANGELOG.md | 4 ++ README.md | 22 ++++++++++ builder/index.js | 23 ++++++++++ builder/{extension.js => vscode-extension.js} | 0 package.json | 43 ++++++------------- theme-src.schema.json | 1 - ...heme-src.json => Voodoo-color-source.json} | 0 9 files changed, 64 insertions(+), 42 deletions(-) create mode 100644 builder/index.js rename builder/{extension.js => vscode-extension.js} (100%) delete mode 100644 theme-src.schema.json rename themes/{theme-src.json => Voodoo-color-source.json} (100%) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b91e48b..7bf71ff 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,19 +4,12 @@ { "label": "Build Voodoo Theme", "detail": "Build Voodoo theme's file from source", - "command": "echo ${input:build}", + "command": "node ./builder build-theme", "type": "shell", "group": { "kind": "build", "isDefault": true } } - ], - "inputs": [ - { - "id": "build", - "type": "command", - "command": "voodoo.buildTheme" - } ] -} +} \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore index 41b4172..6e48fa9 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,4 +1,4 @@ +.vscode/ .editorconfig .gitignore -theme-src.schema.json vsc-extension-quickstart.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 3da9d54..72b3486 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## Version 0.11.0 +- Update the builder's workflow so it's easier to use + - Add instructions to README.md + ## Version 0.10.0 - Add builder extension to help maintain and adjust the theme - Command to build the theme's file from `themes/theme-src.json` which supports comments and variables diff --git a/README.md b/README.md index a7d4e64..1592807 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,25 @@

Issues and PRs are welcome! 👻

![](https://github.com/liamsheppard/voodoo-theme/blob/master/images/main.png?raw=true) + +--- + +## How to contribute + +Voodoo is built from `./themes/Voodoo-color-source.json`, a file that contains the theme's color palette as a dictionary of variables and color codes which are then used to stylize multiple syntax scopes and tokens at once. + +To build the theme yourself, all you need is to execute the package's pre-defined scripts as follow: + +```sh +# You'll need some dependencies which aren't shipped with the extension, aka the strip-json-comments module. +yarn install # or npm install + +# Then: +yarn build # or npm run build +``` + +The theme's builder will read the `./themes/Voodoo-color-source.json` source file from either the active vscode's workspace or its own root path (`./builder/../themes/`). The resulting file is then output in the source file's directory as `Voodoo-color-theme.json`. + +Conversely, the recommended setup is to simply grab the theme from its git repository and work from there. Working directly from the repository's also comes with extra benefits such as pre-configured `.vscode/*.json` settings to debug using the extension host or build using the "Build Task" or the `ctrl+shift+b` shortcut. + +Finally, the builder's uses the `./builder/vscode-extension.js` module as its entry point to generate `./themes/Voodoo-color-source.schema.json`, a json schema file which is used to validate the theme's source file formatting as well as provide useful insight and descriptions while editing. diff --git a/builder/index.js b/builder/index.js new file mode 100644 index 0000000..118d885 --- /dev/null +++ b/builder/index.js @@ -0,0 +1,23 @@ +if (process.argv.length < 3) { + let errorMsg = "Unexpected argv.length! Expected { [0]: node's execPath, [1]: builder's path, [2]: command }, but got: "; + process.argv.forEach((value, index) => errorMsg += `\n - [${index}]: ${value}`); + + console.error(errorMsg); + return; +} + +const cmd = process.argv[2]; + +switch (cmd) { + case "build-theme": + require("./build").buildThemeFile(); + break; + + case "build-schema": + require("./build").buildJsonSchema(); + break; + + default: + console.error(`Unsupported command: '${cmd}'!`) + break; +} \ No newline at end of file diff --git a/builder/extension.js b/builder/vscode-extension.js similarity index 100% rename from builder/extension.js rename to builder/vscode-extension.js diff --git a/package.json b/package.json index 95b04ad..b47487a 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,13 @@ "name": "voodoo", "displayName": "Voodoo", "description": "A dark, supernatural and neon-inspired theme", - "version": "0.10.0", + "version": "0.11.0", "publisher": "liamsheppard", + "scripts": { + "build": "node ./builder build-theme", + "build-theme": "node ./builder build-theme", + "build-schema": "node ./builder build-schema" + }, "galleryBanner": { "color": "#25273e", "theme": "dark" @@ -23,39 +28,17 @@ "categories": [ "Themes" ], - "main": "builder/extension.js", + "main": "builder/vscode-extension.js", "activationEvents": [ - "workspaceContains:**/themes/theme-src.json" + "workspaceContains:**/Voodoo-color-source.json" ], "contributes": { "jsonValidation": [ { - "fileMatch": "themes/theme-src.json", - "url": "./theme-src.schema.json" - } - ], - "commands": [ - { - "command": "voodoo.buildTheme", - "title": "Voodoo: Build Voodoo theme's file from source" - }, - { - "command": "voodoo.checkConformity", - "title": "Voodoo: Check the active Voodoo theme's file conformity to a given reference." + "fileMatch": "**/Voodoo-color-source.json", + "url": "./themes/Voodoo-color-source.schema.json" } ], - "menus": { - "commandPalette": [ - { - "command": "voodoo.buildTheme", - "when": "voodoo.builder.enabled == true" - }, - { - "command": "voodoo.checkConformity", - "when": "voodoo.builder.enabled == true" - } - ] - }, "themes": [ { "label": "Voodoo", @@ -64,10 +47,8 @@ } ] }, - "dependencies": { - "strip-json-comments": "^3.1.0" - }, "devDependencies": { + "strip-json-comments": "^3.1.0", "vsce": "^1.40.0" } -} +} \ No newline at end of file diff --git a/theme-src.schema.json b/theme-src.schema.json deleted file mode 100644 index 11c1a6c..0000000 --- a/theme-src.schema.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"object","allowComments":true,"allowTrailingCommas":true,"properties":{"colors":{"description":"Colors in the workbench","additionalProperties":{"description":"Additional workbench color, most likely contributed by a missing extension.","type":"string","pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$","defaultSnippets":[{"body":"${1:$}"}]},"type":"object","properties":{"foreground":{"type":"string","description":"Overall foreground color. This color is only used if not overridden by a component.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"errorForeground":{"type":"string","description":"Overall foreground color for error messages. This color is only used if not overridden by a component.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"descriptionForeground":{"type":"string","description":"Foreground color for description text providing additional information, for example for a label.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"icon.foreground":{"type":"string","description":"The default color for icons in the workbench.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"focusBorder":{"type":"string","description":"Overall border color for focused elements. This color is only used if not overridden by a component.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"contrastBorder":{"type":"string","description":"An extra border around elements to separate them from others for greater contrast.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"contrastActiveBorder":{"type":"string","description":"An extra border around active elements to separate them from others for greater contrast.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"selection.background":{"type":"string","description":"The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textSeparator.foreground":{"type":"string","description":"Color for text separators.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textLink.foreground":{"type":"string","description":"Foreground color for links in text.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textLink.activeForeground":{"type":"string","description":"Foreground color for links in text when clicked on and on mouse hover.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textPreformat.foreground":{"type":"string","description":"Foreground color for preformatted text segments.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textBlockQuote.background":{"type":"string","description":"Background color for block quotes in text.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textBlockQuote.border":{"type":"string","description":"Border color for block quotes in text.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"textCodeBlock.background":{"type":"string","description":"Background color for code blocks in text.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"widget.shadow":{"type":"string","description":"Shadow color of widgets such as find/replace inside the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"input.background":{"type":"string","description":"Input box background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"input.foreground":{"type":"string","description":"Input box foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"input.border":{"type":"string","description":"Input box border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputOption.activeBorder":{"type":"string","description":"Border color of activated options in input fields.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputOption.activeBackground":{"type":"string","description":"Background color of activated options in input fields.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputOption.activeForeground":{"type":"string","description":"Foreground color of activated options in input fields.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"input.placeholderForeground":{"type":"string","description":"Input box foreground color for placeholder text.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.infoBackground":{"type":"string","description":"Input validation background color for information severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.infoForeground":{"type":"string","description":"Input validation foreground color for information severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.infoBorder":{"type":"string","description":"Input validation border color for information severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.warningBackground":{"type":"string","description":"Input validation background color for warning severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.warningForeground":{"type":"string","description":"Input validation foreground color for warning severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.warningBorder":{"type":"string","description":"Input validation border color for warning severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.errorBackground":{"type":"string","description":"Input validation background color for error severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.errorForeground":{"type":"string","description":"Input validation foreground color for error severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"inputValidation.errorBorder":{"type":"string","description":"Input validation border color for error severity.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"dropdown.background":{"type":"string","description":"Dropdown background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"dropdown.listBackground":{"type":"string","description":"Dropdown list background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"dropdown.foreground":{"type":"string","description":"Dropdown foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"dropdown.border":{"type":"string","description":"Dropdown border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"checkbox.background":{"type":"string","description":"Background color of checkbox widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"checkbox.foreground":{"type":"string","description":"Foreground color of checkbox widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"checkbox.border":{"type":"string","description":"Border color of checkbox widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.foreground":{"type":"string","description":"Button foreground color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.background":{"type":"string","description":"Button background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.hoverBackground":{"type":"string","description":"Button background color when hovering.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.secondaryForeground":{"type":"string","description":"Secondary button foreground color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.secondaryBackground":{"type":"string","description":"Secondary button background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"button.secondaryHoverBackground":{"type":"string","description":"Secondary button background color when hovering.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"badge.background":{"type":"string","description":"Badge background color. Badges are small information labels, e.g. for search results count.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"badge.foreground":{"type":"string","description":"Badge foreground color. Badges are small information labels, e.g. for search results count.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"scrollbar.shadow":{"type":"string","description":"Scrollbar shadow to indicate that the view is scrolled.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"scrollbarSlider.background":{"type":"string","description":"Scrollbar slider background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"scrollbarSlider.hoverBackground":{"type":"string","description":"Scrollbar slider background color when hovering.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"scrollbarSlider.activeBackground":{"type":"string","description":"Scrollbar slider background color when clicked on.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"progressBar.background":{"type":"string","description":"Background color of the progress bar that can show for long running operations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorError.foreground":{"type":"string","description":"Foreground color of error squigglies in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorError.border":{"type":"string","description":"Border color of error boxes in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWarning.foreground":{"type":"string","description":"Foreground color of warning squigglies in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWarning.border":{"type":"string","description":"Border color of warning boxes in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorInfo.foreground":{"type":"string","description":"Foreground color of info squigglies in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorInfo.border":{"type":"string","description":"Border color of info boxes in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHint.foreground":{"type":"string","description":"Foreground color of hint squigglies in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHint.border":{"type":"string","description":"Border color of hint boxes in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.background":{"type":"string","description":"Editor background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.foreground":{"type":"string","description":"Editor default foreground color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWidget.background":{"type":"string","description":"Background color of editor widgets, such as find/replace.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWidget.foreground":{"type":"string","description":"Foreground color of editor widgets, such as find/replace.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWidget.border":{"type":"string","description":"Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWidget.resizeBorder":{"type":"string","description":"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"quickInput.background":{"type":"string","description":"Quick picker background color. The quick picker widget is the container for pickers like the command palette.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"quickInput.foreground":{"type":"string","description":"Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"quickInputTitle.background":{"type":"string","description":"Quick picker title background color. The quick picker widget is the container for pickers like the command palette.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"pickerGroup.foreground":{"type":"string","description":"Quick picker color for grouping labels.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"pickerGroup.border":{"type":"string","description":"Quick picker color for grouping borders.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.selectionBackground":{"type":"string","description":"Color of the editor selection.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.selectionForeground":{"type":"string","description":"Color of the selected text for high contrast.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.inactiveSelectionBackground":{"type":"string","description":"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.selectionHighlightBackground":{"type":"string","description":"Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.selectionHighlightBorder":{"type":"string","description":"Border color for regions with the same content as the selection.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findMatchBackground":{"type":"string","description":"Color of the current search match.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findMatchHighlightBackground":{"type":"string","description":"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findRangeHighlightBackground":{"type":"string","description":"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findMatchBorder":{"type":"string","description":"Border color of the current search match.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findMatchHighlightBorder":{"type":"string","description":"Border color of the other search matches.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.findRangeHighlightBorder":{"type":"string","description":"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"searchEditor.findMatchBackground":{"type":"string","description":"Color of the Search Editor query matches.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"searchEditor.findMatchBorder":{"type":"string","description":"Border color of the Search Editor query matches.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.hoverHighlightBackground":{"type":"string","description":"Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHoverWidget.background":{"type":"string","description":"Background color of the editor hover.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHoverWidget.foreground":{"type":"string","description":"Foreground color of the editor hover.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHoverWidget.border":{"type":"string","description":"Border color of the editor hover.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorHoverWidget.statusBarBackground":{"type":"string","description":"Background color of the editor hover status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorLink.activeForeground":{"type":"string","description":"Color of active links.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorLightBulb.foreground":{"type":"string","description":"The color used for the lightbulb actions icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorLightBulbAutoFix.foreground":{"type":"string","description":"The color used for the lightbulb auto fix actions icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.insertedTextBackground":{"type":"string","description":"Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.removedTextBackground":{"type":"string","description":"Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.insertedTextBorder":{"type":"string","description":"Outline color for the text that got inserted.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.removedTextBorder":{"type":"string","description":"Outline color for text that got removed.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.border":{"type":"string","description":"Border color between the two text editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"diffEditor.diagonalFill":{"type":"string","description":"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.focusBackground":{"type":"string","description":"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.focusForeground":{"type":"string","description":"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.activeSelectionBackground":{"type":"string","description":"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.activeSelectionForeground":{"type":"string","description":"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.inactiveSelectionBackground":{"type":"string","description":"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.inactiveSelectionForeground":{"type":"string","description":"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.inactiveFocusBackground":{"type":"string","description":"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.hoverBackground":{"type":"string","description":"List/Tree background when hovering over items using the mouse.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.hoverForeground":{"type":"string","description":"List/Tree foreground when hovering over items using the mouse.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.dropBackground":{"type":"string","description":"List/Tree drag and drop background when moving items around using the mouse.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.highlightForeground":{"type":"string","description":"List/Tree foreground color of the match highlights when searching inside the list/tree.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.invalidItemForeground":{"type":"string","description":"List/Tree foreground color for invalid items, for example an unresolved root in explorer.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.errorForeground":{"type":"string","description":"Foreground color of list items containing errors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.warningForeground":{"type":"string","description":"Foreground color of list items containing warnings.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"listFilterWidget.background":{"type":"string","description":"Background color of the type filter widget in lists and trees.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"listFilterWidget.outline":{"type":"string","description":"Outline color of the type filter widget in lists and trees.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"listFilterWidget.noMatchesOutline":{"type":"string","description":"Outline color of the type filter widget in lists and trees, when there are no matches.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.filterMatchBackground":{"type":"string","description":"Background color of the filtered match.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.filterMatchBorder":{"type":"string","description":"Border color of the filtered match.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tree.indentGuidesStroke":{"type":"string","description":"Tree stroke color for the indentation guides.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"list.deemphasizedForeground":{"type":"string","description":"List/Tree foreground color for items that are deemphasized. ","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.border":{"type":"string","description":"Border color of menus.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.foreground":{"type":"string","description":"Foreground color of menu items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.background":{"type":"string","description":"Background color of menu items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.selectionForeground":{"type":"string","description":"Foreground color of the selected menu item in menus.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.selectionBackground":{"type":"string","description":"Background color of the selected menu item in menus.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.selectionBorder":{"type":"string","description":"Border color of the selected menu item in menus.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menu.separatorBackground":{"type":"string","description":"Color of a separator menu item in menus.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.snippetTabstopHighlightBackground":{"type":"string","description":"Highlight background color of a snippet tabstop.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.snippetTabstopHighlightBorder":{"type":"string","description":"Highlight border color of a snippet tabstop.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.snippetFinalTabstopHighlightBackground":{"type":"string","description":"Highlight background color of the final tabstop of a snippet.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.snippetFinalTabstopHighlightBorder":{"type":"string","description":"Highlight border color of the final stabstop of a snippet.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"breadcrumb.foreground":{"type":"string","description":"Color of focused breadcrumb items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"breadcrumb.background":{"type":"string","description":"Background color of breadcrumb items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"breadcrumb.focusForeground":{"type":"string","description":"Color of focused breadcrumb items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"breadcrumb.activeSelectionForeground":{"type":"string","description":"Color of selected breadcrumb items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"breadcrumbPicker.background":{"type":"string","description":"Background color of breadcrumb item picker.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.currentHeaderBackground":{"type":"string","description":"Current header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.currentContentBackground":{"type":"string","description":"Current content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.incomingHeaderBackground":{"type":"string","description":"Incoming header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.incomingContentBackground":{"type":"string","description":"Incoming content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.commonHeaderBackground":{"type":"string","description":"Common ancestor header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.commonContentBackground":{"type":"string","description":"Common ancestor content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"merge.border":{"type":"string","description":"Border color on headers and the splitter in inline merge-conflicts.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.currentContentForeground":{"type":"string","description":"Current overview ruler foreground for inline merge-conflicts.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.incomingContentForeground":{"type":"string","description":"Incoming overview ruler foreground for inline merge-conflicts.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.commonContentForeground":{"type":"string","description":"Common ancestor overview ruler foreground for inline merge-conflicts.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.findMatchForeground":{"type":"string","description":"Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.selectionHighlightForeground":{"type":"string","description":"Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimap.findMatchHighlight":{"type":"string","description":"Minimap marker color for find matches.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimap.selectionHighlight":{"type":"string","description":"Minimap marker color for the editor selection.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimap.errorHighlight":{"type":"string","description":"Minimap marker color for errors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimap.warningHighlight":{"type":"string","description":"Minimap marker color for warnings.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimap.background":{"type":"string","description":"Minimap background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapSlider.background":{"type":"string","description":"Minimap slider background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapSlider.hoverBackground":{"type":"string","description":"Minimap slider background color when hovering.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapSlider.activeBackground":{"type":"string","description":"Minimap slider background color when clicked on.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"problemsErrorIcon.foreground":{"type":"string","description":"The color used for the problems error icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"problemsWarningIcon.foreground":{"type":"string","description":"The color used for the problems warning icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"problemsInfoIcon.foreground":{"type":"string","description":"The color used for the problems info icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.lineHighlightBackground":{"type":"string","description":"Background color for the highlight of line at the cursor position.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.lineHighlightBorder":{"type":"string","description":"Background color for the border around the line at the cursor position.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.rangeHighlightBackground":{"type":"string","description":"Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.rangeHighlightBorder":{"type":"string","description":"Background color of the border around highlighted ranges.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.symbolHighlightBackground":{"type":"string","description":"Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.symbolHighlightBorder":{"type":"string","description":"Background color of the border around highlighted symbols.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorCursor.foreground":{"type":"string","description":"Color of the editor cursor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorCursor.background":{"type":"string","description":"The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorWhitespace.foreground":{"type":"string","description":"Color of whitespace characters in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorIndentGuide.background":{"type":"string","description":"Color of the editor indentation guides.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorIndentGuide.activeBackground":{"type":"string","description":"Color of the active editor indentation guides.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorLineNumber.foreground":{"type":"string","description":"Color of editor line numbers.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorActiveLineNumber.foreground":{"type":"string","description":"Color of editor active line number","defaultSnippets":[{"body":"${1:$}"}],"deprecationMessage":"Id is deprecated. Use 'editorLineNumber.activeForeground' instead.","pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorLineNumber.activeForeground":{"type":"string","description":"Color of editor active line number","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorRuler.foreground":{"type":"string","description":"Color of the editor rulers.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorCodeLens.foreground":{"type":"string","description":"Foreground color of editor CodeLens","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorBracketMatch.background":{"type":"string","description":"Background color behind matching brackets","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorBracketMatch.border":{"type":"string","description":"Color for matching brackets boxes","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.border":{"type":"string","description":"Color of the overview ruler border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.background":{"type":"string","description":"Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.background":{"type":"string","description":"Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorUnnecessaryCode.border":{"type":"string","description":"Border color of unnecessary (unused) source code in the editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorUnnecessaryCode.opacity":{"type":"string","description":"Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the 'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.rangeHighlightForeground":{"type":"string","description":"Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.errorForeground":{"type":"string","description":"Overview ruler marker color for errors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.warningForeground":{"type":"string","description":"Overview ruler marker color for warnings.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.infoForeground":{"type":"string","description":"Overview ruler marker color for infos.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.bracketMatchForeground":{"type":"string","description":"Overview ruler marker color for matching brackets.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.arrayForeground":{"type":"string","description":"The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.booleanForeground":{"type":"string","description":"The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.classForeground":{"type":"string","description":"The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.colorForeground":{"type":"string","description":"The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.constantForeground":{"type":"string","description":"The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.constructorForeground":{"type":"string","description":"The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.enumeratorForeground":{"type":"string","description":"The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.enumeratorMemberForeground":{"type":"string","description":"The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.eventForeground":{"type":"string","description":"The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.fieldForeground":{"type":"string","description":"The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.fileForeground":{"type":"string","description":"The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.folderForeground":{"type":"string","description":"The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.functionForeground":{"type":"string","description":"The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.interfaceForeground":{"type":"string","description":"The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.keyForeground":{"type":"string","description":"The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.keywordForeground":{"type":"string","description":"The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.methodForeground":{"type":"string","description":"The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.moduleForeground":{"type":"string","description":"The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.namespaceForeground":{"type":"string","description":"The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.nullForeground":{"type":"string","description":"The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.numberForeground":{"type":"string","description":"The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.objectForeground":{"type":"string","description":"The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.operatorForeground":{"type":"string","description":"The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.packageForeground":{"type":"string","description":"The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.propertyForeground":{"type":"string","description":"The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.referenceForeground":{"type":"string","description":"The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.snippetForeground":{"type":"string","description":"The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.stringForeground":{"type":"string","description":"The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.structForeground":{"type":"string","description":"The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.textForeground":{"type":"string","description":"The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.typeParameterForeground":{"type":"string","description":"The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.unitForeground":{"type":"string","description":"The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"symbolIcon.variableForeground":{"type":"string","description":"The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.foldBackground":{"type":"string","description":"Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.foldingControlForeground":{"type":"string","description":"Color of the folding control in the editor gutter.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewTitle.background":{"type":"string","description":"Background color of the peek view title area.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewTitleLabel.foreground":{"type":"string","description":"Color of the peek view title.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewTitleDescription.foreground":{"type":"string","description":"Color of the peek view title info.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekView.border":{"type":"string","description":"Color of the peek view borders and arrow.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.background":{"type":"string","description":"Background color of the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.lineForeground":{"type":"string","description":"Foreground color for line nodes in the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.fileForeground":{"type":"string","description":"Foreground color for file nodes in the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.selectionBackground":{"type":"string","description":"Background color of the selected entry in the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.selectionForeground":{"type":"string","description":"Foreground color of the selected entry in the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewEditor.background":{"type":"string","description":"Background color of the peek view editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewEditorGutter.background":{"type":"string","description":"Background color of the gutter in the peek view editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewResult.matchHighlightBackground":{"type":"string","description":"Match highlight color in the peek view result list.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewEditor.matchHighlightBackground":{"type":"string","description":"Match highlight color in the peek view editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"peekViewEditor.matchHighlightBorder":{"type":"string","description":"Match highlight border in the peek view editor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorSuggestWidget.background":{"type":"string","description":"Background color of the suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorSuggestWidget.border":{"type":"string","description":"Border color of the suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorSuggestWidget.foreground":{"type":"string","description":"Foreground color of the suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorSuggestWidget.selectedBackground":{"type":"string","description":"Background color of the selected entry in the suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorSuggestWidget.highlightForeground":{"type":"string","description":"Color of the match highlights in the suggest widget.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.wordHighlightBackground":{"type":"string","description":"Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.wordHighlightStrongBackground":{"type":"string","description":"Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.wordHighlightBorder":{"type":"string","description":"Border color of a symbol during read-access, like reading a variable.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.wordHighlightStrongBorder":{"type":"string","description":"Border color of a symbol during write-access, like writing to a variable.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.wordHighlightForeground":{"type":"string","description":"Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.wordHighlightStrongForeground":{"type":"string","description":"Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorMarkerNavigationError.background":{"type":"string","description":"Editor marker navigation widget error color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorMarkerNavigationWarning.background":{"type":"string","description":"Editor marker navigation widget warning color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorMarkerNavigationInfo.background":{"type":"string","description":"Editor marker navigation widget info color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorMarkerNavigation.background":{"type":"string","description":"Editor marker navigation widget background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.activeBackground":{"type":"string","description":"Active tab background color in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedActiveBackground":{"type":"string","description":"Active tab background color in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.inactiveBackground":{"type":"string","description":"Inactive tab background color in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedInactiveBackground":{"type":"string","description":"Inactive tab background color in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.activeForeground":{"type":"string","description":"Active tab foreground color in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.inactiveForeground":{"type":"string","description":"Inactive tab foreground color in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedActiveForeground":{"type":"string","description":"Active tab foreground color in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedInactiveForeground":{"type":"string","description":"Inactive tab foreground color in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.hoverBackground":{"type":"string","description":"Tab background color when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedHoverBackground":{"type":"string","description":"Tab background color in an unfocused group when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.hoverForeground":{"type":"string","description":"Tab foreground color when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedHoverForeground":{"type":"string","description":"Tab foreground color in an unfocused group when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.activeBorder":{"type":"string","description":"Border on the bottom of an active tab. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedActiveBorder":{"type":"string","description":"Border on the bottom of an active tab in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.activeBorderTop":{"type":"string","description":"Border to the top of an active tab. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedActiveBorderTop":{"type":"string","description":"Border to the top of an active tab in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.hoverBorder":{"type":"string","description":"Border to highlight tabs when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedHoverBorder":{"type":"string","description":"Border to highlight tabs in an unfocused group when hovering. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.activeModifiedBorder":{"type":"string","description":"Border on the top of modified (dirty) active tabs in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.inactiveModifiedBorder":{"type":"string","description":"Border on the top of modified (dirty) inactive tabs in an active group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedActiveModifiedBorder":{"type":"string","description":"Border on the top of modified (dirty) active tabs in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.unfocusedInactiveModifiedBorder":{"type":"string","description":"Border on the top of modified (dirty) inactive tabs in an unfocused group. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"tab.border":{"type":"string","description":"Border to separate tabs from each other. Tabs are the containers for editors in the editor area. Multiple tabs can be opened in one editor group. There can be multiple editor groups.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorPane.background":{"type":"string","description":"Background color of the editor pane visible on the left and right side of the centered editor layout.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroup.background":{"type":"string","description":"Deprecated background color of an editor group.","defaultSnippets":[{"body":"${1:$}"}],"deprecationMessage":"Deprecated: Background color of an editor group is no longer being supported with the introduction of the grid editor layout. You can use editorGroup.emptyBackground to set the background color of empty editor groups.","pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroup.emptyBackground":{"type":"string","description":"Background color of an empty editor group. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroup.focusedEmptyBorder":{"type":"string","description":"Border color of an empty editor group that is focused. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroupHeader.tabsBackground":{"type":"string","description":"Background color of the editor group title header when tabs are enabled. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroupHeader.tabsBorder":{"type":"string","description":"Border color of the editor group title header when tabs are enabled. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroupHeader.noTabsBackground":{"type":"string","description":"Background color of the editor group title header when tabs are disabled (`\"workbench.editor.showTabs\": false`). Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroupHeader.border":{"type":"string","description":"Border color of the editor group title header. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroup.border":{"type":"string","description":"Color to separate multiple editor groups from each other. Editor groups are the containers of editors.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGroup.dropBackground":{"type":"string","description":"Background color when dragging editors around. The color should have transparency so that the editor contents can still shine through.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"imagePreview.border":{"type":"string","description":"Border color for image in image preview.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panel.background":{"type":"string","description":"Panel background color. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panel.border":{"type":"string","description":"Panel border color to separate the panel from the editor. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelTitle.activeForeground":{"type":"string","description":"Title color for the active panel. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelTitle.inactiveForeground":{"type":"string","description":"Title color for the inactive panel. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelTitle.activeBorder":{"type":"string","description":"Border color for the active panel title. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelInput.border":{"type":"string","description":"Input box border for inputs in the panel.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panel.dropBorder":{"type":"string","description":"Drag and drop feedback color for the panel titles. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelSection.dropBackground":{"type":"string","description":"Drag and drop feedback color for the panel sections. The color should have transparency so that the panel sections can still shine through. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelSectionHeader.background":{"type":"string","description":"Panel section header background color. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelSectionHeader.foreground":{"type":"string","description":"Panel section header foreground color. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelSectionHeader.border":{"type":"string","description":"Panel section header border color used when multiple views are stacked vertically in the panel. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"panelSection.border":{"type":"string","description":"Panel section border color used when multiple views are stacked horizontally in the panel. Panels are shown below the editor area and contain views like output and integrated terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.foreground":{"type":"string","description":"Status bar foreground color when a workspace is opened. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.noFolderForeground":{"type":"string","description":"Status bar foreground color when no folder is opened. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.background":{"type":"string","description":"Status bar background color when a workspace is opened. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.noFolderBackground":{"type":"string","description":"Status bar background color when no folder is opened. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.border":{"type":"string","description":"Status bar border color separating to the sidebar and editor. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.noFolderBorder":{"type":"string","description":"Status bar border color separating to the sidebar and editor when no folder is opened. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.activeBackground":{"type":"string","description":"Status bar item background color when clicking. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.hoverBackground":{"type":"string","description":"Status bar item background color when hovering. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.prominentForeground":{"type":"string","description":"Status bar prominent items foreground color. Prominent items stand out from other status bar entries to indicate importance. Change mode `Toggle Tab Key Moves Focus` from command palette to see an example. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.prominentBackground":{"type":"string","description":"Status bar prominent items background color. Prominent items stand out from other status bar entries to indicate importance. Change mode `Toggle Tab Key Moves Focus` from command palette to see an example. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.prominentHoverBackground":{"type":"string","description":"Status bar prominent items background color when hovering. Prominent items stand out from other status bar entries to indicate importance. Change mode `Toggle Tab Key Moves Focus` from command palette to see an example. The status bar is shown in the bottom of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.background":{"type":"string","description":"Activity bar background color. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.foreground":{"type":"string","description":"Activity bar item foreground color when it is active. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.inactiveForeground":{"type":"string","description":"Activity bar item foreground color when it is inactive. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.border":{"type":"string","description":"Activity bar border color separating to the side bar. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.activeBorder":{"type":"string","description":"Activity bar border color for the active item. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.activeFocusBorder":{"type":"string","description":"Activity bar focus border color for the active item. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.activeBackground":{"type":"string","description":"Activity bar background color for the active item. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBar.dropBorder":{"type":"string","description":"Drag and drop feedback color for the activity bar items. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBarBadge.background":{"type":"string","description":"Activity notification badge background color. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"activityBarBadge.foreground":{"type":"string","description":"Activity notification badge foreground color. The activity bar is showing on the far left or right and allows to switch between views of the side bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.remoteBackground":{"type":"string","description":"Background color for the remote indicator on the status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBarItem.remoteForeground":{"type":"string","description":"Foreground color for the remote indicator on the status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"extensionBadge.remoteBackground":{"type":"string","description":"Background color for the remote badge in the extensions view.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"extensionBadge.remoteForeground":{"type":"string","description":"Foreground color for the remote badge in the extensions view.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBar.background":{"type":"string","description":"Side bar background color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBar.foreground":{"type":"string","description":"Side bar foreground color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBar.border":{"type":"string","description":"Side bar border color on the side separating to the editor. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBarTitle.foreground":{"type":"string","description":"Side bar title foreground color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBar.dropBackground":{"type":"string","description":"Drag and drop feedback color for the side bar sections. The color should have transparency so that the side bar sections can still shine through. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBarSectionHeader.background":{"type":"string","description":"Side bar section header background color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBarSectionHeader.foreground":{"type":"string","description":"Side bar section header foreground color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"sideBarSectionHeader.border":{"type":"string","description":"Side bar section header border color. The side bar is the container for views like explorer and search.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"titleBar.activeForeground":{"type":"string","description":"Title bar foreground when the window is active.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"titleBar.inactiveForeground":{"type":"string","description":"Title bar foreground when the window is inactive.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"titleBar.activeBackground":{"type":"string","description":"Title bar background when the window is active.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"titleBar.inactiveBackground":{"type":"string","description":"Title bar background when the window is inactive.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"titleBar.border":{"type":"string","description":"Title bar border color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menubar.selectionForeground":{"type":"string","description":"Foreground color of the selected menu item in the menubar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menubar.selectionBackground":{"type":"string","description":"Background color of the selected menu item in the menubar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"menubar.selectionBorder":{"type":"string","description":"Border color of the selected menu item in the menubar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationCenter.border":{"type":"string","description":"Notifications center border color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationToast.border":{"type":"string","description":"Notification toast border color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notifications.foreground":{"type":"string","description":"Notifications foreground color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notifications.background":{"type":"string","description":"Notifications background color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationLink.foreground":{"type":"string","description":"Notification links foreground color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationCenterHeader.foreground":{"type":"string","description":"Notifications center header foreground color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationCenterHeader.background":{"type":"string","description":"Notifications center header background color. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notifications.border":{"type":"string","description":"Notifications border color separating from other notifications in the notifications center. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationsErrorIcon.foreground":{"type":"string","description":"The color used for the icon of error notifications. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationsWarningIcon.foreground":{"type":"string","description":"The color used for the icon of warning notifications. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notificationsInfoIcon.foreground":{"type":"string","description":"The color used for the icon of info notifications. Notifications slide in from the bottom right of the window.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"window.activeBorder":{"type":"string","description":"The color used for the border of the window when it is active. Only supported in the desktop client when using the custom title bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"window.inactiveBorder":{"type":"string","description":"The color used for the border of the window when it is inactive. Only supported in the desktop client when using the custom title bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.commentRangeForeground":{"type":"string","description":"Editor gutter decoration color for commenting ranges.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.stackFrameHighlightBackground":{"type":"string","description":"Background color for the highlight of line at the top stack frame position.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editor.focusedStackFrameHighlightBackground":{"type":"string","description":"Background color for the highlight of line at focused stack frame position.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.background":{"type":"string","description":"The background color of the terminal, this allows coloring the terminal differently to the panel.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.foreground":{"type":"string","description":"The foreground color of the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminalCursor.foreground":{"type":"string","description":"The foreground color of the terminal cursor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminalCursor.background":{"type":"string","description":"The background color of the terminal cursor. Allows customizing the color of a character overlapped by a block cursor.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.selectionBackground":{"type":"string","description":"The selection background color of the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.border":{"type":"string","description":"The color of the border that separates split panes within the terminal. This defaults to panel.border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"walkThrough.embeddedEditorBackground":{"type":"string","description":"Background color for the embedded editors on the Interactive Playground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.modifiedBackground":{"type":"string","description":"Editor gutter background color for lines that are modified.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.addedBackground":{"type":"string","description":"Editor gutter background color for lines that are added.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorGutter.deletedBackground":{"type":"string","description":"Editor gutter background color for lines that are deleted.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapGutter.modifiedBackground":{"type":"string","description":"Minimap gutter background color for lines that are modified.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapGutter.addedBackground":{"type":"string","description":"Minimap gutter background color for lines that are added.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"minimapGutter.deletedBackground":{"type":"string","description":"Minimap gutter background color for lines that are deleted.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.modifiedForeground":{"type":"string","description":"Overview ruler marker color for modified content.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.addedForeground":{"type":"string","description":"Overview ruler marker color for added content.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"editorOverviewRuler.deletedForeground":{"type":"string","description":"Overview ruler marker color for deleted content.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.debuggingBackground":{"type":"string","description":"Status bar background color when a program is being debugged. The status bar is shown in the bottom of the window","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.debuggingForeground":{"type":"string","description":"Status bar foreground color when a program is being debugged. The status bar is shown in the bottom of the window","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"statusBar.debuggingBorder":{"type":"string","description":"Status bar border color separating to the sidebar and editor when a program is being debugged. The status bar is shown in the bottom of the window","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"welcomePage.buttonBackground":{"type":"string","description":"Background color for the buttons on the Welcome page.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"welcomePage.buttonHoverBackground":{"type":"string","description":"Hover background color for the buttons on the Welcome page.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"welcomePage.background":{"type":"string","description":"Background color for the Welcome page.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.headerForeground":{"type":"string","description":"The foreground color for a section header or active title.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.modifiedItemIndicator":{"type":"string","description":"The color of the modified setting indicator.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.dropdownBackground":{"type":"string","description":"Settings editor dropdown background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.dropdownForeground":{"type":"string","description":"Settings editor dropdown foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.dropdownBorder":{"type":"string","description":"Settings editor dropdown border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.dropdownListBorder":{"type":"string","description":"Settings editor dropdown list border. This surrounds the options and separates the options from the description.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.checkboxBackground":{"type":"string","description":"Settings editor checkbox background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.checkboxForeground":{"type":"string","description":"Settings editor checkbox foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.checkboxBorder":{"type":"string","description":"Settings editor checkbox border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.textInputBackground":{"type":"string","description":"Settings editor text input box background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.textInputForeground":{"type":"string","description":"Settings editor text input box foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.textInputBorder":{"type":"string","description":"Settings editor text input box border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.numberInputBackground":{"type":"string","description":"Settings editor number input box background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.numberInputForeground":{"type":"string","description":"Settings editor number input box foreground.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"settings.numberInputBorder":{"type":"string","description":"Settings editor number input box border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugExceptionWidget.border":{"type":"string","description":"Exception widget border color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugExceptionWidget.background":{"type":"string","description":"Exception widget background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"searchEditor.textInputBorder":{"type":"string","description":"Search editor text input box border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.breakpointForeground":{"type":"string","description":"Icon color for breakpoints.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.breakpointDisabledForeground":{"type":"string","description":"Icon color for disabled breakpoints.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.breakpointUnverifiedForeground":{"type":"string","description":"Icon color for unverified breakpoints.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.breakpointCurrentStackframeForeground":{"type":"string","description":"Icon color for the current breakpoint stack frame.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.breakpointStackframeForeground":{"type":"string","description":"Icon color for all breakpoint stack frames.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugToolBar.background":{"type":"string","description":"Debug toolbar background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugToolBar.border":{"type":"string","description":"Debug toolbar border color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.startForeground":{"type":"string","description":"Debug toolbar icon for start debugging.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.pauseForeground":{"type":"string","description":"Debug toolbar icon for pause.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.stopForeground":{"type":"string","description":"Debug toolbar icon for stop.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.disconnectForeground":{"type":"string","description":"Debug toolbar icon for disconnect.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.restartForeground":{"type":"string","description":"Debug toolbar icon for restart.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.stepOverForeground":{"type":"string","description":"Debug toolbar icon for step over.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.stepIntoForeground":{"type":"string","description":"Debug toolbar icon for step into.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.stepOutForeground":{"type":"string","description":"Debug toolbar icon for step over.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.continueForeground":{"type":"string","description":"Debug toolbar icon for continue.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugIcon.stepBackForeground":{"type":"string","description":"Debug toolbar icon for step back.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.name":{"type":"string","description":"Foreground color for the token names shown in the debug views (ie. the Variables or Watch view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.value":{"type":"string","description":"Foreground color for the token values shown in the debug views (ie. the Variables or Watch view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.string":{"type":"string","description":"Foreground color for strings in the debug views (ie. the Variables or Watch view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.boolean":{"type":"string","description":"Foreground color for booleans in the debug views (ie. the Variables or Watch view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.number":{"type":"string","description":"Foreground color for numbers in the debug views (ie. the Variables or Watch view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugTokenExpression.error":{"type":"string","description":"Foreground color for expression errors in the debug views (ie. the Variables or Watch view) and for error logs shown in the debug console.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugView.exceptionLabelForeground":{"type":"string","description":"Foreground color for a label shown in the CALL STACK view when the debugger breaks on an exception.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugView.exceptionLabelBackground":{"type":"string","description":"Background color for a label shown in the CALL STACK view when the debugger breaks on an exception.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugView.stateLabelForeground":{"type":"string","description":"Foreground color for a label in the CALL STACK view showing the current session's or thread's state.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugView.stateLabelBackground":{"type":"string","description":"Background color for a label in the CALL STACK view showing the current session's or thread's state.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugView.valueChangedHighlight":{"type":"string","description":"Color used to highlight value changes in the debug views (ie. in the Variables view).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugConsole.infoForeground":{"type":"string","description":"Foreground color for info messages in debug REPL console.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugConsole.warningForeground":{"type":"string","description":"Foreground color for warning messages in debug REPL console.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugConsole.errorForeground":{"type":"string","description":"Foreground color for error messages in debug REPL console.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugConsole.sourceForeground":{"type":"string","description":"Foreground color for source filenames in debug REPL console.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"debugConsoleInputIcon.foreground":{"type":"string","description":"Foreground color for debug console input marker icon.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"extensionButton.prominentBackground":{"type":"string","description":"Button background color for actions extension that stand out (e.g. install button).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"extensionButton.prominentForeground":{"type":"string","description":"Button foreground color for actions extension that stand out (e.g. install button).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"extensionButton.prominentHoverBackground":{"type":"string","description":"Button background hover color for actions extension that stand out (e.g. install button).","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.cellBorderColor":{"type":"string","description":"The border color for notebook cells.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.focusedEditorBorder":{"type":"string","description":"The color of the notebook cell editor border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookStatusSuccessIcon.foreground":{"type":"string","description":"The error icon color of notebook cells in the cell status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookStatusErrorIcon.foreground":{"type":"string","description":"The error icon color of notebook cells in the cell status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookStatusRunningIcon.foreground":{"type":"string","description":"The running icon color of notebook cells in the cell status bar.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.outputContainerBackgroundColor":{"type":"string","description":"The Color of the notebook output container background.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.cellToolbarSeperator":{"type":"string","description":"The color of the seperator in the cell bottom toolbar","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.focusedCellBackground":{"type":"string","description":"The background color of a cell when the cell is focused.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.cellHoverBackground":{"type":"string","description":"The background color of a cell when the cell is hovered.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.focusedCellBorder":{"type":"string","description":"The color of the cell's top and bottom border when the cell is focused.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.focusedCellShadow":{"type":"string","description":"The color of the cell shadow when cells are focused.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.cellStatusBarItemHoverBackground":{"type":"string","description":"The background color of notebook cell status bar items.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebook.cellInsertionIndicator":{"type":"string","description":"The color of the notebook cell insertion indicator.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookScrollbarSlider.background":{"type":"string","description":"Notebook scrollbar slider background color.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookScrollbarSlider.hoverBackground":{"type":"string","description":"Notebook scrollbar slider background color when hovering.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"notebookScrollbarSlider.activeBackground":{"type":"string","description":"Notebook scrollbar slider background color when clicked on.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"scm.providerBorder":{"type":"string","description":"SCM Provider separator border.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBlack":{"type":"string","description":"'Black' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiRed":{"type":"string","description":"'Red' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiGreen":{"type":"string","description":"'Green' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiYellow":{"type":"string","description":"'Yellow' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBlue":{"type":"string","description":"'Blue' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiMagenta":{"type":"string","description":"'Magenta' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiCyan":{"type":"string","description":"'Cyan' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiWhite":{"type":"string","description":"'White' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightBlack":{"type":"string","description":"'BrightBlack' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightRed":{"type":"string","description":"'BrightRed' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightGreen":{"type":"string","description":"'BrightGreen' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightYellow":{"type":"string","description":"'BrightYellow' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightBlue":{"type":"string","description":"'BrightBlue' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightMagenta":{"type":"string","description":"'BrightMagenta' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightCyan":{"type":"string","description":"'BrightCyan' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"terminal.ansiBrightWhite":{"type":"string","description":"'BrightWhite' ANSI color in the terminal.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.addedResourceForeground":{"type":"string","description":"Color for added resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.modifiedResourceForeground":{"type":"string","description":"Color for modified resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.deletedResourceForeground":{"type":"string","description":"Color for deleted resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.untrackedResourceForeground":{"type":"string","description":"Color for untracked resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.ignoredResourceForeground":{"type":"string","description":"Color for ignored resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.conflictingResourceForeground":{"type":"string","description":"Color for resources with conflicts.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitDecoration.submoduleResourceForeground":{"type":"string","description":"Color for submodule resources.","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"bookmarks.lineBackground":{"type":"string","description":"Background color for the bookmarked line","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"bookmarks.lineBorder":{"type":"string","description":"Background color for the border around the bookmarked line","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"bookmarks.overviewRuler":{"type":"string","description":"Overview ruler marker color for bookmarks","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.gutterBackgroundColor":{"type":"string","description":"Specifies the background color of the gutter blame annotations","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.gutterForegroundColor":{"type":"string","description":"Specifies the foreground color of the gutter blame annotations","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.gutterUncommittedForegroundColor":{"type":"string","description":"Specifies the foreground color of an uncommitted line in the gutter blame annotations","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.trailingLineBackgroundColor":{"type":"string","description":"Specifies the background color of the blame annotation for the current line","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.trailingLineForegroundColor":{"type":"string","description":"Specifies the foreground color of the blame annotation for the current line","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.lineHighlightBackgroundColor":{"type":"string","description":"Specifies the background color of the associated line highlights in blame annotations","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"gitlens.lineHighlightOverviewRulerColor":{"type":"string","description":"Specifies the overview ruler color of the associated line highlights in blame annotations","defaultSnippets":[{"body":"${1:$}"}],"pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"}}},"tokenColors":{"anyOf":[{"type":"string","description":"Path to a tmTheme file (relative to the current file)."},{"description":"Colors for syntax highlighting","type":"array","definitions":{"colorGroup":{"default":"#FF0000","anyOf":[{"type":"string","format":"color-hex"},{"$ref":"#/properties/tokenColors/anyOf/1/definitions/settings"}]},"settings":{"type":"object","description":"Colors and styles for the token.","properties":{"foreground":{"type":"string","description":"Foreground color for the token.","default":"$","pattern":"^\\$[A-Za-z0-9_]*(\\ ((?:100|\\d{1,2}(?:\\.\\d+)?)%|(?:\\.|0\\.)\\d+|1\\.0+))?$"},"background":{"type":"string","deprecationMessage":"Token background colors are currently not supported."},"fontStyle":{"type":"string","description":"Font style of the rule: 'italic', 'bold' or 'underline' or a combination. The empty string unsets inherited settings.","pattern":"^(\\s*\\b(italic|bold|underline))*\\s*$","patternErrorMessage":"Font style must be 'italic', 'bold' or 'underline' or a combination or the empty string.","defaultSnippets":[{"label":"None (clear inherited style)","bodyText":"\"\""},{"body":"italic"},{"body":"bold"},{"body":"underline"},{"body":"italic bold"},{"body":"italic underline"},{"body":"bold underline"},{"body":"italic bold underline"}]}},"additionalProperties":false,"defaultSnippets":[{"body":{"foreground":"${1:$}","fontStyle":"${2:bold}"}}]}},"items":{"type":"object","defaultSnippets":[{"body":{"scope":"${1:keyword.operator}","settings":{"foreground":"${2:$}"}}}],"properties":{"name":{"type":"string","description":"Description of the rule."},"scope":{"description":"Scope selector against which this rule matches.","anyOf":[{"enum":["comment","comment.block","comment.block.documentation","comment.line","constant","constant.character","constant.character.escape","constant.numeric","constant.numeric.integer","constant.numeric.float","constant.numeric.hex","constant.numeric.octal","constant.other","constant.regexp","constant.rgb-value","emphasis","entity","entity.name","entity.name.class","entity.name.function","entity.name.method","entity.name.section","entity.name.selector","entity.name.tag","entity.name.type","entity.other","entity.other.attribute-name","entity.other.inherited-class","invalid","invalid.deprecated","invalid.illegal","keyword","keyword.control","keyword.operator","keyword.operator.new","keyword.operator.assignment","keyword.operator.arithmetic","keyword.operator.logical","keyword.other","markup","markup.bold","markup.changed","markup.deleted","markup.heading","markup.inline.raw","markup.inserted","markup.italic","markup.list","markup.list.numbered","markup.list.unnumbered","markup.other","markup.quote","markup.raw","markup.underline","markup.underline.link","meta","meta.block","meta.cast","meta.class","meta.function","meta.function-call","meta.preprocessor","meta.return-type","meta.selector","meta.tag","meta.type.annotation","meta.type","punctuation.definition.string.begin","punctuation.definition.string.end","punctuation.separator","punctuation.separator.continuation","punctuation.terminator","storage","storage.modifier","storage.type","string","string.interpolated","string.other","string.quoted","string.quoted.double","string.quoted.other","string.quoted.single","string.quoted.triple","string.regexp","string.unquoted","strong","support","support.class","support.constant","support.function","support.other","support.type","support.type.property-name","support.variable","variable","variable.language","variable.name","variable.other","variable.other.readwrite","variable.parameter"]},{"type":"string"},{"type":"array","items":{"enum":["comment","comment.block","comment.block.documentation","comment.line","constant","constant.character","constant.character.escape","constant.numeric","constant.numeric.integer","constant.numeric.float","constant.numeric.hex","constant.numeric.octal","constant.other","constant.regexp","constant.rgb-value","emphasis","entity","entity.name","entity.name.class","entity.name.function","entity.name.method","entity.name.section","entity.name.selector","entity.name.tag","entity.name.type","entity.other","entity.other.attribute-name","entity.other.inherited-class","invalid","invalid.deprecated","invalid.illegal","keyword","keyword.control","keyword.operator","keyword.operator.new","keyword.operator.assignment","keyword.operator.arithmetic","keyword.operator.logical","keyword.other","markup","markup.bold","markup.changed","markup.deleted","markup.heading","markup.inline.raw","markup.inserted","markup.italic","markup.list","markup.list.numbered","markup.list.unnumbered","markup.other","markup.quote","markup.raw","markup.underline","markup.underline.link","meta","meta.block","meta.cast","meta.class","meta.function","meta.function-call","meta.preprocessor","meta.return-type","meta.selector","meta.tag","meta.type.annotation","meta.type","punctuation.definition.string.begin","punctuation.definition.string.end","punctuation.separator","punctuation.separator.continuation","punctuation.terminator","storage","storage.modifier","storage.type","string","string.interpolated","string.other","string.quoted","string.quoted.double","string.quoted.other","string.quoted.single","string.quoted.triple","string.regexp","string.unquoted","strong","support","support.class","support.constant","support.function","support.other","support.type","support.type.property-name","support.variable","variable","variable.language","variable.name","variable.other","variable.other.readwrite","variable.parameter"]}},{"type":"array","items":{"type":"string"}}]},"settings":{"$ref":"#/properties/tokenColors/anyOf/1/definitions/settings"}},"required":["settings","scope"],"additionalProperties":false}}]},"semanticHighlighting":{"type":"boolean","description":"Whether semantic highlighting should be enabled for this theme."},"semanticTokenColors":{"type":"object","description":"Colors for semantic tokens","$ref":"vscode://schemas/token-styling"},"variables":{"description":"Color variables of the theme. Uses a `[$COLOR_VARIABLE] [optional:OPACITY (% or decimal)]` format.","type":"object","propertyNames":{"pattern":"^\\$[A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","format":"color-hex"}}}} diff --git a/themes/theme-src.json b/themes/Voodoo-color-source.json similarity index 100% rename from themes/theme-src.json rename to themes/Voodoo-color-source.json From 74f58654be2cc07000f2b6dc9c7c720461071678 Mon Sep 17 00:00:00 2001 From: torodovitch Date: Mon, 27 Dec 2021 16:36:28 -0500 Subject: [PATCH 2/5] add logger and finalise vscode commands removal --- builder/build.js | 14 ++++----- builder/logger.js | 63 +++++++++++++++++++++++++++++++++++++ builder/vscode-extension.js | 48 ++-------------------------- 3 files changed, 72 insertions(+), 53 deletions(-) create mode 100644 builder/logger.js diff --git a/builder/build.js b/builder/build.js index cdcf838..0d6bdf4 100644 --- a/builder/build.js +++ b/builder/build.js @@ -27,11 +27,11 @@ class ParsedThemeObject { source.useRawValues = useRawValues; - this._parseColors(source); - this._parseTokenColors(source); + this.#parseColors(source); + this.#parseTokenColors(source); } - _parseVariable(value, source) { + #parseVariable(value, source) { const components = value.split(" "); // Check if variable exists. @@ -70,7 +70,7 @@ class ParsedThemeObject { : (value += !isNaN(alpha) ? parseInt(alpha * 255).toString(16) : "00"); } - _parseTokenColors(source) { + #parseTokenColors(source) { // Check if the theme's source does contain token colors. if (!source.hasOwnProperty("tokenColors")) { return; @@ -90,13 +90,13 @@ class ParsedThemeObject { return; } - scope.settings.foreground = this._parseVariable(scope.settings.foreground, source); + scope.settings.foreground = this.#parseVariable(scope.settings.foreground, source); }); this.tokenColors = tokenColors; } - _parseColors(source) { + #parseColors(source) { // Check if the theme's source does contain colors. if (!source.hasOwnProperty("colors")) { return; @@ -109,7 +109,7 @@ class ParsedThemeObject { // Parse colors from the source's colors and variables properties. Object.entries(source.colors).forEach(([key, value]) => { - this.colors[key] = this._parseVariable(value, source); + this.colors[key] = this.#parseVariable(value, source); }); } } diff --git a/builder/logger.js b/builder/logger.js new file mode 100644 index 0000000..18281b2 --- /dev/null +++ b/builder/logger.js @@ -0,0 +1,63 @@ +class VoodooLogger { + #vscodeOutputChannel = undefined; + #notInVscode = false; + + /** + * @returns {vscode.OutputChannel} the vscode output channel used by the extension. + */ + get outputChannel() { + if (this.#vscodeOutputChannel != undefined || this.#notInVscode) { + return this.#vscodeOutputChannel + } + + try { + const vscode = require("vscode"); + + this.#vscodeOutputChannel = vscode.window.createOutputChannel("voodoo-builder"); + this.#vscodeOutputChannel.show(); + + vscode.window.showInformationMessage("Extension details logged in 'Output > voodoo-builder'."); + } catch (error) { + if (error.code != "MODULE_NOT_FOUND") { + throw error; + } + + this.#notInVscode = true; + } + + return this.#vscodeOutputChannel; + } + + /** + * Logs the passed message in the extension's output channel when called + * from a vscode extension and in the JS console. + * @param {string} message the message to log. + */ + log(message) { + console.log(message); + + if (!this.#notInVscode && this.outputChannel != undefined) { + this.outputChannel.appendLine(message); + } + } +} + +const logger = new VoodooLogger(); + +function getCurrentDateTime() { + const dtNow = new Date(); + const dtLocalOffsetInMs = dtNow.getTimezoneOffset() * 60 * 1000; + const dtLocalIsoString = new Date(dtNow.getTime() - dtLocalOffsetInMs).toISOString(); + return dtLocalIsoString.replace("T", " ").replace("Z", ""); +} + +/** + * Logs the passed message in the extension's output channel with an `info` tag. + * @param {string} message the log's content. + * @param {string} process the logging process. + */ +function log(message, process = undefined) { + logger.log(`[${getCurrentDateTime()}]${process ? ` [${process}] ` : " "}${message}`); +} + +module.exports = { log }; \ No newline at end of file diff --git a/builder/vscode-extension.js b/builder/vscode-extension.js index a227a18..22ad905 100644 --- a/builder/vscode-extension.js +++ b/builder/vscode-extension.js @@ -1,67 +1,23 @@ const vscode = require("vscode"); const schema = require("./schema"); -const build = require("./build"); -const conformity = require("./conformity"); - -/** - * Sets the context's `voodoo.builder.enabled` property value. - * @param {boolean} value the boolean value to assign. - */ -function setContextEnabledValue(value) { - vscode.commands.executeCommand("setContext", "voodoo.builder.enabled", value); -} /** * Event function called when the extension is activated. * @param {vscode.ExtensionContext} extensionContext the extension's context. */ function activate(extensionContext) { - // Register extension's commands. - [ - vscode.commands.registerCommand("voodoo.buildTheme", () => { - try { - build.buildThemeFile(); - } catch (e) { - vscode.window.showErrorMessage( - `The Voodoo theme builder failed to build the theme-src.json file. ${e}` - ); - } - }), - vscode.commands.registerCommand("voodoo.checkConformity", () => { - const defaultReference = - "https://raw.githubusercontent.com/liamsheppard/voodoo-theme/master/themes/Voodoo-color-theme.json"; - vscode.window - .showInputBox({ - placeHolder: "Local path or URL of the theme file to use as reference", - value: defaultReference, - valueSelection: [0, defaultReference.length], - }) - .then((input) => conformity.checkConformity(extensionContext, input)); - }), - ].forEach((cmd) => extensionContext.subscriptions.push(cmd)); - - // Setup the extension's context. - extensionContext.globalState.update( - "output", - vscode.window.createOutputChannel("Voodoo Builder") - ); - try { schema.refreshJsonSchema(extensionContext); } catch (e) { vscode.window.showErrorMessage( - "The Voodoo theme builder failed to refresh the theme-src.json's schema." + "The Voodoo theme builder failed to refresh './themes/Voodoo-color-source.schema.json'." ); } - - setContextEnabledValue(true); } /** * Event function called when the extension is deactivated. */ -function deactivate() { - setContextEnabledValue(false); -} +function deactivate() { } module.exports = { activate, deactivate }; From f93c300d3ca709dd060cdd3b24c9b84e5849d11d Mon Sep 17 00:00:00 2001 From: torodovitch Date: Mon, 27 Dec 2021 16:42:30 -0500 Subject: [PATCH 3/5] support workspace paths from fs --- builder/build.js | 45 ++++++++++++++--- builder/paths/paths.js | 84 ++++++++++++++++++++++++++++++++ builder/paths/vscode-paths.js | 19 ++++++++ builder/paths/workspace-paths.js | 44 +++++++++++++++++ 4 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 builder/paths/paths.js create mode 100644 builder/paths/vscode-paths.js create mode 100644 builder/paths/workspace-paths.js diff --git a/builder/build.js b/builder/build.js index 0d6bdf4..38fd275 100644 --- a/builder/build.js +++ b/builder/build.js @@ -115,7 +115,8 @@ class ParsedThemeObject { } const { readFile, writeFile } = require("fs").promises; -const vscode = require("vscode"); +const paths = require("./paths/paths"); +const logger = require("./logger"); /** * Retrieves the json schema for the Voodoo theme's source file from @@ -123,14 +124,44 @@ const vscode = require("vscode"); * theme object. */ async function buildThemeFile() { - const themeSourcePath = (await vscode.workspace.findFiles("**/themes/theme-src.json"))[0]; - const themeSource = await readFile(themeSourcePath.fsPath, "utf-8"); + logger.log("Build started...", "build"); + logger.log(`Will be using '${paths.getInstanceType()}' to retrieve paths.`, "build"); + + const themeSourcesPaths = await paths.getThemeSourcesPaths(); + let themeSourcePath = undefined; + + switch (themeSourcesPaths.length) { + case 1: + themeSourcePath = themeSourcesPaths[0]; + break; + + case 0: + logger.log("BUILD FAILED: no suitable Voodoo theme source file found in the current workspace!\n", "build"); + await paths.hintPotentialThemeSourcesPaths(); + return; + + default: + logger.log("BUILD FAILED: found multiple suitable Voodoo theme source files in the current workspace! Please keep a single active source file under the '**/themes/' directory before building.\n", "build"); + await paths.hintSuitableThemeSourcesPaths(); + return; + } + + logger.log(`Reading theme from '${themeSourcePath}'`, "build"); + + const themeSource = await readFile(themeSourcePath, "utf-8"); const themeObject = new ParsedThemeObject(themeSource); - const themePath = - themeSourcePath.fsPath.slice(0, -"theme-src.json".length) + "Voodoo-color-theme.json"; + const buildPath = paths.getBuildPathFrom(themeSourcePath); + + logger.log(`Writing theme to '${buildPath}'`, "build"); + + await writeFile(buildPath, JSON.stringify(themeObject) + "\n", "utf-8"); + + logger.log("BUILD SUCCEEDED.\n", "build"); +} - await writeFile(themePath, JSON.stringify(themeObject) + "\n", "utf-8"); +async function buildJsonSchema() { + logger.log("buildJsonSchema not implemented yet.", "build"); } -module.exports = { buildThemeFile, ParsedThemeObject }; +module.exports = { buildThemeFile, ParsedThemeObject, buildJsonSchema }; \ No newline at end of file diff --git a/builder/paths/paths.js b/builder/paths/paths.js new file mode 100644 index 0000000..6e3852d --- /dev/null +++ b/builder/paths/paths.js @@ -0,0 +1,84 @@ +const THEME_SOURCE_FILENAME = "Voodoo-color-source.json"; +const THEME_BUILD_FILENAME = "Voodoo-color-theme.json"; + +const logger = require("../logger"); + +class VoodooPaths { + instance = undefined; + + constructor() { + try { + this.instance = new (require("./vscode-paths").VoodooVscodePaths)(); + } catch (error) { + if (error.code != "MODULE_NOT_FOUND") { + throw error; + } + + this.instance = new (require("./workspace-paths").VoodooWorkspacePaths)(); + } + } +} + +const paths = new VoodooPaths(); + +/** + * Finds the paths of all Voodoo theme source files in the current workspace. + * @returns {Thenable} the paths of all suitable Voodoo theme source files in the current workspace. + */ +function getThemeSourcesPaths() { + return paths.instance.getThemeSourcesPaths(THEME_SOURCE_FILENAME); +} + +/** + * Derives the build's path based on the used theme source's path. + * @param {string} sourcePath the source path we are building from. + * @returns {string} the build path derived from the source path passed as parameter. + */ +function getBuildPathFrom(sourcePath) { + return sourcePath.slice(0, -THEME_SOURCE_FILENAME.length) + THEME_BUILD_FILENAME; +} + +/** + * Logs the paths of all files in the current workspace that could potentially + * be a Voodoo theme source file based on the its name. + * @returns {Thenable} the callback that will hint at potential theme sources paths through the logger's available channels. + */ +async function hintPotentialThemeSourcesPaths() { + return paths.instance.getPotentialThemeSourcesPaths(THEME_SOURCE_FILENAME).then(filepaths => { + if (filepaths.length == 0) { + return; + } + + let hintPaths = "Found " + filepaths.length + " potential matches outside of the expected '**/themes/' directory:"; + filepaths.forEach(filepath => hintPaths += `\n - ${filepath}`); + + logger.log(hintPaths, "paths"); + }); +} + +/** + * Logs the paths of all suitable Voodoo theme source files in the current + * workspace based. + * @returns {Thenable} the callback that will hint at suitable theme sources paths through the logger's available channels. + */ +async function hintSuitableThemeSourcesPaths() { + return getThemeSourcesPaths(THEME_SOURCE_FILENAME).then(filepaths => { + if (filepaths.length == 0) { + return; + } + + let hintPaths = "Found " + filepaths.length + " suitable matches in the current workspace:"; + filepaths.forEach(filepath => hintPaths += `\n - ${filepath}`); + + logger.log(hintPaths, "paths"); + }); +} + +/** + * @returns {string} the name of the paths.instance object. + */ +function getInstanceType() { + return paths.instance.getInstanceType(); +} + +module.exports = { getThemeSourcesPaths, getBuildPathFrom, hintPotentialThemeSourcesPaths, hintSuitableThemeSourcesPaths, getInstanceType }; \ No newline at end of file diff --git a/builder/paths/vscode-paths.js b/builder/paths/vscode-paths.js new file mode 100644 index 0000000..93b9818 --- /dev/null +++ b/builder/paths/vscode-paths.js @@ -0,0 +1,19 @@ +const vscode = require("vscode"); + +class VoodooVscodePaths { + getInstanceType() { + return "Voodoo VSCode Paths"; + } + + async getThemeSourcesPaths(filename) { + const uris = await vscode.workspace.findFiles("**/themes/" + filename); + return uris.map(uri => uri.fsPath); + } + + async getPotentialThemeSourcesPaths(filename) { + const uris = await vscode.workspace.findFiles("**/" + THEME_SOURCE_FILENAME); + return uris.map(uri => uri.fsPath); + } +} + +module.exports = { VoodooVscodePaths }; \ No newline at end of file diff --git a/builder/paths/workspace-paths.js b/builder/paths/workspace-paths.js new file mode 100644 index 0000000..22767b6 --- /dev/null +++ b/builder/paths/workspace-paths.js @@ -0,0 +1,44 @@ +const path = require('path'); +const fs = require('fs'); + +class VoodooWorkspacePaths { + getInstanceType() { + return "Voodoo Workspace Paths"; + } + + getThemeSourcesPaths(filename) { + return new Promise((resolve) => { + const workspacePath = path.join(__dirname, '../../themes'); + const filepaths = fs.readdirSync(workspacePath); + + let themeSourcesPaths = []; + + filepaths.forEach(filepath => { + if (filepath == filename) { + themeSourcesPaths.push(path.join(workspacePath, filepath)); + } + }); + + resolve(themeSourcesPaths); + }); + } + + getPotentialThemeSourcesPaths(filename) { + return new Promise((resolve) => { + const workspacePath = path.join(__dirname, '../..'); + const filepaths = fs.readdirSync(workspacePath); + + let themeSourcesPaths = []; + + filepaths.forEach(filepath => { + if (filepath == filename) { + themeSourcesPaths.push(path.join(workspacePath, filepath)); + } + }); + + resolve(themeSourcesPaths); + }); + } +} + +module.exports = { VoodooWorkspacePaths }; \ No newline at end of file From f3edd279418cc0db3cc1dfb5b059647aa7c3e231 Mon Sep 17 00:00:00 2001 From: torodovitch Date: Mon, 27 Dec 2021 16:49:57 -0500 Subject: [PATCH 4/5] fix readme typos --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1592807..8f49f17 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,8 @@ yarn install # or npm install yarn build # or npm run build ``` -The theme's builder will read the `./themes/Voodoo-color-source.json` source file from either the active vscode's workspace or its own root path (`./builder/../themes/`). The resulting file is then output in the source file's directory as `Voodoo-color-theme.json`. +The theme's builder will read the `./themes/Voodoo-color-source.json` source file from either the active vscode's workspace or its own root path (`./builder/../themes/`). The resulting file is then output in the same directory as `Voodoo-color-theme.json`. -Conversely, the recommended setup is to simply grab the theme from its git repository and work from there. Working directly from the repository's also comes with extra benefits such as pre-configured `.vscode/*.json` settings to debug using the extension host or build using the "Build Task" or the `ctrl+shift+b` shortcut. +Conversely, the recommended setup is to simply grab the theme from its git repository and work from there. Working directly from the repository's also comes with extra benefits such as pre-configured `.vscode/*.json` settings to debug using the extension host and build using the "Build Task" or the `ctrl+shift+b` shortcut. -Finally, the builder's uses the `./builder/vscode-extension.js` module as its entry point to generate `./themes/Voodoo-color-source.schema.json`, a json schema file which is used to validate the theme's source file formatting as well as provide useful insight and descriptions while editing. +Finally, the builder uses the `./builder/vscode-extension.js` module as its entry point to generate `./themes/Voodoo-color-source.schema.json`, a json schema file which is used to validate the theme's source file formatting as well as provide useful insight and descriptions while editing. From 49211615d2b3096d2e9718a27105ba241fb66d84 Mon Sep 17 00:00:00 2001 From: torodovitch Date: Sat, 1 Jan 2022 15:11:38 -0500 Subject: [PATCH 5/5] Update schema --- README.md | 2 ++ builder/build.js | 6 +--- builder/index.js | 6 +--- builder/paths/paths.js | 5 ++-- builder/schema.js | 67 +++++++++++++++++++++++------------------- package.json | 3 +- 6 files changed, 45 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 8f49f17..f706364 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,5 @@ The theme's builder will read the `./themes/Voodoo-color-source.json` source fil Conversely, the recommended setup is to simply grab the theme from its git repository and work from there. Working directly from the repository's also comes with extra benefits such as pre-configured `.vscode/*.json` settings to debug using the extension host and build using the "Build Task" or the `ctrl+shift+b` shortcut. Finally, the builder uses the `./builder/vscode-extension.js` module as its entry point to generate `./themes/Voodoo-color-source.schema.json`, a json schema file which is used to validate the theme's source file formatting as well as provide useful insight and descriptions while editing. + +The above-mentioned `*.schema.json` file is automatically generated (and used) by the extension when the `./themes/Voodoo-color-source.json` file is detected in the active vscode window's workspace or when the extension is run / debug if working from a repository clone. diff --git a/builder/build.js b/builder/build.js index 38fd275..bc43239 100644 --- a/builder/build.js +++ b/builder/build.js @@ -160,8 +160,4 @@ async function buildThemeFile() { logger.log("BUILD SUCCEEDED.\n", "build"); } -async function buildJsonSchema() { - logger.log("buildJsonSchema not implemented yet.", "build"); -} - -module.exports = { buildThemeFile, ParsedThemeObject, buildJsonSchema }; \ No newline at end of file +module.exports = { buildThemeFile, ParsedThemeObject }; \ No newline at end of file diff --git a/builder/index.js b/builder/index.js index 118d885..d1262af 100644 --- a/builder/index.js +++ b/builder/index.js @@ -13,11 +13,7 @@ switch (cmd) { require("./build").buildThemeFile(); break; - case "build-schema": - require("./build").buildJsonSchema(); - break; - default: - console.error(`Unsupported command: '${cmd}'!`) + console.error(`Unsupported command: '${cmd}'! - usage: ./builder build-theme`); break; } \ No newline at end of file diff --git a/builder/paths/paths.js b/builder/paths/paths.js index 6e3852d..139ac8f 100644 --- a/builder/paths/paths.js +++ b/builder/paths/paths.js @@ -1,4 +1,5 @@ const THEME_SOURCE_FILENAME = "Voodoo-color-source.json"; +const THEME_SOURCE_SCHEMA_FILENAME = "Voodoo-color-source.schema.json"; const THEME_BUILD_FILENAME = "Voodoo-color-theme.json"; const logger = require("../logger"); @@ -30,7 +31,7 @@ function getThemeSourcesPaths() { } /** - * Derives the build's path based on the used theme source's path. + * Returns the build's path based on the used theme source's path. * @param {string} sourcePath the source path we are building from. * @returns {string} the build path derived from the source path passed as parameter. */ @@ -81,4 +82,4 @@ function getInstanceType() { return paths.instance.getInstanceType(); } -module.exports = { getThemeSourcesPaths, getBuildPathFrom, hintPotentialThemeSourcesPaths, hintSuitableThemeSourcesPaths, getInstanceType }; \ No newline at end of file +module.exports = { getThemeSourcesPaths, getBuildPathFrom, hintPotentialThemeSourcesPaths, hintSuitableThemeSourcesPaths, getInstanceType, THEME_SOURCE_SCHEMA_FILENAME }; \ No newline at end of file diff --git a/builder/schema.js b/builder/schema.js index 134b91d..4e18d4d 100644 --- a/builder/schema.js +++ b/builder/schema.js @@ -98,26 +98,30 @@ const VOODOO_THEME_SCHEMA_EDITS = { }, }; -async function retrieveSchema(uri) { - return JSON.parse((await vscode.workspace.openTextDocument(uri)).getText()); +/** + * @param {vscode.Uri} uri Uri to retrieve the json schema from. + */ +async function retrieveSchemaFromUri(uri) { + const schemaDefinitionFile = await vscode.workspace.openTextDocument(uri); + return JSON.parse(schemaDefinitionFile.getText()); } -async function applyEditsMapToJson(jsonObject, map) { +async function applyEditsMapToJson(jsonSchemaObject, map) { // Exit on invalid parameters (empty map branch). - if (typeof jsonObject !== "object" || typeof map !== "object") { + if (typeof jsonSchemaObject !== "object" || typeof map !== "object") { return; } // Resolve any object-type referenced by the $ref property's value. - const containsReference = jsonObject.hasOwnProperty("$ref") && map.hasOwnProperty("$ref"); + const containsReference = jsonSchemaObject.hasOwnProperty("$ref") && map.hasOwnProperty("$ref"); if (containsReference && typeof map["$ref"] === "object") { - const schema = await retrieveSchema(vscode.Uri.parse(jsonObject["$ref"])); + const schema = await retrieveSchemaFromUri(vscode.Uri.parse(jsonSchemaObject["$ref"])); const mappedProperties = map["$ref"]; - delete jsonObject["$ref"]; + delete jsonSchemaObject["$ref"]; Object.getOwnPropertyNames(schema).forEach((property) => { - jsonObject[property] = schema[property]; + jsonSchemaObject[property] = schema[property]; }); delete map["$ref"]; @@ -125,10 +129,10 @@ async function applyEditsMapToJson(jsonObject, map) { map[property] = mappedProperties[property]; }); - return await applyEditsMapToJson(jsonObject, map); + return await applyEditsMapToJson(jsonSchemaObject, map); } - for (const key of Object.getOwnPropertyNames(jsonObject)) { + for (const key of Object.getOwnPropertyNames(jsonSchemaObject)) { // Handle unmapped key. if (!map.hasOwnProperty(key) && !map.hasOwnProperty("$voodooJoker")) { continue; @@ -141,44 +145,47 @@ async function applyEditsMapToJson(jsonObject, map) { Object.getOwnPropertyNames(mappedKey) .filter((x) => { if (typeof mappedKey[x] === "object") { - return jsonObject[key].hasOwnProperty(x) - ? typeof jsonObject[key][x] !== "object" && x !== "$ref" + return jsonSchemaObject[key].hasOwnProperty(x) + ? typeof jsonSchemaObject[key][x] !== "object" && x !== "$ref" : x !== "$voodooJoker"; } else { return true; } }) .forEach((property) => { - jsonObject[key][property] = mappedKey[property]; + jsonSchemaObject[key][property] = mappedKey[property]; }); } else { - jsonObject[key] = mappedKey; + jsonSchemaObject[key] = mappedKey; } // Explore object types recursively. - if (typeof jsonObject[key] === "object") { - await applyEditsMapToJson(jsonObject[key], mappedKey); + if (typeof jsonSchemaObject[key] === "object") { + await applyEditsMapToJson(jsonSchemaObject[key], mappedKey); } } } +const paths = require("./paths/paths"); + /** - * Retrieves the json schema for the Voodoo theme's source file from - * vscode's built-in color theme schema. - * @param {vscode.ExtensionContext} context the active Voodoo theme's extension context. + * Refreshes the json schema file used by the extension to validate Voodoo's + * theme source. + * @param {vscode.ExtensionContext} context Voodoo's current extension context. */ async function refreshJsonSchema(context) { - const voodooSchemaPath = context.extensionPath + "/theme-src.schema.json"; - const builtInColorThemeUri = vscode.Uri.parse("vscode://schemas/color-theme"); - - // Read default json schema resource. - let themeJsonSchema = await retrieveSchema(builtInColorThemeUri); - - // Apply edits to match theme-src's needs. - await applyEditsMapToJson(themeJsonSchema, VOODOO_THEME_SCHEMA_EDITS); - - // Write result to the extension's schema file. - await writeFile(voodooSchemaPath, JSON.stringify(themeJsonSchema) + "\n", "utf-8"); + // Retrieve the built-in json schema for themes from vscode's resources. + const builtInSchemaUri = vscode.Uri.parse("vscode://schemas/color-theme"); + const builtInJsonSchema = await retrieveSchemaFromUri(builtInSchemaUri); + + // Apply edits to the retrieved built-in json schema to address Voodoo's + // theme source needs. + await applyEditsMapToJson(builtInJsonSchema, VOODOO_THEME_SCHEMA_EDITS); + + // Write the resulting json schema file at the expected path from the current + // extension's root. + const voodooSchemaPath = `${context.extensionPath}/themes/${paths.THEME_SOURCE_SCHEMA_FILENAME}`; + await writeFile(voodooSchemaPath, JSON.stringify(builtInJsonSchema) + "\n", "utf-8"); } module.exports = { refreshJsonSchema }; diff --git a/package.json b/package.json index b47487a..23d99e7 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,7 @@ "publisher": "liamsheppard", "scripts": { "build": "node ./builder build-theme", - "build-theme": "node ./builder build-theme", - "build-schema": "node ./builder build-schema" + "build-theme": "node ./builder build-theme" }, "galleryBanner": { "color": "#25273e",