Reorganize `theme_importer`

Marshall Bowers created

Change summary

crates/theme_importer/src/main.rs             |   3 
crates/theme_importer/src/vscode.rs           | 663 --------------------
crates/theme_importer/src/vscode/converter.rs | 248 +++++++
crates/theme_importer/src/vscode/syntax.rs    |   0 
crates/theme_importer/src/vscode/theme.rs     | 412 +++++++++++++
5 files changed, 667 insertions(+), 659 deletions(-)

Detailed changes

crates/theme_importer/src/main.rs 🔗

@@ -1,7 +1,6 @@
 mod theme_printer;
 mod util;
 mod vscode;
-mod vscode_syntax;
 
 use std::fs::{self, File};
 use std::io::Write;
@@ -16,10 +15,10 @@ use log::LevelFilter;
 use serde::Deserialize;
 use simplelog::SimpleLogger;
 use theme::{Appearance, UserThemeFamily};
-use vscode::VsCodeThemeConverter;
 
 use crate::theme_printer::UserThemeFamilyPrinter;
 use crate::vscode::VsCodeTheme;
+use crate::vscode::VsCodeThemeConverter;
 
 #[derive(Debug, Deserialize)]
 struct FamilyMetadata {

crates/theme_importer/src/vscode.rs 🔗

@@ -1,658 +1,7 @@
-use std::collections::HashMap;
+mod converter;
+mod syntax;
+mod theme;
 
-use anyhow::Result;
-use gpui::{Hsla, Rgba};
-use serde::Deserialize;
-use theme::{
-    StatusColorsRefinement, ThemeColorsRefinement, UserSyntaxTheme, UserTheme,
-    UserThemeStylesRefinement,
-};
-
-use crate::util::Traverse;
-use crate::vscode_syntax::VsCodeTokenColor;
-use crate::ThemeMetadata;
-
-#[derive(Deserialize, Debug)]
-pub struct VsCodeTheme {
-    #[serde(rename = "$schema")]
-    pub schema: Option<String>,
-    pub name: Option<String>,
-    pub author: Option<String>,
-    pub maintainers: Option<Vec<String>>,
-    #[serde(rename = "semanticClass")]
-    pub semantic_class: Option<String>,
-    #[serde(rename = "semanticHighlighting")]
-    pub semantic_highlighting: Option<bool>,
-    pub colors: VsCodeColors,
-    #[serde(rename = "tokenColors")]
-    pub token_colors: Vec<VsCodeTokenColor>,
-}
-
-#[derive(Debug, Deserialize)]
-pub struct VsCodeColors {
-    #[serde(rename = "terminal.background")]
-    pub terminal_background: Option<String>,
-    #[serde(rename = "terminal.foreground")]
-    pub terminal_foreground: Option<String>,
-    #[serde(rename = "terminal.ansiBrightBlack")]
-    pub terminal_ansi_bright_black: Option<String>,
-    #[serde(rename = "terminal.ansiBrightRed")]
-    pub terminal_ansi_bright_red: Option<String>,
-    #[serde(rename = "terminal.ansiBrightGreen")]
-    pub terminal_ansi_bright_green: Option<String>,
-    #[serde(rename = "terminal.ansiBrightYellow")]
-    pub terminal_ansi_bright_yellow: Option<String>,
-    #[serde(rename = "terminal.ansiBrightBlue")]
-    pub terminal_ansi_bright_blue: Option<String>,
-    #[serde(rename = "terminal.ansiBrightMagenta")]
-    pub terminal_ansi_bright_magenta: Option<String>,
-    #[serde(rename = "terminal.ansiBrightCyan")]
-    pub terminal_ansi_bright_cyan: Option<String>,
-    #[serde(rename = "terminal.ansiBrightWhite")]
-    pub terminal_ansi_bright_white: Option<String>,
-    #[serde(rename = "terminal.ansiBlack")]
-    pub terminal_ansi_black: Option<String>,
-    #[serde(rename = "terminal.ansiRed")]
-    pub terminal_ansi_red: Option<String>,
-    #[serde(rename = "terminal.ansiGreen")]
-    pub terminal_ansi_green: Option<String>,
-    #[serde(rename = "terminal.ansiYellow")]
-    pub terminal_ansi_yellow: Option<String>,
-    #[serde(rename = "terminal.ansiBlue")]
-    pub terminal_ansi_blue: Option<String>,
-    #[serde(rename = "terminal.ansiMagenta")]
-    pub terminal_ansi_magenta: Option<String>,
-    #[serde(rename = "terminal.ansiCyan")]
-    pub terminal_ansi_cyan: Option<String>,
-    #[serde(rename = "terminal.ansiWhite")]
-    pub terminal_ansi_white: Option<String>,
-    #[serde(rename = "focusBorder")]
-    pub focus_border: Option<String>,
-    pub foreground: Option<String>,
-    #[serde(rename = "selection.background")]
-    pub selection_background: Option<String>,
-    #[serde(rename = "errorForeground")]
-    pub error_foreground: Option<String>,
-    #[serde(rename = "button.background")]
-    pub button_background: Option<String>,
-    #[serde(rename = "button.foreground")]
-    pub button_foreground: Option<String>,
-    #[serde(rename = "button.secondaryBackground")]
-    pub button_secondary_background: Option<String>,
-    #[serde(rename = "button.secondaryForeground")]
-    pub button_secondary_foreground: Option<String>,
-    #[serde(rename = "button.secondaryHoverBackground")]
-    pub button_secondary_hover_background: Option<String>,
-    #[serde(rename = "dropdown.background")]
-    pub dropdown_background: Option<String>,
-    #[serde(rename = "dropdown.border")]
-    pub dropdown_border: Option<String>,
-    #[serde(rename = "dropdown.foreground")]
-    pub dropdown_foreground: Option<String>,
-    #[serde(rename = "input.background")]
-    pub input_background: Option<String>,
-    #[serde(rename = "input.foreground")]
-    pub input_foreground: Option<String>,
-    #[serde(rename = "input.border")]
-    pub input_border: Option<String>,
-    #[serde(rename = "input.placeholderForeground")]
-    pub input_placeholder_foreground: Option<String>,
-    #[serde(rename = "inputOption.activeBorder")]
-    pub input_option_active_border: Option<String>,
-    #[serde(rename = "inputValidation.infoBorder")]
-    pub input_validation_info_border: Option<String>,
-    #[serde(rename = "inputValidation.warningBorder")]
-    pub input_validation_warning_border: Option<String>,
-    #[serde(rename = "inputValidation.errorBorder")]
-    pub input_validation_error_border: Option<String>,
-    #[serde(rename = "badge.foreground")]
-    pub badge_foreground: Option<String>,
-    #[serde(rename = "badge.background")]
-    pub badge_background: Option<String>,
-    #[serde(rename = "progressBar.background")]
-    pub progress_bar_background: Option<String>,
-    #[serde(rename = "list.activeSelectionBackground")]
-    pub list_active_selection_background: Option<String>,
-    #[serde(rename = "list.activeSelectionForeground")]
-    pub list_active_selection_foreground: Option<String>,
-    #[serde(rename = "list.dropBackground")]
-    pub list_drop_background: Option<String>,
-    #[serde(rename = "list.focusBackground")]
-    pub list_focus_background: Option<String>,
-    #[serde(rename = "list.highlightForeground")]
-    pub list_highlight_foreground: Option<String>,
-    #[serde(rename = "list.hoverBackground")]
-    pub list_hover_background: Option<String>,
-    #[serde(rename = "list.inactiveSelectionBackground")]
-    pub list_inactive_selection_background: Option<String>,
-    #[serde(rename = "list.warningForeground")]
-    pub list_warning_foreground: Option<String>,
-    #[serde(rename = "list.errorForeground")]
-    pub list_error_foreground: Option<String>,
-    #[serde(rename = "activityBar.background")]
-    pub activity_bar_background: Option<String>,
-    #[serde(rename = "activityBar.inactiveForeground")]
-    pub activity_bar_inactive_foreground: Option<String>,
-    #[serde(rename = "activityBar.foreground")]
-    pub activity_bar_foreground: Option<String>,
-    #[serde(rename = "activityBar.activeBorder")]
-    pub activity_bar_active_border: Option<String>,
-    #[serde(rename = "activityBar.activeBackground")]
-    pub activity_bar_active_background: Option<String>,
-    #[serde(rename = "activityBarBadge.background")]
-    pub activity_bar_badge_background: Option<String>,
-    #[serde(rename = "activityBarBadge.foreground")]
-    pub activity_bar_badge_foreground: Option<String>,
-    #[serde(rename = "sideBar.background")]
-    pub side_bar_background: Option<String>,
-    #[serde(rename = "sideBarTitle.foreground")]
-    pub side_bar_title_foreground: Option<String>,
-    #[serde(rename = "sideBarSectionHeader.background")]
-    pub side_bar_section_header_background: Option<String>,
-    #[serde(rename = "sideBarSectionHeader.border")]
-    pub side_bar_section_header_border: Option<String>,
-    #[serde(rename = "editorGroup.border")]
-    pub editor_group_border: Option<String>,
-    #[serde(rename = "editorGroup.dropBackground")]
-    pub editor_group_drop_background: Option<String>,
-    #[serde(rename = "editorGroupHeader.tabsBackground")]
-    pub editor_group_header_tabs_background: Option<String>,
-    #[serde(rename = "tab.activeBackground")]
-    pub tab_active_background: Option<String>,
-    #[serde(rename = "tab.activeForeground")]
-    pub tab_active_foreground: Option<String>,
-    #[serde(rename = "tab.border")]
-    pub tab_border: Option<String>,
-    #[serde(rename = "tab.activeBorderTop")]
-    pub tab_active_border_top: Option<String>,
-    #[serde(rename = "tab.inactiveBackground")]
-    pub tab_inactive_background: Option<String>,
-    #[serde(rename = "tab.inactiveForeground")]
-    pub tab_inactive_foreground: Option<String>,
-    #[serde(rename = "editor.foreground")]
-    pub editor_foreground: Option<String>,
-    #[serde(rename = "editor.background")]
-    pub editor_background: Option<String>,
-    #[serde(rename = "editorLineNumber.foreground")]
-    pub editor_line_number_foreground: Option<String>,
-    #[serde(rename = "editor.selectionBackground")]
-    pub editor_selection_background: Option<String>,
-    #[serde(rename = "editor.selectionHighlightBackground")]
-    pub editor_selection_highlight_background: Option<String>,
-    #[serde(rename = "editor.foldBackground")]
-    pub editor_fold_background: Option<String>,
-    #[serde(rename = "editor.wordHighlightBackground")]
-    pub editor_word_highlight_background: Option<String>,
-    #[serde(rename = "editor.wordHighlightStrongBackground")]
-    pub editor_word_highlight_strong_background: Option<String>,
-    #[serde(rename = "editor.findMatchBackground")]
-    pub editor_find_match_background: Option<String>,
-    #[serde(rename = "editor.findMatchHighlightBackground")]
-    pub editor_find_match_highlight_background: Option<String>,
-    #[serde(rename = "editor.findRangeHighlightBackground")]
-    pub editor_find_range_highlight_background: Option<String>,
-    #[serde(rename = "editor.hoverHighlightBackground")]
-    pub editor_hover_highlight_background: Option<String>,
-    #[serde(rename = "editor.lineHighlightBorder")]
-    pub editor_line_highlight_border: Option<String>,
-    #[serde(rename = "editorLink.activeForeground")]
-    pub editor_link_active_foreground: Option<String>,
-    #[serde(rename = "editor.rangeHighlightBackground")]
-    pub editor_range_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetTabstopHighlightBackground")]
-    pub editor_snippet_tabstop_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetTabstopHighlightBorder")]
-    pub editor_snippet_tabstop_highlight_border: Option<String>,
-    #[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
-    pub editor_snippet_final_tabstop_highlight_background: Option<String>,
-    #[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
-    pub editor_snippet_final_tabstop_highlight_border: Option<String>,
-    #[serde(rename = "editorWhitespace.foreground")]
-    pub editor_whitespace_foreground: Option<String>,
-    #[serde(rename = "editorIndentGuide.background")]
-    pub editor_indent_guide_background: Option<String>,
-    #[serde(rename = "editorIndentGuide.activeBackground")]
-    pub editor_indent_guide_active_background: Option<String>,
-    #[serde(rename = "editorRuler.foreground")]
-    pub editor_ruler_foreground: Option<String>,
-    #[serde(rename = "editorCodeLens.foreground")]
-    pub editor_code_lens_foreground: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground1")]
-    pub editor_bracket_highlight_foreground1: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground2")]
-    pub editor_bracket_highlight_foreground2: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground3")]
-    pub editor_bracket_highlight_foreground3: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground4")]
-    pub editor_bracket_highlight_foreground4: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground5")]
-    pub editor_bracket_highlight_foreground5: Option<String>,
-    #[serde(rename = "editorBracketHighlight.foreground6")]
-    pub editor_bracket_highlight_foreground6: Option<String>,
-    #[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
-    pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.border")]
-    pub editor_overview_ruler_border: Option<String>,
-    #[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
-    pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
-    pub editor_overview_ruler_word_highlight_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
-    pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.modifiedForeground")]
-    pub editor_overview_ruler_modified_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.addedForeground")]
-    pub editor_overview_ruler_added_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.deletedForeground")]
-    pub editor_overview_ruler_deleted_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.errorForeground")]
-    pub editor_overview_ruler_error_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.warningForeground")]
-    pub editor_overview_ruler_warning_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.infoForeground")]
-    pub editor_overview_ruler_info_foreground: Option<String>,
-    #[serde(rename = "editorError.foreground")]
-    pub editor_error_foreground: Option<String>,
-    #[serde(rename = "editorWarning.foreground")]
-    pub editor_warning_foreground: Option<String>,
-    #[serde(rename = "editorGutter.modifiedBackground")]
-    pub editor_gutter_modified_background: Option<String>,
-    #[serde(rename = "editorGutter.addedBackground")]
-    pub editor_gutter_added_background: Option<String>,
-    #[serde(rename = "editorGutter.deletedBackground")]
-    pub editor_gutter_deleted_background: Option<String>,
-    #[serde(rename = "gitDecoration.modifiedResourceForeground")]
-    pub git_decoration_modified_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.deletedResourceForeground")]
-    pub git_decoration_deleted_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.untrackedResourceForeground")]
-    pub git_decoration_untracked_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.ignoredResourceForeground")]
-    pub git_decoration_ignored_resource_foreground: Option<String>,
-    #[serde(rename = "gitDecoration.conflictingResourceForeground")]
-    pub git_decoration_conflicting_resource_foreground: Option<String>,
-    #[serde(rename = "diffEditor.insertedTextBackground")]
-    pub diff_editor_inserted_text_background: Option<String>,
-    #[serde(rename = "diffEditor.removedTextBackground")]
-    pub diff_editor_removed_text_background: Option<String>,
-    #[serde(rename = "inlineChat.regionHighlight")]
-    pub inline_chat_region_highlight: Option<String>,
-    #[serde(rename = "editorWidget.background")]
-    pub editor_widget_background: Option<String>,
-    #[serde(rename = "editorSuggestWidget.background")]
-    pub editor_suggest_widget_background: Option<String>,
-    #[serde(rename = "editorSuggestWidget.foreground")]
-    pub editor_suggest_widget_foreground: Option<String>,
-    #[serde(rename = "editorSuggestWidget.selectedBackground")]
-    pub editor_suggest_widget_selected_background: Option<String>,
-    #[serde(rename = "editorHoverWidget.background")]
-    pub editor_hover_widget_background: Option<String>,
-    #[serde(rename = "editorHoverWidget.border")]
-    pub editor_hover_widget_border: Option<String>,
-    #[serde(rename = "editorMarkerNavigation.background")]
-    pub editor_marker_navigation_background: Option<String>,
-    #[serde(rename = "peekView.border")]
-    pub peek_view_border: Option<String>,
-    #[serde(rename = "peekViewEditor.background")]
-    pub peek_view_editor_background: Option<String>,
-    #[serde(rename = "peekViewEditor.matchHighlightBackground")]
-    pub peek_view_editor_match_highlight_background: Option<String>,
-    #[serde(rename = "peekViewResult.background")]
-    pub peek_view_result_background: Option<String>,
-    #[serde(rename = "peekViewResult.fileForeground")]
-    pub peek_view_result_file_foreground: Option<String>,
-    #[serde(rename = "peekViewResult.lineForeground")]
-    pub peek_view_result_line_foreground: Option<String>,
-    #[serde(rename = "peekViewResult.matchHighlightBackground")]
-    pub peek_view_result_match_highlight_background: Option<String>,
-    #[serde(rename = "peekViewResult.selectionBackground")]
-    pub peek_view_result_selection_background: Option<String>,
-    #[serde(rename = "peekViewResult.selectionForeground")]
-    pub peek_view_result_selection_foreground: Option<String>,
-    #[serde(rename = "peekViewTitle.background")]
-    pub peek_view_title_background: Option<String>,
-    #[serde(rename = "peekViewTitleDescription.foreground")]
-    pub peek_view_title_description_foreground: Option<String>,
-    #[serde(rename = "peekViewTitleLabel.foreground")]
-    pub peek_view_title_label_foreground: Option<String>,
-    #[serde(rename = "merge.currentHeaderBackground")]
-    pub merge_current_header_background: Option<String>,
-    #[serde(rename = "merge.incomingHeaderBackground")]
-    pub merge_incoming_header_background: Option<String>,
-    #[serde(rename = "editorOverviewRuler.currentContentForeground")]
-    pub editor_overview_ruler_current_content_foreground: Option<String>,
-    #[serde(rename = "editorOverviewRuler.incomingContentForeground")]
-    pub editor_overview_ruler_incoming_content_foreground: Option<String>,
-    #[serde(rename = "panel.background")]
-    pub panel_background: Option<String>,
-    #[serde(rename = "panel.border")]
-    pub panel_border: Option<String>,
-    #[serde(rename = "panelTitle.activeBorder")]
-    pub panel_title_active_border: Option<String>,
-    #[serde(rename = "panelTitle.activeForeground")]
-    pub panel_title_active_foreground: Option<String>,
-    #[serde(rename = "panelTitle.inactiveForeground")]
-    pub panel_title_inactive_foreground: Option<String>,
-    #[serde(rename = "statusBar.background")]
-    pub status_bar_background: Option<String>,
-    #[serde(rename = "statusBar.foreground")]
-    pub status_bar_foreground: Option<String>,
-    #[serde(rename = "statusBar.debuggingBackground")]
-    pub status_bar_debugging_background: Option<String>,
-    #[serde(rename = "statusBar.debuggingForeground")]
-    pub status_bar_debugging_foreground: Option<String>,
-    #[serde(rename = "statusBar.noFolderBackground")]
-    pub status_bar_no_folder_background: Option<String>,
-    #[serde(rename = "statusBar.noFolderForeground")]
-    pub status_bar_no_folder_foreground: Option<String>,
-    #[serde(rename = "statusBarItem.prominentBackground")]
-    pub status_bar_item_prominent_background: Option<String>,
-    #[serde(rename = "statusBarItem.prominentHoverBackground")]
-    pub status_bar_item_prominent_hover_background: Option<String>,
-    #[serde(rename = "statusBarItem.remoteForeground")]
-    pub status_bar_item_remote_foreground: Option<String>,
-    #[serde(rename = "statusBarItem.remoteBackground")]
-    pub status_bar_item_remote_background: Option<String>,
-    #[serde(rename = "titleBar.activeBackground")]
-    pub title_bar_active_background: Option<String>,
-    #[serde(rename = "titleBar.activeForeground")]
-    pub title_bar_active_foreground: Option<String>,
-    #[serde(rename = "titleBar.inactiveBackground")]
-    pub title_bar_inactive_background: Option<String>,
-    #[serde(rename = "titleBar.inactiveForeground")]
-    pub title_bar_inactive_foreground: Option<String>,
-    #[serde(rename = "extensionButton.prominentForeground")]
-    pub extension_button_prominent_foreground: Option<String>,
-    #[serde(rename = "extensionButton.prominentBackground")]
-    pub extension_button_prominent_background: Option<String>,
-    #[serde(rename = "extensionButton.prominentHoverBackground")]
-    pub extension_button_prominent_hover_background: Option<String>,
-    #[serde(rename = "pickerGroup.border")]
-    pub picker_group_border: Option<String>,
-    #[serde(rename = "pickerGroup.foreground")]
-    pub picker_group_foreground: Option<String>,
-    #[serde(rename = "debugToolBar.background")]
-    pub debug_tool_bar_background: Option<String>,
-    #[serde(rename = "walkThrough.embeddedEditorBackground")]
-    pub walk_through_embedded_editor_background: Option<String>,
-    #[serde(rename = "settings.headerForeground")]
-    pub settings_header_foreground: Option<String>,
-    #[serde(rename = "settings.modifiedItemIndicator")]
-    pub settings_modified_item_indicator: Option<String>,
-    #[serde(rename = "settings.dropdownBackground")]
-    pub settings_dropdown_background: Option<String>,
-    #[serde(rename = "settings.dropdownForeground")]
-    pub settings_dropdown_foreground: Option<String>,
-    #[serde(rename = "settings.dropdownBorder")]
-    pub settings_dropdown_border: Option<String>,
-    #[serde(rename = "settings.checkboxBackground")]
-    pub settings_checkbox_background: Option<String>,
-    #[serde(rename = "settings.checkboxForeground")]
-    pub settings_checkbox_foreground: Option<String>,
-    #[serde(rename = "settings.checkboxBorder")]
-    pub settings_checkbox_border: Option<String>,
-    #[serde(rename = "settings.textInputBackground")]
-    pub settings_text_input_background: Option<String>,
-    #[serde(rename = "settings.textInputForeground")]
-    pub settings_text_input_foreground: Option<String>,
-    #[serde(rename = "settings.textInputBorder")]
-    pub settings_text_input_border: Option<String>,
-    #[serde(rename = "settings.numberInputBackground")]
-    pub settings_number_input_background: Option<String>,
-    #[serde(rename = "settings.numberInputForeground")]
-    pub settings_number_input_foreground: Option<String>,
-    #[serde(rename = "settings.numberInputBorder")]
-    pub settings_number_input_border: Option<String>,
-    #[serde(rename = "breadcrumb.foreground")]
-    pub breadcrumb_foreground: Option<String>,
-    #[serde(rename = "breadcrumb.background")]
-    pub breadcrumb_background: Option<String>,
-    #[serde(rename = "breadcrumb.focusForeground")]
-    pub breadcrumb_focus_foreground: Option<String>,
-    #[serde(rename = "breadcrumb.activeSelectionForeground")]
-    pub breadcrumb_active_selection_foreground: Option<String>,
-    #[serde(rename = "breadcrumbPicker.background")]
-    pub breadcrumb_picker_background: Option<String>,
-    #[serde(rename = "listFilterWidget.background")]
-    pub list_filter_widget_background: Option<String>,
-    #[serde(rename = "listFilterWidget.outline")]
-    pub list_filter_widget_outline: Option<String>,
-    #[serde(rename = "listFilterWidget.noMatchesOutline")]
-    pub list_filter_widget_no_matches_outline: Option<String>,
-}
-
-pub(crate) fn try_parse_color(color: &str) -> Result<Hsla> {
-    Ok(Rgba::try_from(color)?.into())
-}
-
-pub struct VsCodeThemeConverter {
-    theme: VsCodeTheme,
-    theme_metadata: ThemeMetadata,
-}
-
-impl VsCodeThemeConverter {
-    pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
-        Self {
-            theme,
-            theme_metadata,
-        }
-    }
-
-    pub fn convert(self) -> Result<UserTheme> {
-        let appearance = self.theme_metadata.appearance.into();
-
-        let status_color_refinements = self.convert_status_colors()?;
-        let theme_colors_refinements = self.convert_theme_colors()?;
-
-        let mut highlight_styles = HashMap::new();
-
-        for token_color in self.theme.token_colors {
-            highlight_styles.extend(token_color.highlight_styles()?);
-        }
-
-        let syntax_theme = UserSyntaxTheme {
-            highlights: highlight_styles.into_iter().collect(),
-        };
-
-        Ok(UserTheme {
-            name: self.theme_metadata.name.into(),
-            appearance,
-            styles: UserThemeStylesRefinement {
-                colors: theme_colors_refinements,
-                status: status_color_refinements,
-                syntax: Some(syntax_theme),
-            },
-        })
-    }
-
-    fn convert_status_colors(&self) -> Result<StatusColorsRefinement> {
-        let vscode_colors = &self.theme.colors;
-
-        Ok(StatusColorsRefinement {
-            // conflict: None,
-            // created: None,
-            deleted: vscode_colors
-                .error_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            error: vscode_colors
-                .error_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            hidden: vscode_colors
-                .tab_inactive_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            // ignored: None,
-            // info: None,
-            // modified: None,
-            // renamed: None,
-            // success: None,
-            warning: vscode_colors
-                .list_warning_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            ..Default::default()
-        })
-    }
-
-    fn convert_theme_colors(&self) -> Result<ThemeColorsRefinement> {
-        let vscode_colors = &self.theme.colors;
-
-        Ok(ThemeColorsRefinement {
-            border: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_variant: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_focused: vscode_colors
-                .focus_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_disabled: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_selected: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            border_transparent: vscode_colors
-                .panel_border
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            elevated_surface_background: vscode_colors
-                .panel_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            surface_background: vscode_colors
-                .panel_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            background: vscode_colors
-                .editor_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            element_background: vscode_colors
-                .button_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            element_hover: vscode_colors
-                .list_hover_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            element_selected: vscode_colors
-                .list_active_selection_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            ghost_element_hover: vscode_colors
-                .list_hover_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            drop_target_background: vscode_colors
-                .list_drop_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            text: vscode_colors
-                .foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            tab_active_background: vscode_colors
-                .tab_active_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            tab_inactive_background: vscode_colors
-                .tab_inactive_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            editor_background: vscode_colors
-                .editor_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            editor_gutter_background: vscode_colors
-                .editor_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            editor_line_number: vscode_colors
-                .editor_line_number_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            editor_active_line_number: vscode_colors
-                .editor_foreground
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_background: vscode_colors
-                .terminal_background
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_black: vscode_colors
-                .terminal_ansi_bright_black
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_red: vscode_colors
-                .terminal_ansi_bright_red
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_green: vscode_colors
-                .terminal_ansi_bright_green
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_yellow: vscode_colors
-                .terminal_ansi_bright_yellow
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_blue: vscode_colors
-                .terminal_ansi_bright_blue
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_magenta: vscode_colors
-                .terminal_ansi_bright_magenta
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_cyan: vscode_colors
-                .terminal_ansi_bright_cyan
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_bright_white: vscode_colors
-                .terminal_ansi_bright_white
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_black: vscode_colors
-                .terminal_ansi_black
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_red: vscode_colors
-                .terminal_ansi_red
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_green: vscode_colors
-                .terminal_ansi_green
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_yellow: vscode_colors
-                .terminal_ansi_yellow
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_blue: vscode_colors
-                .terminal_ansi_blue
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_magenta: vscode_colors
-                .terminal_ansi_magenta
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_cyan: vscode_colors
-                .terminal_ansi_cyan
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            terminal_ansi_white: vscode_colors
-                .terminal_ansi_white
-                .as_ref()
-                .traverse(|color| try_parse_color(&color))?,
-            ..Default::default()
-        })
-    }
-}
+pub use converter::*;
+pub use syntax::*;
+pub use theme::*;

