[Broken] Load a src theme in test

Nate Butler created

Change summary

assets/themes/src/vsc/dracula/LICENSE      |   21 
assets/themes/src/vsc/dracula/dracula.json | 1067 ++++++++++++++++++++++++
crates/theme2/src/import.rs                |  301 +++++-
3 files changed, 1,342 insertions(+), 47 deletions(-)

Detailed changes

assets/themes/src/vsc/dracula/LICENSE 🔗

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Dracula Theme
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vsc/dracula/dracula.json 🔗

@@ -0,0 +1,1067 @@
+{
+  "$schema": "vscode://schemas/color-theme",
+  "name": "Dracula",
+  "author": "Zeno Rocha",
+  "maintainers": ["Derek P Sifford <dereksifford@gmail.com>"],
+  "semanticClass": "theme.dracula",
+  "semanticHighlighting": true,
+  "dracula": {
+    "base": [
+      "#282A36",
+      "#F8F8F2",
+      "#44475A",
+      "#6272A4",
+      "#8BE9FD",
+      "#50FA7B",
+      "#FFB86C",
+      "#FF79C6",
+      "#BD93F9",
+      "#FF5555",
+      "#F1FA8C"
+    ],
+    "ansi": [
+      "#21222C",
+      "#FF5555",
+      "#50FA7B",
+      "#F1FA8C",
+      "#BD93F9",
+      "#FF79C6",
+      "#8BE9FD",
+      "#F8F8F2",
+      "#6272A4",
+      "#FF6E6E",
+      "#69FF94",
+      "#FFFFA5",
+      "#D6ACFF",
+      "#FF92DF",
+      "#A4FFFF",
+      "#FFFFFF"
+    ],
+    "brightOther": ["#E9F284", "#8BE9FE"],
+    "other": [
+      "#44475A75",
+      "#FFFFFF1A",
+      "#FFFFFF",
+      "#44475A70",
+      "#424450",
+      "#343746",
+      "#21222C",
+      "#191A21"
+    ]
+  },
+  "colors": {
+    "terminal.background": "#282A36",
+    "terminal.foreground": "#F8F8F2",
+    "terminal.ansiBrightBlack": "#6272A4",
+    "terminal.ansiBrightRed": "#FF6E6E",
+    "terminal.ansiBrightGreen": "#69FF94",
+    "terminal.ansiBrightYellow": "#FFFFA5",
+    "terminal.ansiBrightBlue": "#D6ACFF",
+    "terminal.ansiBrightMagenta": "#FF92DF",
+    "terminal.ansiBrightCyan": "#A4FFFF",
+    "terminal.ansiBrightWhite": "#FFFFFF",
+    "terminal.ansiBlack": "#21222C",
+    "terminal.ansiRed": "#FF5555",
+    "terminal.ansiGreen": "#50FA7B",
+    "terminal.ansiYellow": "#F1FA8C",
+    "terminal.ansiBlue": "#BD93F9",
+    "terminal.ansiMagenta": "#FF79C6",
+    "terminal.ansiCyan": "#8BE9FD",
+    "terminal.ansiWhite": "#F8F8F2",
+    "focusBorder": "#6272A4",
+    "foreground": "#F8F8F2",
+    "selection.background": "#BD93F9",
+    "errorForeground": "#FF5555",
+    "button.background": "#44475A",
+    "button.foreground": "#F8F8F2",
+    "button.secondaryBackground": "#282A36",
+    "button.secondaryForeground": "#F8F8F2",
+    "button.secondaryHoverBackground": "#343746",
+    "dropdown.background": "#343746",
+    "dropdown.border": "#191A21",
+    "dropdown.foreground": "#F8F8F2",
+    "input.background": "#282A36",
+    "input.foreground": "#F8F8F2",
+    "input.border": "#191A21",
+    "input.placeholderForeground": "#6272A4",
+    "inputOption.activeBorder": "#BD93F9",
+    "inputValidation.infoBorder": "#FF79C6",
+    "inputValidation.warningBorder": "#FFB86C",
+    "inputValidation.errorBorder": "#FF5555",
+    "badge.foreground": "#F8F8F2",
+    "badge.background": "#44475A",
+    "progressBar.background": "#FF79C6",
+    "list.activeSelectionBackground": "#44475A",
+    "list.activeSelectionForeground": "#F8F8F2",
+    "list.dropBackground": "#44475A",
+    "list.focusBackground": "#44475A75",
+    "list.highlightForeground": "#8BE9FD",
+    "list.hoverBackground": "#44475A75",
+    "list.inactiveSelectionBackground": "#44475A75",
+    "list.warningForeground": "#FFB86C",
+    "list.errorForeground": "#FF5555",
+    "activityBar.background": "#343746",
+    "activityBar.inactiveForeground": "#6272A4",
+    "activityBar.foreground": "#F8F8F2",
+    "activityBar.activeBorder": "#FF79C680",
+    "activityBar.activeBackground": "#BD93F910",
+    "activityBarBadge.background": "#FF79C6",
+    "activityBarBadge.foreground": "#F8F8F2",
+    "sideBar.background": "#21222C",
+    "sideBarTitle.foreground": "#F8F8F2",
+    "sideBarSectionHeader.background": "#282A36",
+    "sideBarSectionHeader.border": "#191A21",
+    "editorGroup.border": "#BD93F9",
+    "editorGroup.dropBackground": "#44475A70",
+    "editorGroupHeader.tabsBackground": "#191A21",
+    "tab.activeBackground": "#282A36",
+    "tab.activeForeground": "#F8F8F2",
+    "tab.border": "#191A21",
+    "tab.activeBorderTop": "#FF79C680",
+    "tab.inactiveBackground": "#21222C",
+    "tab.inactiveForeground": "#6272A4",
+    "editor.foreground": "#F8F8F2",
+    "editor.background": "#282A36",
+    "editorLineNumber.foreground": "#6272A4",
+    "editor.selectionBackground": "#44475A",
+    "editor.selectionHighlightBackground": "#424450",
+    "editor.foldBackground": "#21222C80",
+    "editor.wordHighlightBackground": "#8BE9FD50",
+    "editor.wordHighlightStrongBackground": "#50FA7B50",
+    "editor.findMatchBackground": "#FFB86C80",
+    "editor.findMatchHighlightBackground": "#FFFFFF40",
+    "editor.findRangeHighlightBackground": "#44475A75",
+    "editor.hoverHighlightBackground": "#8BE9FD50",
+    "editor.lineHighlightBorder": "#44475A",
+    "editorLink.activeForeground": "#8BE9FD",
+    "editor.rangeHighlightBackground": "#BD93F915",
+    "editor.snippetTabstopHighlightBackground": "#282A36",
+    "editor.snippetTabstopHighlightBorder": "#6272A4",
+    "editor.snippetFinalTabstopHighlightBackground": "#282A36",
+    "editor.snippetFinalTabstopHighlightBorder": "#50FA7B",
+    "editorWhitespace.foreground": "#FFFFFF1A",
+    "editorIndentGuide.background": "#FFFFFF1A",
+    "editorIndentGuide.activeBackground": "#FFFFFF45",
+    "editorRuler.foreground": "#FFFFFF1A",
+    "editorCodeLens.foreground": "#6272A4",
+    "editorBracketHighlight.foreground1": "#F8F8F2",
+    "editorBracketHighlight.foreground2": "#FF79C6",
+    "editorBracketHighlight.foreground3": "#8BE9FD",
+    "editorBracketHighlight.foreground4": "#50FA7B",
+    "editorBracketHighlight.foreground5": "#BD93F9",
+    "editorBracketHighlight.foreground6": "#FFB86C",
+    "editorBracketHighlight.unexpectedBracket.foreground": "#FF5555",
+    "editorOverviewRuler.border": "#191A21",
+    "editorOverviewRuler.selectionHighlightForeground": "#FFB86C",
+    "editorOverviewRuler.wordHighlightForeground": "#8BE9FD",
+    "editorOverviewRuler.wordHighlightStrongForeground": "#50FA7B",
+    "editorOverviewRuler.modifiedForeground": "#8BE9FD80",
+    "editorOverviewRuler.addedForeground": "#50FA7B80",
+    "editorOverviewRuler.deletedForeground": "#FF555580",
+    "editorOverviewRuler.errorForeground": "#FF555580",
+    "editorOverviewRuler.warningForeground": "#FFB86C80",
+    "editorOverviewRuler.infoForeground": "#8BE9FD80",
+    "editorError.foreground": "#FF5555",
+    "editorWarning.foreground": "#8BE9FD",
+    "editorGutter.modifiedBackground": "#8BE9FD80",
+    "editorGutter.addedBackground": "#50FA7B80",
+    "editorGutter.deletedBackground": "#FF555580",
+    "gitDecoration.modifiedResourceForeground": "#8BE9FD",
+    "gitDecoration.deletedResourceForeground": "#FF5555",
+    "gitDecoration.untrackedResourceForeground": "#50FA7B",
+    "gitDecoration.ignoredResourceForeground": "#6272A4",
+    "gitDecoration.conflictingResourceForeground": "#FFB86C",
+    "diffEditor.insertedTextBackground": "#50FA7B20",
+    "diffEditor.removedTextBackground": "#FF555550",
+    "inlineChat.regionHighlight": "#343746",
+    "editorWidget.background": "#21222C",
+    "editorSuggestWidget.background": "#21222C",
+    "editorSuggestWidget.foreground": "#F8F8F2",
+    "editorSuggestWidget.selectedBackground": "#44475A",
+    "editorHoverWidget.background": "#282A36",
+    "editorHoverWidget.border": "#6272A4",
+    "editorMarkerNavigation.background": "#21222C",
+    "peekView.border": "#44475A",
+    "peekViewEditor.background": "#282A36",
+    "peekViewEditor.matchHighlightBackground": "#F1FA8C80",
+    "peekViewResult.background": "#21222C",
+    "peekViewResult.fileForeground": "#F8F8F2",
+    "peekViewResult.lineForeground": "#F8F8F2",
+    "peekViewResult.matchHighlightBackground": "#F1FA8C80",
+    "peekViewResult.selectionBackground": "#44475A",
+    "peekViewResult.selectionForeground": "#F8F8F2",
+    "peekViewTitle.background": "#191A21",
+    "peekViewTitleDescription.foreground": "#6272A4",
+    "peekViewTitleLabel.foreground": "#F8F8F2",
+    "merge.currentHeaderBackground": "#50FA7B90",
+    "merge.incomingHeaderBackground": "#BD93F990",
+    "editorOverviewRuler.currentContentForeground": "#50FA7B",
+    "editorOverviewRuler.incomingContentForeground": "#BD93F9",
+    "panel.background": "#282A36",
+    "panel.border": "#BD93F9",
+    "panelTitle.activeBorder": "#FF79C6",
+    "panelTitle.activeForeground": "#F8F8F2",
+    "panelTitle.inactiveForeground": "#6272A4",
+    "statusBar.background": "#191A21",
+    "statusBar.foreground": "#F8F8F2",
+    "statusBar.debuggingBackground": "#FF5555",
+    "statusBar.debuggingForeground": "#191A21",
+    "statusBar.noFolderBackground": "#191A21",
+    "statusBar.noFolderForeground": "#F8F8F2",
+    "statusBarItem.prominentBackground": "#FF5555",
+    "statusBarItem.prominentHoverBackground": "#FFB86C",
+    "statusBarItem.remoteForeground": "#282A36",
+    "statusBarItem.remoteBackground": "#BD93F9",
+    "titleBar.activeBackground": "#21222C",
+    "titleBar.activeForeground": "#F8F8F2",
+    "titleBar.inactiveBackground": "#191A21",
+    "titleBar.inactiveForeground": "#6272A4",
+    "extensionButton.prominentForeground": "#F8F8F2",
+    "extensionButton.prominentBackground": "#50FA7B90",
+    "extensionButton.prominentHoverBackground": "#50FA7B60",
+    "pickerGroup.border": "#BD93F9",
+    "pickerGroup.foreground": "#8BE9FD",
+    "debugToolBar.background": "#21222C",
+    "walkThrough.embeddedEditorBackground": "#21222C",
+    "settings.headerForeground": "#F8F8F2",
+    "settings.modifiedItemIndicator": "#FFB86C",
+    "settings.dropdownBackground": "#21222C",
+    "settings.dropdownForeground": "#F8F8F2",
+    "settings.dropdownBorder": "#191A21",
+    "settings.checkboxBackground": "#21222C",
+    "settings.checkboxForeground": "#F8F8F2",
+    "settings.checkboxBorder": "#191A21",
+    "settings.textInputBackground": "#21222C",
+    "settings.textInputForeground": "#F8F8F2",
+    "settings.textInputBorder": "#191A21",
+    "settings.numberInputBackground": "#21222C",
+    "settings.numberInputForeground": "#F8F8F2",
+    "settings.numberInputBorder": "#191A21",
+    "breadcrumb.foreground": "#6272A4",
+    "breadcrumb.background": "#282A36",
+    "breadcrumb.focusForeground": "#F8F8F2",
+    "breadcrumb.activeSelectionForeground": "#F8F8F2",
+    "breadcrumbPicker.background": "#191A21",
+    "listFilterWidget.background": "#343746",
+    "listFilterWidget.outline": "#424450",
+    "listFilterWidget.noMatchesOutline": "#FF5555"
+  },
+  "tokenColors": [
+    {
+      "scope": ["emphasis"],
+      "settings": {
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "scope": ["strong"],
+      "settings": {
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "scope": ["header"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "scope": ["meta.diff", "meta.diff.header"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "scope": ["markup.inserted"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "scope": ["markup.deleted"],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "scope": ["markup.changed"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "scope": ["invalid"],
+      "settings": {
+        "foreground": "#FF5555",
+        "fontStyle": "underline italic"
+      }
+    },
+    {
+      "scope": ["invalid.deprecated"],
+      "settings": {
+        "foreground": "#F8F8F2",
+        "fontStyle": "underline italic"
+      }
+    },
+    {
+      "scope": ["entity.name.filename"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "scope": ["markup.error"],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Underlined markup",
+      "scope": ["markup.underline"],
+      "settings": {
+        "fontStyle": "underline"
+      }
+    },
+    {
+      "name": "Bold markup",
+      "scope": ["markup.bold"],
+      "settings": {
+        "fontStyle": "bold",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Markup headings",
+      "scope": ["markup.heading"],
+      "settings": {
+        "fontStyle": "bold",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Markup italic",
+      "scope": ["markup.italic"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Bullets, lists (prose)",
+      "scope": [
+        "beginning.punctuation.definition.list.markdown",
+        "beginning.punctuation.definition.quote.markdown",
+        "punctuation.definition.link.restructuredtext"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Inline code (prose)",
+      "scope": ["markup.inline.raw", "markup.raw.restructuredtext"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Links (prose)",
+      "scope": ["markup.underline.link", "markup.underline.link.image"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Link text, image alt text (prose)",
+      "scope": [
+        "meta.link.reference.def.restructuredtext",
+        "punctuation.definition.directive.restructuredtext",
+        "string.other.link.description",
+        "string.other.link.title"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Blockquotes (prose)",
+      "scope": ["entity.name.directive.restructuredtext", "markup.quote"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Horizontal rule (prose)",
+      "scope": ["meta.separator.markdown"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Code blocks",
+      "scope": [
+        "fenced_code.block.language",
+        "markup.raw.inner.restructuredtext",
+        "markup.fenced_code.block.markdown punctuation.definition.markdown"
+      ],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Prose constants",
+      "scope": ["punctuation.definition.constant.restructuredtext"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Braces in markdown headings",
+      "scope": [
+        "markup.heading.markdown punctuation.definition.string.begin",
+        "markup.heading.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Braces in markdown paragraphs",
+      "scope": [
+        "meta.paragraph.markdown punctuation.definition.string.begin",
+        "meta.paragraph.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Braces in markdown blockquotes",
+      "scope": [
+        "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin",
+        "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "User-defined class names",
+      "scope": ["entity.name.type.class", "entity.name.class"],
+      "settings": {
+        "foreground": "#8BE9FD",
+        "fontStyle": "normal"
+      }
+    },
+    {
+      "name": "this, super, self, etc.",
+      "scope": [
+        "keyword.expressions-and-types.swift",
+        "keyword.other.this",
+        "variable.language",
+        "variable.language punctuation.definition.variable.php",
+        "variable.other.readwrite.instance.ruby",
+        "variable.parameter.function.language.special"
+      ],
+      "settings": {
+        "foreground": "#BD93F9",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Inherited classes",
+      "scope": ["entity.other.inherited-class"],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Comments",
+      "scope": [
+        "comment",
+        "punctuation.definition.comment",
+        "unused.comment",
+        "wildcard.comment"
+      ],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "JSDoc-style keywords",
+      "scope": [
+        "comment keyword.codetag.notation",
+        "comment.block.documentation keyword",
+        "comment.block.documentation storage.type.class"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "JSDoc-style types",
+      "scope": ["comment.block.documentation entity.name.type"],
+      "settings": {
+        "foreground": "#8BE9FD",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "JSDoc-style type brackets",
+      "scope": [
+        "comment.block.documentation entity.name.type punctuation.definition.bracket"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "JSDoc-style comment parameters",
+      "scope": ["comment.block.documentation variable"],
+      "settings": {
+        "foreground": "#FFB86C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Constants",
+      "scope": ["constant", "variable.other.constant"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Constant escape sequences",
+      "scope": [
+        "constant.character.escape",
+        "constant.character.string.escape",
+        "constant.regexp"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "HTML tags",
+      "scope": ["entity.name.tag"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "CSS attribute parent selectors ('&')",
+      "scope": ["entity.other.attribute-name.parent-selector"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "HTML/CSS attribute names",
+      "scope": ["entity.other.attribute-name"],
+      "settings": {
+        "foreground": "#50FA7B",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Function names",
+      "scope": [
+        "entity.name.function",
+        "meta.function-call.object",
+        "meta.function-call.php",
+        "meta.function-call.static",
+        "meta.method-call.java meta.method",
+        "meta.method.groovy",
+        "support.function.any-method.lua",
+        "keyword.operator.function.infix"
+      ],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Function parameters",
+      "scope": [
+        "entity.name.variable.parameter",
+        "meta.at-rule.function variable",
+        "meta.at-rule.mixin variable",
+        "meta.function.arguments variable.other.php",
+        "meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql",
+        "variable.parameter"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Decorators",
+      "scope": [
+        "meta.decorator variable.other.readwrite",
+        "meta.decorator variable.other.property"
+      ],
+      "settings": {
+        "foreground": "#50FA7B",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Decorator Objects",
+      "scope": ["meta.decorator variable.other.object"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Keywords",
+      "scope": ["keyword", "punctuation.definition.keyword"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Keyword \"new\"",
+      "scope": ["keyword.control.new", "keyword.operator.new"],
+      "settings": {
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Generic selectors (CSS/SCSS/Less/Stylus)",
+      "scope": ["meta.selector"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Language Built-ins",
+      "scope": ["support"],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Built-in magic functions and constants",
+      "scope": [
+        "support.function.magic",
+        "support.variable",
+        "variable.other.predefined"
+      ],
+      "settings": {
+        "fontStyle": "regular",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Built-in functions / properties",
+      "scope": ["support.function", "support.type.property-name"],
+      "settings": {
+        "fontStyle": "regular"
+      }
+    },
+    {
+      "name": "Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)",
+      "scope": [
+        "constant.other.symbol.hashkey punctuation.definition.constant.ruby",
+        "entity.other.attribute-name.placeholder punctuation",
+        "entity.other.attribute-name.pseudo-class punctuation",
+        "entity.other.attribute-name.pseudo-element punctuation",
+        "meta.group.double.toml",
+        "meta.group.toml",
+        "meta.object-binding-pattern-variable punctuation.destructuring",
+        "punctuation.colon.graphql",
+        "punctuation.definition.block.scalar.folded.yaml",
+        "punctuation.definition.block.scalar.literal.yaml",
+        "punctuation.definition.block.sequence.item.yaml",
+        "punctuation.definition.entity.other.inherited-class",
+        "punctuation.function.swift",
+        "punctuation.separator.dictionary.key-value",
+        "punctuation.separator.hash",
+        "punctuation.separator.inheritance",
+        "punctuation.separator.key-value",
+        "punctuation.separator.key-value.mapping.yaml",
+        "punctuation.separator.namespace",
+        "punctuation.separator.pointer-access",
+        "punctuation.separator.slice",
+        "string.unquoted.heredoc punctuation.definition.string",
+        "support.other.chomping-indicator.yaml",
+        "punctuation.separator.annotation"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Brackets, braces, parens, etc.",
+      "scope": [
+        "keyword.operator.other.powershell",
+        "keyword.other.statement-separator.powershell",
+        "meta.brace.round",
+        "meta.function-call punctuation",
+        "punctuation.definition.arguments.begin",
+        "punctuation.definition.arguments.end",
+        "punctuation.definition.entity.begin",
+        "punctuation.definition.entity.end",
+        "punctuation.definition.tag.cs",
+        "punctuation.definition.type.begin",
+        "punctuation.definition.type.end",
+        "punctuation.section.scope.begin",
+        "punctuation.section.scope.end",
+        "punctuation.terminator.expression.php",
+        "storage.type.generic.java",
+        "string.template meta.brace",
+        "string.template punctuation.accessor"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Variable interpolation operators",
+      "scope": [
+        "meta.string-contents.quoted.double punctuation.definition.variable",
+        "punctuation.definition.interpolation.begin",
+        "punctuation.definition.interpolation.end",
+        "punctuation.definition.template-expression.begin",
+        "punctuation.definition.template-expression.end",
+        "punctuation.section.embedded.begin",
+        "punctuation.section.embedded.coffee",
+        "punctuation.section.embedded.end",
+        "punctuation.section.embedded.end source.php",
+        "punctuation.section.embedded.end source.ruby",
+        "punctuation.definition.variable.makefile"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Keys (serializable languages)",
+      "scope": [
+        "entity.name.function.target.makefile",
+        "entity.name.section.toml",
+        "entity.name.tag.yaml",
+        "variable.other.key.toml"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Dates / timestamps (serializable languages)",
+      "scope": ["constant.other.date", "constant.other.timestamp"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "YAML aliases",
+      "scope": ["variable.other.alias.yaml"],
+      "settings": {
+        "fontStyle": "italic underline",
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Storage",
+      "scope": [
+        "storage",
+        "meta.implementation storage.type.objc",
+        "meta.interface-or-protocol storage.type.objc",
+        "source.groovy storage.type.def"
+      ],
+      "settings": {
+        "fontStyle": "regular",
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Types",
+      "scope": [
+        "entity.name.type",
+        "keyword.primitive-datatypes.swift",
+        "keyword.type.cs",
+        "meta.protocol-list.objc",
+        "meta.return-type.objc",
+        "source.go storage.type",
+        "source.groovy storage.type",
+        "source.java storage.type",
+        "source.powershell entity.other.attribute-name",
+        "storage.class.std.rust",
+        "storage.type.attribute.swift",
+        "storage.type.c",
+        "storage.type.core.rust",
+        "storage.type.cs",
+        "storage.type.groovy",
+        "storage.type.objc",
+        "storage.type.php",
+        "storage.type.haskell",
+        "storage.type.ocaml"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Generics, templates, and mapped type declarations",
+      "scope": [
+        "entity.name.type.type-parameter",
+        "meta.indexer.mappedtype.declaration entity.name.type",
+        "meta.type.parameters entity.name.type"
+      ],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Modifiers",
+      "scope": ["storage.modifier"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "RegExp string",
+      "scope": [
+        "string.regexp",
+        "constant.other.character-class.set.regexp",
+        "constant.character.escape.backslash.regexp"
+      ],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "Non-capture operators",
+      "scope": ["punctuation.definition.group.capture.regexp"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "RegExp start and end characters",
+      "scope": [
+        "string.regexp punctuation.definition.string.begin",
+        "string.regexp punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Character group",
+      "scope": ["punctuation.definition.character-class.regexp"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Capture groups",
+      "scope": ["punctuation.definition.group.regexp"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Assertion operators",
+      "scope": [
+        "punctuation.definition.group.assertion.regexp",
+        "keyword.operator.negation.regexp"
+      ],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Positive lookaheads",
+      "scope": ["meta.assertion.look-ahead.regexp"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Strings",
+      "scope": ["string"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "String quotes (temporary vscode fix)",
+      "scope": [
+        "punctuation.definition.string.begin",
+        "punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#E9F284"
+      }
+    },
+    {
+      "name": "Property quotes (temporary vscode fix)",
+      "scope": [
+        "punctuation.support.type.property-name.begin",
+        "punctuation.support.type.property-name.end"
+      ],
+      "settings": {
+        "foreground": "#8BE9FE"
+      }
+    },
+    {
+      "name": "Docstrings",
+      "scope": [
+        "string.quoted.docstring.multi",
+        "string.quoted.docstring.multi.python punctuation.definition.string.begin",
+        "string.quoted.docstring.multi.python punctuation.definition.string.end",
+        "string.quoted.docstring.multi.python constant.character.escape"
+      ],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Variables and object properties",
+      "scope": [
+        "variable",
+        "constant.other.key.perl",
+        "support.variable.property",
+        "variable.other.constant.js",
+        "variable.other.constant.ts",
+        "variable.other.constant.tsx"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Destructuring / aliasing reference name (LHS)",
+      "scope": [
+        "meta.import variable.other.readwrite",
+        "meta.variable.assignment.destructured.object.coffee variable"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Destructuring / aliasing variable name (RHS)",
+      "scope": [
+        "meta.import variable.other.readwrite.alias",
+        "meta.export variable.other.readwrite.alias",
+        "meta.variable.assignment.destructured.object.coffee variable variable"
+      ],
+      "settings": {
+        "fontStyle": "normal",
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "GraphQL keys",
+      "scope": ["meta.selectionset.graphql variable"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "GraphQL function arguments",
+      "scope": ["meta.selectionset.graphql meta.arguments variable"],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "GraphQL fragment name (definition)",
+      "scope": ["entity.name.fragment.graphql", "variable.fragment.graphql"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Edge cases (foreground color resets)",
+      "scope": [
+        "constant.other.symbol.hashkey.ruby",
+        "keyword.operator.dereference.java",
+        "keyword.operator.navigation.groovy",
+        "meta.scope.for-loop.shell punctuation.definition.string.begin",
+        "meta.scope.for-loop.shell punctuation.definition.string.end",
+        "meta.scope.for-loop.shell string",
+        "storage.modifier.import",
+        "punctuation.section.embedded.begin.tsx",
+        "punctuation.section.embedded.end.tsx",
+        "punctuation.section.embedded.begin.jsx",
+        "punctuation.section.embedded.end.jsx",
+        "punctuation.separator.list.comma.css",
+        "constant.language.empty-list.haskell"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Shell variables prefixed with \"$\" (edge case)",
+      "scope": ["source.shell variable.other"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)",
+      "scope": ["support.constant"],
+      "settings": {
+        "fontStyle": "normal",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Makefile prerequisite names",
+      "scope": ["meta.scope.prerequisites.makefile"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "SCSS attibute selector strings",
+      "scope": ["meta.attribute-selector.scss"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "SCSS attribute selector brackets",
+      "scope": [
+        "punctuation.definition.attribute-selector.end.bracket.square.scss",
+        "punctuation.definition.attribute-selector.begin.bracket.square.scss"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Haskell Pragmas",
+      "scope": ["meta.preprocessor.haskell"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Log file error",
+      "scope": ["log.error"],
+      "settings": {
+        "foreground": "#FF5555",
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Log file warning",
+      "scope": ["log.warning"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "bold"
+      }
+    }
+  ]
+}

crates/theme2/src/import.rs 🔗

@@ -1,254 +1,461 @@
-use crate::ThemeColorsRefinement;
+use serde::Deserialize;
 
-struct ImportedThemeFamily {
-    pub id: String,
+#[derive(Deserialize, Debug)]
+pub struct Theme {
+    #[serde(rename = "$schema")]
+    pub schema: String,
     pub name: String,
     pub author: String,
-    pub url: String,
-    pub license: String,
-    pub themes: Vec<ImportedThemeVariant>,
+    pub maintainers: Vec<String>,
+    pub semantic_class: String,
+    pub semantic_highlighting: bool,
+    pub colors: VSCodeColors,
 }
 
-struct ImportedThemeVariant {
-    pub id: String,
-    pub name: String,
-    pub colors: ThemeColorsRefinement,
-}
-
-macro_rules! gen_vscode_colors_and_enum {
-    ($($name:ident: $type:ty),*) => {
-        #[derive(Debug)]
-        pub struct VSCodeColors {
-            $(
-                pub $name: $type,
-            )*
-        }
-
-        pub enum VSCodeColor {
-            $(
-                $({
-                    let mut s = stringify!($name).to_string();
-                    s.get_mut(0..1).unwrap().make_ascii_uppercase();
-                    s.replace("_", "")
-                }),
-            )*
-        }
-    };
-}
-
-gen_vscode_colors_and_enum! {
-    terminal_background: String,
-    terminal_foreground: String
-}
-
-#[derive(Debug)]
+#[derive(Debug, Deserialize)]
 pub struct VSCodeColors {
+    #[serde(rename = "vsc_terminal_background")]
     terminal_background: String,
+    #[serde(rename = "vsc_terminal_foreground")]
     terminal_foreground: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_black")]
     terminal_ansi_bright_black: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_red")]
     terminal_ansi_bright_red: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_green")]
     terminal_ansi_bright_green: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_yellow")]
     terminal_ansi_bright_yellow: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_blue")]
     terminal_ansi_bright_blue: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_magenta")]
     terminal_ansi_bright_magenta: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_cyan")]
     terminal_ansi_bright_cyan: String,
+    #[serde(rename = "vsc_terminal_ansi_bright_white")]
     terminal_ansi_bright_white: String,
+    #[serde(rename = "vsc_terminal_ansi_black")]
     terminal_ansi_black: String,
+    #[serde(rename = "vsc_terminal_ansi_red")]
     terminal_ansi_red: String,
+    #[serde(rename = "vsc_terminal_ansi_green")]
     terminal_ansi_green: String,
+    #[serde(rename = "vsc_terminal_ansi_yellow")]
     terminal_ansi_yellow: String,
+    #[serde(rename = "vsc_terminal_ansi_blue")]
     terminal_ansi_blue: String,
+    #[serde(rename = "vsc_terminal_ansi_magenta")]
     terminal_ansi_magenta: String,
+    #[serde(rename = "vsc_terminal_ansi_cyan")]
     terminal_ansi_cyan: String,
+    #[serde(rename = "vsc_terminal_ansi_white")]
     terminal_ansi_white: String,
+    #[serde(rename = "vsc_focus_border")]
     focus_border: String,
+    #[serde(rename = "vsc_foreground")]
     foreground: String,
+    #[serde(rename = "vsc_selection_background")]
     selection_background: String,
+    #[serde(rename = "vsc_error_foreground")]
     error_foreground: String,
+    #[serde(rename = "vsc_button_background")]
     button_background: String,
+    #[serde(rename = "vsc_button_foreground")]
     button_foreground: String,
+    #[serde(rename = "vsc_button_secondary_background")]
     button_secondary_background: String,
+    #[serde(rename = "vsc_button_secondary_foreground")]
     button_secondary_foreground: String,
+    #[serde(rename = "vsc_button_secondary_hover_background")]
     button_secondary_hover_background: String,
+    #[serde(rename = "vsc_dropdown_background")]
     dropdown_background: String,
+    #[serde(rename = "vsc_dropdown_border")]
     dropdown_border: String,
+    #[serde(rename = "vsc_dropdown_foreground")]
     dropdown_foreground: String,
+    #[serde(rename = "vsc_input_background")]
     input_background: String,
+    #[serde(rename = "vsc_input_foreground")]
     input_foreground: String,
+    #[serde(rename = "vsc_input_border")]
     input_border: String,
+    #[serde(rename = "vsc_input_placeholder_foreground")]
     input_placeholder_foreground: String,
+    #[serde(rename = "vsc_input_option_active_border")]
     input_option_active_border: String,
+    #[serde(rename = "vsc_input_validation_info_border")]
     input_validation_info_border: String,
+    #[serde(rename = "vsc_input_validation_warning_border")]
     input_validation_warning_border: String,
+    #[serde(rename = "vsc_input_validation_error_border")]
     input_validation_error_border: String,
+    #[serde(rename = "vsc_badge_foreground")]
     badge_foreground: String,
+    #[serde(rename = "vsc_badge_background")]
     badge_background: String,
+    #[serde(rename = "vsc_progress_bar_background")]
     progress_bar_background: String,
+    #[serde(rename = "vsc_list_active_selection_background")]
     list_active_selection_background: String,
+    #[serde(rename = "vsc_list_active_selection_foreground")]
     list_active_selection_foreground: String,
+    #[serde(rename = "vsc_list_drop_background")]
     list_drop_background: String,
+    #[serde(rename = "vsc_list_focus_background")]
     list_focus_background: String,
+    #[serde(rename = "vsc_list_highlight_foreground")]
     list_highlight_foreground: String,
+    #[serde(rename = "vsc_list_hover_background")]
     list_hover_background: String,
+    #[serde(rename = "vsc_list_inactive_selection_background")]
     list_inactive_selection_background: String,
+    #[serde(rename = "vsc_list_warning_foreground")]
     list_warning_foreground: String,
+    #[serde(rename = "vsc_list_error_foreground")]
     list_error_foreground: String,
+    #[serde(rename = "vsc_activity_bar_background")]
     activity_bar_background: String,
+    #[serde(rename = "vsc_activity_bar_inactive_foreground")]
     activity_bar_inactive_foreground: String,
+    #[serde(rename = "vsc_activity_bar_foreground")]
     activity_bar_foreground: String,
+    #[serde(rename = "vsc_activity_bar_active_border")]
     activity_bar_active_border: String,
+    #[serde(rename = "vsc_activity_bar_active_background")]
     activity_bar_active_background: String,
+    #[serde(rename = "vsc_activity_bar_badge_background")]
     activity_bar_badge_background: String,
+    #[serde(rename = "vsc_activity_bar_badge_foreground")]
     activity_bar_badge_foreground: String,
+    #[serde(rename = "vsc_side_bar_background")]
     side_bar_background: String,
+    #[serde(rename = "vsc_side_bar_title_foreground")]
     side_bar_title_foreground: String,
+    #[serde(rename = "vsc_side_bar_section_header_background")]
     side_bar_section_header_background: String,
+    #[serde(rename = "vsc_side_bar_section_header_border")]
     side_bar_section_header_border: String,
+    #[serde(rename = "vsc_editor_group_border")]
     editor_group_border: String,
+    #[serde(rename = "vsc_editor_group_drop_background")]
     editor_group_drop_background: String,
+    #[serde(rename = "vsc_editor_group_header_tabs_background")]
     editor_group_header_tabs_background: String,
+    #[serde(rename = "vsc_tab_active_background")]
     tab_active_background: String,
+    #[serde(rename = "vsc_tab_active_foreground")]
     tab_active_foreground: String,
+    #[serde(rename = "vsc_tab_border")]
     tab_border: String,
+    #[serde(rename = "vsc_tab_active_border_top")]
     tab_active_border_top: String,
+    #[serde(rename = "vsc_tab_inactive_background")]
     tab_inactive_background: String,
+    #[serde(rename = "vsc_tab_inactive_foreground")]
     tab_inactive_foreground: String,
+    #[serde(rename = "vsc_editor_foreground")]
     editor_foreground: String,
+    #[serde(rename = "vsc_editor_background")]
     editor_background: String,
+    #[serde(rename = "vsc_editor_line_number_foreground")]
     editor_line_number_foreground: String,
+    #[serde(rename = "vsc_editor_selection_background")]
     editor_selection_background: String,
+    #[serde(rename = "vsc_editor_selection_highlight_background")]
     editor_selection_highlight_background: String,
+    #[serde(rename = "vsc_editor_fold_background")]
     editor_fold_background: String,
+    #[serde(rename = "vsc_editor_word_highlight_background")]
     editor_word_highlight_background: String,
+    #[serde(rename = "vsc_editor_word_highlight_strong_background")]
     editor_word_highlight_strong_background: String,
+    #[serde(rename = "vsc_editor_find_match_background")]
     editor_find_match_background: String,
+    #[serde(rename = "vsc_editor_find_match_highlight_background")]
     editor_find_match_highlight_background: String,
+    #[serde(rename = "vsc_editor_find_range_highlight_background")]
     editor_find_range_highlight_background: String,
+    #[serde(rename = "vsc_editor_hover_highlight_background")]
     editor_hover_highlight_background: String,
+    #[serde(rename = "vsc_editor_line_highlight_border")]
     editor_line_highlight_border: String,
+    #[serde(rename = "vsc_editor_link_active_foreground")]
     editor_link_active_foreground: String,
+    #[serde(rename = "vsc_editor_range_highlight_background")]
     editor_range_highlight_background: String,
+    #[serde(rename = "vsc_editor_snippet_tabstop_highlight_background")]
     editor_snippet_tabstop_highlight_background: String,
+    #[serde(rename = "vsc_editor_snippet_tabstop_highlight_border")]
     editor_snippet_tabstop_highlight_border: String,
+    #[serde(rename = "vsc_editor_snippet_final_tabstop_highlight_background")]
     editor_snippet_final_tabstop_highlight_background: String,
+    #[serde(rename = "vsc_editor_snippet_final_tabstop_highlight_border")]
     editor_snippet_final_tabstop_highlight_border: String,
+    #[serde(rename = "vsc_editor_whitespace_foreground")]
     editor_whitespace_foreground: String,
+    #[serde(rename = "vsc_editor_indent_guide_background")]
     editor_indent_guide_background: String,
+    #[serde(rename = "vsc_editor_indent_guide_active_background")]
     editor_indent_guide_active_background: String,
+    #[serde(rename = "vsc_editor_ruler_foreground")]
     editor_ruler_foreground: String,
+    #[serde(rename = "vsc_editor_code_lens_foreground")]
     editor_code_lens_foreground: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground1")]
     editor_bracket_highlight_foreground1: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground2")]
     editor_bracket_highlight_foreground2: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground3")]
     editor_bracket_highlight_foreground3: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground4")]
     editor_bracket_highlight_foreground4: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground5")]
     editor_bracket_highlight_foreground5: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_foreground6")]
     editor_bracket_highlight_foreground6: String,
+    #[serde(rename = "vsc_editor_bracket_highlight_unexpected_bracket_foreground")]
     editor_bracket_highlight_unexpected_bracket_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_border")]
     editor_overview_ruler_border: String,
+    #[serde(rename = "vsc_editor_overview_ruler_selection_highlight_foreground")]
     editor_overview_ruler_selection_highlight_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_word_highlight_foreground")]
     editor_overview_ruler_word_highlight_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_word_highlight_strong_foreground")]
     editor_overview_ruler_word_highlight_strong_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_modified_foreground")]
     editor_overview_ruler_modified_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_added_foreground")]
     editor_overview_ruler_added_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_deleted_foreground")]
     editor_overview_ruler_deleted_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_error_foreground")]
     editor_overview_ruler_error_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_warning_foreground")]
     editor_overview_ruler_warning_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_info_foreground")]
     editor_overview_ruler_info_foreground: String,
+    #[serde(rename = "vsc_editor_error_foreground")]
     editor_error_foreground: String,
+    #[serde(rename = "vsc_editor_warning_foreground")]
     editor_warning_foreground: String,
+    #[serde(rename = "vsc_editor_gutter_modified_background")]
     editor_gutter_modified_background: String,
+    #[serde(rename = "vsc_editor_gutter_added_background")]
     editor_gutter_added_background: String,
+    #[serde(rename = "vsc_editor_gutter_deleted_background")]
     editor_gutter_deleted_background: String,
+    #[serde(rename = "vsc_git_decoration_modified_resource_foreground")]
     git_decoration_modified_resource_foreground: String,
+    #[serde(rename = "vsc_git_decoration_deleted_resource_foreground")]
     git_decoration_deleted_resource_foreground: String,
+    #[serde(rename = "vsc_git_decoration_untracked_resource_foreground")]
     git_decoration_untracked_resource_foreground: String,
+    #[serde(rename = "vsc_git_decoration_ignored_resource_foreground")]
     git_decoration_ignored_resource_foreground: String,
+    #[serde(rename = "vsc_git_decoration_conflicting_resource_foreground")]
     git_decoration_conflicting_resource_foreground: String,
+    #[serde(rename = "vsc_diff_editor_inserted_text_background")]
     diff_editor_inserted_text_background: String,
+    #[serde(rename = "vsc_diff_editor_removed_text_background")]
     diff_editor_removed_text_background: String,
+    #[serde(rename = "vsc_inline_chat_region_highlight")]
     inline_chat_region_highlight: String,
+    #[serde(rename = "vsc_editor_widget_background")]
     editor_widget_background: String,
+    #[serde(rename = "vsc_editor_suggest_widget_background")]
     editor_suggest_widget_background: String,
+    #[serde(rename = "vsc_editor_suggest_widget_foreground")]
     editor_suggest_widget_foreground: String,
+    #[serde(rename = "vsc_editor_suggest_widget_selected_background")]
     editor_suggest_widget_selected_background: String,
+    #[serde(rename = "vsc_editor_hover_widget_background")]
     editor_hover_widget_background: String,
+    #[serde(rename = "vsc_editor_hover_widget_border")]
     editor_hover_widget_border: String,
+    #[serde(rename = "vsc_editor_marker_navigation_background")]
     editor_marker_navigation_background: String,
+    #[serde(rename = "vsc_peek_view_border")]
     peek_view_border: String,
+    #[serde(rename = "vsc_peek_view_editor_background")]
     peek_view_editor_background: String,
+    #[serde(rename = "vsc_peek_view_editor_match_highlight_background")]
     peek_view_editor_match_highlight_background: String,
+    #[serde(rename = "vsc_peek_view_result_background")]
     peek_view_result_background: String,
+    #[serde(rename = "vsc_peek_view_result_file_foreground")]
     peek_view_result_file_foreground: String,
+    #[serde(rename = "vsc_peek_view_result_line_foreground")]
     peek_view_result_line_foreground: String,
+    #[serde(rename = "vsc_peek_view_result_match_highlight_background")]
     peek_view_result_match_highlight_background: String,
+    #[serde(rename = "vsc_peek_view_result_selection_background")]
     peek_view_result_selection_background: String,
+    #[serde(rename = "vsc_peek_view_result_selection_foreground")]
     peek_view_result_selection_foreground: String,
+    #[serde(rename = "vsc_peek_view_title_background")]
     peek_view_title_background: String,
+    #[serde(rename = "vsc_peek_view_title_description_foreground")]
     peek_view_title_description_foreground: String,
+    #[serde(rename = "vsc_peek_view_title_label_foreground")]
     peek_view_title_label_foreground: String,
+    #[serde(rename = "vsc_merge_current_header_background")]
     merge_current_header_background: String,
+    #[serde(rename = "vsc_merge_incoming_header_background")]
     merge_incoming_header_background: String,
+    #[serde(rename = "vsc_editor_overview_ruler_current_content_foreground")]
     editor_overview_ruler_current_content_foreground: String,
+    #[serde(rename = "vsc_editor_overview_ruler_incoming_content_foreground")]
     editor_overview_ruler_incoming_content_foreground: String,
+    #[serde(rename = "vsc_panel_background")]
     panel_background: String,
+    #[serde(rename = "vsc_panel_border")]
     panel_border: String,
+    #[serde(rename = "vsc_panel_title_active_border")]
     panel_title_active_border: String,
+    #[serde(rename = "vsc_panel_title_active_foreground")]
     panel_title_active_foreground: String,
+    #[serde(rename = "vsc_panel_title_inactive_foreground")]
     panel_title_inactive_foreground: String,
+    #[serde(rename = "vsc_status_bar_background")]
     status_bar_background: String,
+    #[serde(rename = "vsc_status_bar_foreground")]
     status_bar_foreground: String,
+    #[serde(rename = "vsc_status_bar_debugging_background")]
     status_bar_debugging_background: String,
+    #[serde(rename = "vsc_status_bar_debugging_foreground")]
     status_bar_debugging_foreground: String,
+    #[serde(rename = "vsc_status_bar_no_folder_background")]
     status_bar_no_folder_background: String,
+    #[serde(rename = "vsc_status_bar_no_folder_foreground")]
     status_bar_no_folder_foreground: String,
+    #[serde(rename = "vsc_status_bar_item_prominent_background")]
     status_bar_item_prominent_background: String,
+    #[serde(rename = "vsc_status_bar_item_prominent_hover_background")]
     status_bar_item_prominent_hover_background: String,
+    #[serde(rename = "vsc_status_bar_item_remote_foreground")]
     status_bar_item_remote_foreground: String,
+    #[serde(rename = "vsc_status_bar_item_remote_background")]
     status_bar_item_remote_background: String,
+    #[serde(rename = "vsc_title_bar_active_background")]
     title_bar_active_background: String,
+    #[serde(rename = "vsc_title_bar_active_foreground")]
     title_bar_active_foreground: String,
+    #[serde(rename = "vsc_title_bar_inactive_background")]
     title_bar_inactive_background: String,
+    #[serde(rename = "vsc_title_bar_inactive_foreground")]
     title_bar_inactive_foreground: String,
+    #[serde(rename = "vsc_extension_button_prominent_foreground")]
     extension_button_prominent_foreground: String,
+    #[serde(rename = "vsc_extension_button_prominent_background")]
     extension_button_prominent_background: String,
+    #[serde(rename = "vsc_extension_button_prominent_hover_background")]
     extension_button_prominent_hover_background: String,
+    #[serde(rename = "vsc_picker_group_border")]
     picker_group_border: String,
+    #[serde(rename = "vsc_picker_group_foreground")]
     picker_group_foreground: String,
+    #[serde(rename = "vsc_debug_tool_bar_background")]
     debug_tool_bar_background: String,
+    #[serde(rename = "vsc_walk_through_embedded_editor_background")]
     walk_through_embedded_editor_background: String,
+    #[serde(rename = "vsc_settings_header_foreground")]
     settings_header_foreground: String,
+    #[serde(rename = "vsc_settings_modified_item_indicator")]
     settings_modified_item_indicator: String,
+    #[serde(rename = "vsc_settings_dropdown_background")]
     settings_dropdown_background: String,
+    #[serde(rename = "vsc_settings_dropdown_foreground")]
     settings_dropdown_foreground: String,
+    #[serde(rename = "vsc_settings_dropdown_border")]
     settings_dropdown_border: String,
+    #[serde(rename = "vsc_settings_checkbox_background")]
     settings_checkbox_background: String,
+    #[serde(rename = "vsc_settings_checkbox_foreground")]
     settings_checkbox_foreground: String,
+    #[serde(rename = "vsc_settings_checkbox_border")]
     settings_checkbox_border: String,
+    #[serde(rename = "vsc_settings_text_input_background")]
     settings_text_input_background: String,
+    #[serde(rename = "vsc_settings_text_input_foreground")]
     settings_text_input_foreground: String,
+    #[serde(rename = "vsc_settings_text_input_border")]
     settings_text_input_border: String,
+    #[serde(rename = "vsc_settings_number_input_background")]
     settings_number_input_background: String,
+    #[serde(rename = "vsc_settings_number_input_foreground")]
     settings_number_input_foreground: String,
+    #[serde(rename = "vsc_settings_number_input_border")]
     settings_number_input_border: String,
+    #[serde(rename = "vsc_breadcrumb_foreground")]
     breadcrumb_foreground: String,
+    #[serde(rename = "vsc_breadcrumb_background")]
     breadcrumb_background: String,
+    #[serde(rename = "vsc_breadcrumb_focus_foreground")]
     breadcrumb_focus_foreground: String,
+    #[serde(rename = "vsc_breadcrumb_active_selection_foreground")]
     breadcrumb_active_selection_foreground: String,
+    #[serde(rename = "vsc_breadcrumb_picker_background")]
     breadcrumb_picker_background: String,
+    #[serde(rename = "vsc_list_filter_widget_background")]
     list_filter_widget_background: String,
+    #[serde(rename = "vsc_list_filter_widget_outline")]
     list_filter_widget_outline: String,
+    #[serde(rename = "vsc_list_filter_widget_no_matches_outline")]
     list_filter_widget_no_matches_outline: String,
 }
 
-pub fn try_vscode_colors_to_theme_colors(colors: VSCodeColors) -> ThemeColorsRefinement {
-    let mut theme_colors = ThemeColorsRefinement::default();
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use std::path::PathBuf;
 
-    theme_colors
-}
+    #[test]
+    fn test_deserialize_dracula() {
+        let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
+        let root_dir = manifest_dir.parent().unwrap().parent().unwrap();
 
-pub fn vscode_colors_to_theme_colors(color: String) -> ThemeColorsRefinement {
-    ThemeColorsRefinement {
-        text: Some(color),
-        ..Default::default()
+        let mut d = root_dir.to_path_buf();
+        d.push("assets/themes/src/vsc/dracula/dracula.json");
+
+        let data = std::fs::read_to_string(d).expect("Unable to read file");
+
+        let result: Theme = serde_json::from_str(&data).unwrap();
+        println!("{:#?}", result);
+
+        // Uncomment the following lines to print specific fields
+        println!("Name: {:?}", result.name);
+        println!("Author: {:?}", result.author);
     }
 }
+
+// use crate::ThemeColorsRefinement;
+
+// struct ImportedThemeFamily {
+//     pub id: String,
+//     pub name: String,
+//     pub author: String,
+//     pub url: String,
+//     pub license: String,
+//     pub themes: Vec<ImportedThemeVariant>,
+// }
+
+// struct ImportedThemeVariant {
+//     pub id: String,
+//     pub name: String,
+//     pub colors: ThemeColorsRefinement,
+// }
+
+// pub fn try_vscode_colors_to_theme_colors(colors: VSCodeColors) -> ThemeColorsRefinement {
+//     let mut theme_colors = ThemeColorsRefinement::default();
+
+//     theme_colors
+// }
+
+// pub fn vscode_colors_to_theme_colors(color: String) -> ThemeColorsRefinement {
+//     ThemeColorsRefinement {
+//         text: Some(color),
+//         ..Default::default()
+//     }
+// }