crates/theme_importer/src/vscode/converter.rs 🔗

@@ -0,0 +1,248 @@
+use std::collections::HashMap;
+
+use anyhow::Result;
+use gpui::{Hsla, Rgba};
+use theme::{
+    StatusColorsRefinement, ThemeColorsRefinement, UserSyntaxTheme, UserTheme,
+    UserThemeStylesRefinement,
+};
+
+use crate::util::Traverse;
+use crate::vscode::VsCodeTheme;
+use crate::ThemeMetadata;
+
+pub(crate) fn try_parse_color(color: &str) -> Result<Hsla> {
+    Ok(Rgba::try_from(color)?.into())
+}
+
+pub struct VsCodeThemeConverter {
+    theme: VsCodeTheme,
+    theme_metadata: ThemeMetadata,
+}
+
+impl VsCodeThemeConverter {
+    pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
+        Self {
+            theme,
+            theme_metadata,
+        }
+    }
+
+    pub fn convert(self) -> Result<UserTheme> {
+        let appearance = self.theme_metadata.appearance.into();
+
+        let status_color_refinements = self.convert_status_colors()?;
+        let theme_colors_refinements = self.convert_theme_colors()?;
+
+        let mut highlight_styles = HashMap::new();
+
+        for token_color in self.theme.token_colors {
+            highlight_styles.extend(token_color.highlight_styles()?);
+        }
+
+        let syntax_theme = UserSyntaxTheme {
+            highlights: highlight_styles.into_iter().collect(),
+        };
+
+        Ok(UserTheme {
+            name: self.theme_metadata.name.into(),
+            appearance,
+            styles: UserThemeStylesRefinement {
+                colors: theme_colors_refinements,
+                status: status_color_refinements,
+                syntax: Some(syntax_theme),
+            },
+        })
+    }
+
+    fn convert_status_colors(&self) -> Result<StatusColorsRefinement> {
+        let vscode_colors = &self.theme.colors;
+
+        Ok(StatusColorsRefinement {
+            // conflict: None,
+            // created: None,
+            deleted: vscode_colors
+                .error_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            error: vscode_colors
+                .error_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            hidden: vscode_colors
+                .tab_inactive_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            // ignored: None,
+            // info: None,
+            // modified: None,
+            // renamed: None,
+            // success: None,
+            warning: vscode_colors
+                .list_warning_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ..Default::default()
+        })
+    }
+
+    fn convert_theme_colors(&self) -> Result<ThemeColorsRefinement> {
+        let vscode_colors = &self.theme.colors;
+
+        Ok(ThemeColorsRefinement {
+            border: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_variant: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_focused: vscode_colors
+                .focus_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_disabled: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_selected: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            border_transparent: vscode_colors
+                .panel_border
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            elevated_surface_background: vscode_colors
+                .panel_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            surface_background: vscode_colors
+                .panel_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_background: vscode_colors
+                .button_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_hover: vscode_colors
+                .list_hover_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            element_selected: vscode_colors
+                .list_active_selection_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ghost_element_hover: vscode_colors
+                .list_hover_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            drop_target_background: vscode_colors
+                .list_drop_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            text: vscode_colors
+                .foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            tab_active_background: vscode_colors
+                .tab_active_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            tab_inactive_background: vscode_colors
+                .tab_inactive_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_gutter_background: vscode_colors
+                .editor_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_line_number: vscode_colors
+                .editor_line_number_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            editor_active_line_number: vscode_colors
+                .editor_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_background: vscode_colors
+                .terminal_background
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_black: vscode_colors
+                .terminal_ansi_bright_black
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_red: vscode_colors
+                .terminal_ansi_bright_red
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_green: vscode_colors
+                .terminal_ansi_bright_green
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_yellow: vscode_colors
+                .terminal_ansi_bright_yellow
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_blue: vscode_colors
+                .terminal_ansi_bright_blue
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_magenta: vscode_colors
+                .terminal_ansi_bright_magenta
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_cyan: vscode_colors
+                .terminal_ansi_bright_cyan
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_bright_white: vscode_colors
+                .terminal_ansi_bright_white
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_black: vscode_colors
+                .terminal_ansi_black
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_red: vscode_colors
+                .terminal_ansi_red
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_green: vscode_colors
+                .terminal_ansi_green
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_yellow: vscode_colors
+                .terminal_ansi_yellow
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_blue: vscode_colors
+                .terminal_ansi_blue
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_magenta: vscode_colors
+                .terminal_ansi_magenta
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_cyan: vscode_colors
+                .terminal_ansi_cyan
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            terminal_ansi_white: vscode_colors
+                .terminal_ansi_white
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
+            ..Default::default()
+        })
+    }
+}

crates/theme_importer/src/vscode/theme.rs 🔗

@@ -0,0 +1,412 @@
+use serde::Deserialize;
+
+use crate::vscode::VsCodeTokenColor;
+
+#[derive(Deserialize, Debug)]
+pub struct VsCodeTheme {
+    #[serde(rename = "$schema")]
+    pub schema: Option<String>,
+    pub name: Option<String>,
+    pub author: Option<String>,
+    pub maintainers: Option<Vec<String>>,
+    #[serde(rename = "semanticClass")]
+    pub semantic_class: Option<String>,
+    #[serde(rename = "semanticHighlighting")]
+    pub semantic_highlighting: Option<bool>,
+    pub colors: VsCodeColors,
+    #[serde(rename = "tokenColors")]
+    pub token_colors: Vec<VsCodeTokenColor>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct VsCodeColors {
+    #[serde(rename = "terminal.background")]
+    pub terminal_background: Option<String>,
+    #[serde(rename = "terminal.foreground")]
+    pub terminal_foreground: Option<String>,
+    #[serde(rename = "terminal.ansiBrightBlack")]
+    pub terminal_ansi_bright_black: Option<String>,
+    #[serde(rename = "terminal.ansiBrightRed")]
+    pub terminal_ansi_bright_red: Option<String>,
+    #[serde(rename = "terminal.ansiBrightGreen")]
+    pub terminal_ansi_bright_green: Option<String>,
+    #[serde(rename = "terminal.ansiBrightYellow")]
+    pub terminal_ansi_bright_yellow: Option<String>,
+    #[serde(rename = "terminal.ansiBrightBlue")]
+    pub terminal_ansi_bright_blue: Option<String>,
+    #[serde(rename = "terminal.ansiBrightMagenta")]
+    pub terminal_ansi_bright_magenta: Option<String>,
+    #[serde(rename = "terminal.ansiBrightCyan")]
+    pub terminal_ansi_bright_cyan: Option<String>,
+    #[serde(rename = "terminal.ansiBrightWhite")]
+    pub terminal_ansi_bright_white: Option<String>,
+    #[serde(rename = "terminal.ansiBlack")]
+    pub terminal_ansi_black: Option<String>,
+    #[serde(rename = "terminal.ansiRed")]
+    pub terminal_ansi_red: Option<String>,
+    #[serde(rename = "terminal.ansiGreen")]
+    pub terminal_ansi_green: Option<String>,
+    #[serde(rename = "terminal.ansiYellow")]
+    pub terminal_ansi_yellow: Option<String>,
+    #[serde(rename = "terminal.ansiBlue")]
+    pub terminal_ansi_blue: Option<String>,
+    #[serde(rename = "terminal.ansiMagenta")]
+    pub terminal_ansi_magenta: Option<String>,
+    #[serde(rename = "terminal.ansiCyan")]
+    pub terminal_ansi_cyan: Option<String>,
+    #[serde(rename = "terminal.ansiWhite")]
+    pub terminal_ansi_white: Option<String>,
+    #[serde(rename = "focusBorder")]
+    pub focus_border: Option<String>,
+    pub foreground: Option<String>,
+    #[serde(rename = "selection.background")]
+    pub selection_background: Option<String>,
+    #[serde(rename = "errorForeground")]
+    pub error_foreground: Option<String>,
+    #[serde(rename = "button.background")]
+    pub button_background: Option<String>,
+    #[serde(rename = "button.foreground")]
+    pub button_foreground: Option<String>,
+    #[serde(rename = "button.secondaryBackground")]
+    pub button_secondary_background: Option<String>,
+    #[serde(rename = "button.secondaryForeground")]
+    pub button_secondary_foreground: Option<String>,
+    #[serde(rename = "button.secondaryHoverBackground")]
+    pub button_secondary_hover_background: Option<String>,
+    #[serde(rename = "dropdown.background")]
+    pub dropdown_background: Option<String>,
+    #[serde(rename = "dropdown.border")]
+    pub dropdown_border: Option<String>,
+    #[serde(rename = "dropdown.foreground")]
+    pub dropdown_foreground: Option<String>,
+    #[serde(rename = "input.background")]
+    pub input_background: Option<String>,
+    #[serde(rename = "input.foreground")]
+    pub input_foreground: Option<String>,
+    #[serde(rename = "input.border")]
+    pub input_border: Option<String>,
+    #[serde(rename = "input.placeholderForeground")]
+    pub input_placeholder_foreground: Option<String>,
+    #[serde(rename = "inputOption.activeBorder")]
+    pub input_option_active_border: Option<String>,
+    #[serde(rename = "inputValidation.infoBorder")]
+    pub input_validation_info_border: Option<String>,
+    #[serde(rename = "inputValidation.warningBorder")]
+    pub input_validation_warning_border: Option<String>,
+    #[serde(rename = "inputValidation.errorBorder")]
+    pub input_validation_error_border: Option<String>,
+    #[serde(rename = "badge.foreground")]
+    pub badge_foreground: Option<String>,
+    #[serde(rename = "badge.background")]
+    pub badge_background: Option<String>,
+    #[serde(rename = "progressBar.background")]
+    pub progress_bar_background: Option<String>,
+    #[serde(rename = "list.activeSelectionBackground")]
+    pub list_active_selection_background: Option<String>,
+    #[serde(rename = "list.activeSelectionForeground")]
+    pub list_active_selection_foreground: Option<String>,
+    #[serde(rename = "list.dropBackground")]
+    pub list_drop_background: Option<String>,
+    #[serde(rename = "list.focusBackground")]
+    pub list_focus_background: Option<String>,
+    #[serde(rename = "list.highlightForeground")]
+    pub list_highlight_foreground: Option<String>,
+    #[serde(rename = "list.hoverBackground")]
+    pub list_hover_background: Option<String>,
+    #[serde(rename = "list.inactiveSelectionBackground")]
+    pub list_inactive_selection_background: Option<String>,
+    #[serde(rename = "list.warningForeground")]
+    pub list_warning_foreground: Option<String>,
+    #[serde(rename = "list.errorForeground")]
+    pub list_error_foreground: Option<String>,
+    #[serde(rename = "activityBar.background")]
+    pub activity_bar_background: Option<String>,
+    #[serde(rename = "activityBar.inactiveForeground")]
+    pub activity_bar_inactive_foreground: Option<String>,
+    #[serde(rename = "activityBar.foreground")]
+    pub activity_bar_foreground: Option<String>,
+    #[serde(rename = "activityBar.activeBorder")]
+    pub activity_bar_active_border: Option<String>,
+    #[serde(rename = "activityBar.activeBackground")]
+    pub activity_bar_active_background: Option<String>,
+    #[serde(rename = "activityBarBadge.background")]
+    pub activity_bar_badge_background: Option<String>,
+    #[serde(rename = "activityBarBadge.foreground")]
+    pub activity_bar_badge_foreground: Option<String>,
+    #[serde(rename = "sideBar.background")]
+    pub side_bar_background: Option<String>,
+    #[serde(rename = "sideBarTitle.foreground")]
+    pub side_bar_title_foreground: Option<String>,
+    #[serde(rename = "sideBarSectionHeader.background")]
+    pub side_bar_section_header_background: Option<String>,
+    #[serde(rename = "sideBarSectionHeader.border")]
+    pub side_bar_section_header_border: Option<String>,
+    #[serde(rename = "editorGroup.border")]
+    pub editor_group_border: Option<String>,
+    #[serde(rename = "editorGroup.dropBackground")]
+    pub editor_group_drop_background: Option<String>,
+    #[serde(rename = "editorGroupHeader.tabsBackground")]
+    pub editor_group_header_tabs_background: Option<String>,
+    #[serde(rename = "tab.activeBackground")]
+    pub tab_active_background: Option<String>,
+    #[serde(rename = "tab.activeForeground")]
+    pub tab_active_foreground: Option<String>,
+    #[serde(rename = "tab.border")]
+    pub tab_border: Option<String>,
+    #[serde(rename = "tab.activeBorderTop")]
+    pub tab_active_border_top: Option<String>,
+    #[serde(rename = "tab.inactiveBackground")]
+    pub tab_inactive_background: Option<String>,
+    #[serde(rename = "tab.inactiveForeground")]
+    pub tab_inactive_foreground: Option<String>,
+    #[serde(rename = "editor.foreground")]
+    pub editor_foreground: Option<String>,
+    #[serde(rename = "editor.background")]
+    pub editor_background: Option<String>,
+    #[serde(rename = "editorLineNumber.foreground")]
+    pub editor_line_number_foreground: Option<String>,
+    #[serde(rename = "editor.selectionBackground")]
+    pub editor_selection_background: Option<String>,
+    #[serde(rename = "editor.selectionHighlightBackground")]
+    pub editor_selection_highlight_background: Option<String>,
+    #[serde(rename = "editor.foldBackground")]
+    pub editor_fold_background: Option<String>,
+    #[serde(rename = "editor.wordHighlightBackground")]
+    pub editor_word_highlight_background: Option<String>,
+    #[serde(rename = "editor.wordHighlightStrongBackground")]
+    pub editor_word_highlight_strong_background: Option<String>,
+    #[serde(rename = "editor.findMatchBackground")]
+    pub editor_find_match_background: Option<String>,
+    #[serde(rename = "editor.findMatchHighlightBackground")]
+    pub editor_find_match_highlight_background: Option<String>,
+    #[serde(rename = "editor.findRangeHighlightBackground")]
+    pub editor_find_range_highlight_background: Option<String>,
+    #[serde(rename = "editor.hoverHighlightBackground")]
+    pub editor_hover_highlight_background: Option<String>,
+    #[serde(rename = "editor.lineHighlightBorder")]
+    pub editor_line_highlight_border: Option<String>,
+    #[serde(rename = "editorLink.activeForeground")]
+    pub editor_link_active_foreground: Option<String>,
+    #[serde(rename = "editor.rangeHighlightBackground")]
+    pub editor_range_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetTabstopHighlightBackground")]
+    pub editor_snippet_tabstop_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetTabstopHighlightBorder")]
+    pub editor_snippet_tabstop_highlight_border: Option<String>,
+    #[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
+    pub editor_snippet_final_tabstop_highlight_background: Option<String>,
+    #[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
+    pub editor_snippet_final_tabstop_highlight_border: Option<String>,
+    #[serde(rename = "editorWhitespace.foreground")]
+    pub editor_whitespace_foreground: Option<String>,
+    #[serde(rename = "editorIndentGuide.background")]
+    pub editor_indent_guide_background: Option<String>,
+    #[serde(rename = "editorIndentGuide.activeBackground")]
+    pub editor_indent_guide_active_background: Option<String>,
+    #[serde(rename = "editorRuler.foreground")]
+    pub editor_ruler_foreground: Option<String>,
+    #[serde(rename = "editorCodeLens.foreground")]
+    pub editor_code_lens_foreground: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground1")]
+    pub editor_bracket_highlight_foreground1: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground2")]
+    pub editor_bracket_highlight_foreground2: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground3")]
+    pub editor_bracket_highlight_foreground3: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground4")]
+    pub editor_bracket_highlight_foreground4: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground5")]
+    pub editor_bracket_highlight_foreground5: Option<String>,
+    #[serde(rename = "editorBracketHighlight.foreground6")]
+    pub editor_bracket_highlight_foreground6: Option<String>,
+    #[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
+    pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.border")]
+    pub editor_overview_ruler_border: Option<String>,
+    #[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
+    pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
+    pub editor_overview_ruler_word_highlight_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
+    pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.modifiedForeground")]
+    pub editor_overview_ruler_modified_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.addedForeground")]
+    pub editor_overview_ruler_added_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.deletedForeground")]
+    pub editor_overview_ruler_deleted_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.errorForeground")]
+    pub editor_overview_ruler_error_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.warningForeground")]
+    pub editor_overview_ruler_warning_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.infoForeground")]
+    pub editor_overview_ruler_info_foreground: Option<String>,
+    #[serde(rename = "editorError.foreground")]
+    pub editor_error_foreground: Option<String>,
+    #[serde(rename = "editorWarning.foreground")]
+    pub editor_warning_foreground: Option<String>,
+    #[serde(rename = "editorGutter.modifiedBackground")]
+    pub editor_gutter_modified_background: Option<String>,
+    #[serde(rename = "editorGutter.addedBackground")]
+    pub editor_gutter_added_background: Option<String>,
+    #[serde(rename = "editorGutter.deletedBackground")]
+    pub editor_gutter_deleted_background: Option<String>,
+    #[serde(rename = "gitDecoration.modifiedResourceForeground")]
+    pub git_decoration_modified_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.deletedResourceForeground")]
+    pub git_decoration_deleted_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.untrackedResourceForeground")]
+    pub git_decoration_untracked_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.ignoredResourceForeground")]
+    pub git_decoration_ignored_resource_foreground: Option<String>,
+    #[serde(rename = "gitDecoration.conflictingResourceForeground")]
+    pub git_decoration_conflicting_resource_foreground: Option<String>,
+    #[serde(rename = "diffEditor.insertedTextBackground")]
+    pub diff_editor_inserted_text_background: Option<String>,
+    #[serde(rename = "diffEditor.removedTextBackground")]
+    pub diff_editor_removed_text_background: Option<String>,
+    #[serde(rename = "inlineChat.regionHighlight")]
+    pub inline_chat_region_highlight: Option<String>,
+    #[serde(rename = "editorWidget.background")]
+    pub editor_widget_background: Option<String>,
+    #[serde(rename = "editorSuggestWidget.background")]
+    pub editor_suggest_widget_background: Option<String>,
+    #[serde(rename = "editorSuggestWidget.foreground")]
+    pub editor_suggest_widget_foreground: Option<String>,
+    #[serde(rename = "editorSuggestWidget.selectedBackground")]
+    pub editor_suggest_widget_selected_background: Option<String>,
+    #[serde(rename = "editorHoverWidget.background")]
+    pub editor_hover_widget_background: Option<String>,
+    #[serde(rename = "editorHoverWidget.border")]
+    pub editor_hover_widget_border: Option<String>,
+    #[serde(rename = "editorMarkerNavigation.background")]
+    pub editor_marker_navigation_background: Option<String>,
+    #[serde(rename = "peekView.border")]
+    pub peek_view_border: Option<String>,
+    #[serde(rename = "peekViewEditor.background")]
+    pub peek_view_editor_background: Option<String>,
+    #[serde(rename = "peekViewEditor.matchHighlightBackground")]
+    pub peek_view_editor_match_highlight_background: Option<String>,
+    #[serde(rename = "peekViewResult.background")]
+    pub peek_view_result_background: Option<String>,
+    #[serde(rename = "peekViewResult.fileForeground")]
+    pub peek_view_result_file_foreground: Option<String>,
+    #[serde(rename = "peekViewResult.lineForeground")]
+    pub peek_view_result_line_foreground: Option<String>,
+    #[serde(rename = "peekViewResult.matchHighlightBackground")]
+    pub peek_view_result_match_highlight_background: Option<String>,
+    #[serde(rename = "peekViewResult.selectionBackground")]
+    pub peek_view_result_selection_background: Option<String>,
+    #[serde(rename = "peekViewResult.selectionForeground")]
+    pub peek_view_result_selection_foreground: Option<String>,
+    #[serde(rename = "peekViewTitle.background")]
+    pub peek_view_title_background: Option<String>,
+    #[serde(rename = "peekViewTitleDescription.foreground")]
+    pub peek_view_title_description_foreground: Option<String>,
+    #[serde(rename = "peekViewTitleLabel.foreground")]
+    pub peek_view_title_label_foreground: Option<String>,
+    #[serde(rename = "merge.currentHeaderBackground")]
+    pub merge_current_header_background: Option<String>,
+    #[serde(rename = "merge.incomingHeaderBackground")]
+    pub merge_incoming_header_background: Option<String>,
+    #[serde(rename = "editorOverviewRuler.currentContentForeground")]
+    pub editor_overview_ruler_current_content_foreground: Option<String>,
+    #[serde(rename = "editorOverviewRuler.incomingContentForeground")]
+    pub editor_overview_ruler_incoming_content_foreground: Option<String>,
+    #[serde(rename = "panel.background")]
+    pub panel_background: Option<String>,
+    #[serde(rename = "panel.border")]
+    pub panel_border: Option<String>,
+    #[serde(rename = "panelTitle.activeBorder")]
+    pub panel_title_active_border: Option<String>,
+    #[serde(rename = "panelTitle.activeForeground")]
+    pub panel_title_active_foreground: Option<String>,
+    #[serde(rename = "panelTitle.inactiveForeground")]
+    pub panel_title_inactive_foreground: Option<String>,
+    #[serde(rename = "statusBar.background")]
+    pub status_bar_background: Option<String>,
+    #[serde(rename = "statusBar.foreground")]
+    pub status_bar_foreground: Option<String>,
+    #[serde(rename = "statusBar.debuggingBackground")]
+    pub status_bar_debugging_background: Option<String>,
+    #[serde(rename = "statusBar.debuggingForeground")]
+    pub status_bar_debugging_foreground: Option<String>,
+    #[serde(rename = "statusBar.noFolderBackground")]
+    pub status_bar_no_folder_background: Option<String>,
+    #[serde(rename = "statusBar.noFolderForeground")]
+    pub status_bar_no_folder_foreground: Option<String>,
+    #[serde(rename = "statusBarItem.prominentBackground")]
+    pub status_bar_item_prominent_background: Option<String>,
+    #[serde(rename = "statusBarItem.prominentHoverBackground")]
+    pub status_bar_item_prominent_hover_background: Option<String>,
+    #[serde(rename = "statusBarItem.remoteForeground")]
+    pub status_bar_item_remote_foreground: Option<String>,
+    #[serde(rename = "statusBarItem.remoteBackground")]
+    pub status_bar_item_remote_background: Option<String>,
+    #[serde(rename = "titleBar.activeBackground")]
+    pub title_bar_active_background: Option<String>,
+    #[serde(rename = "titleBar.activeForeground")]
+    pub title_bar_active_foreground: Option<String>,
+    #[serde(rename = "titleBar.inactiveBackground")]
+    pub title_bar_inactive_background: Option<String>,
+    #[serde(rename = "titleBar.inactiveForeground")]
+    pub title_bar_inactive_foreground: Option<String>,
+    #[serde(rename = "extensionButton.prominentForeground")]
+    pub extension_button_prominent_foreground: Option<String>,
+    #[serde(rename = "extensionButton.prominentBackground")]
+    pub extension_button_prominent_background: Option<String>,
+    #[serde(rename = "extensionButton.prominentHoverBackground")]
+    pub extension_button_prominent_hover_background: Option<String>,
+    #[serde(rename = "pickerGroup.border")]
+    pub picker_group_border: Option<String>,
+    #[serde(rename = "pickerGroup.foreground")]
+    pub picker_group_foreground: Option<String>,
+    #[serde(rename = "debugToolBar.background")]
+    pub debug_tool_bar_background: Option<String>,
+    #[serde(rename = "walkThrough.embeddedEditorBackground")]
+    pub walk_through_embedded_editor_background: Option<String>,
+    #[serde(rename = "settings.headerForeground")]
+    pub settings_header_foreground: Option<String>,
+    #[serde(rename = "settings.modifiedItemIndicator")]
+    pub settings_modified_item_indicator: Option<String>,
+    #[serde(rename = "settings.dropdownBackground")]
+    pub settings_dropdown_background: Option<String>,
+    #[serde(rename = "settings.dropdownForeground")]
+    pub settings_dropdown_foreground: Option<String>,
+    #[serde(rename = "settings.dropdownBorder")]
+    pub settings_dropdown_border: Option<String>,
+    #[serde(rename = "settings.checkboxBackground")]
+    pub settings_checkbox_background: Option<String>,
+    #[serde(rename = "settings.checkboxForeground")]
+    pub settings_checkbox_foreground: Option<String>,
+    #[serde(rename = "settings.checkboxBorder")]
+    pub settings_checkbox_border: Option<String>,
+    #[serde(rename = "settings.textInputBackground")]
+    pub settings_text_input_background: Option<String>,
+    #[serde(rename = "settings.textInputForeground")]
+    pub settings_text_input_foreground: Option<String>,
+    #[serde(rename = "settings.textInputBorder")]
+    pub settings_text_input_border: Option<String>,
+    #[serde(rename = "settings.numberInputBackground")]
+    pub settings_number_input_background: Option<String>,
+    #[serde(rename = "settings.numberInputForeground")]
+    pub settings_number_input_foreground: Option<String>,
+    #[serde(rename = "settings.numberInputBorder")]
+    pub settings_number_input_border: Option<String>,
+    #[serde(rename = "breadcrumb.foreground")]
+    pub breadcrumb_foreground: Option<String>,
+    #[serde(rename = "breadcrumb.background")]
+    pub breadcrumb_background: Option<String>,
+    #[serde(rename = "breadcrumb.focusForeground")]
+    pub breadcrumb_focus_foreground: Option<String>,
+    #[serde(rename = "breadcrumb.activeSelectionForeground")]
+    pub breadcrumb_active_selection_foreground: Option<String>,
+    #[serde(rename = "breadcrumbPicker.background")]
+    pub breadcrumb_picker_background: Option<String>,
+    #[serde(rename = "listFilterWidget.background")]
+    pub list_filter_widget_background: Option<String>,
+    #[serde(rename = "listFilterWidget.outline")]
+    pub list_filter_widget_outline: Option<String>,
+    #[serde(rename = "listFilterWidget.noMatchesOutline")]
+    pub list_filter_widget_no_matches_outline: Option<String>,
+}