diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 55ba5351d17..71c627a2a06 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -1066,11 +1066,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", diff --git a/editors/code/package.json b/editors/code/package.json index 97276339f6e..eeb3d3513fe 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -33,7 +33,6 @@ "fix": " tsfmt -r && eslint -c .eslintrc.js --ext ts ./src --fix" }, "dependencies": { - "jsonc-parser": "^2.2.1", "node-fetch": "^2.6.0", "vscode-languageclient": "7.0.0-next.1" }, diff --git a/editors/code/src/color_theme.ts b/editors/code/src/color_theme.ts deleted file mode 100644 index 5b9327b28a4..00000000000 --- a/editors/code/src/color_theme.ts +++ /dev/null @@ -1,129 +0,0 @@ -import * as fs from 'fs'; -import * as jsonc from 'jsonc-parser'; -import * as path from 'path'; -import * as vscode from 'vscode'; - -export interface TextMateRuleSettings { - foreground?: string; - background?: string; - fontStyle?: string; -} - -export class ColorTheme { - private rules: Map = new Map(); - - static load(): ColorTheme { - // Find out current color theme - const themeName = vscode.workspace - .getConfiguration('workbench') - .get('colorTheme'); - - if (typeof themeName !== 'string') { - // console.warn('workbench.colorTheme is', themeName) - return new ColorTheme(); - } - return loadThemeNamed(themeName); - } - - static fromRules(rules: TextMateRule[]): ColorTheme { - const res = new ColorTheme(); - for (const rule of rules) { - const scopes = typeof rule.scope === 'undefined' - ? [] - : typeof rule.scope === 'string' - ? [rule.scope] - : rule.scope; - - for (const scope of scopes) { - res.rules.set(scope, rule.settings); - } - } - return res; - } - - lookup(scopes: string[]): TextMateRuleSettings { - let res: TextMateRuleSettings = {}; - for (const scope of scopes) { - this.rules.forEach((value, key) => { - if (scope.startsWith(key)) { - res = mergeRuleSettings(res, value); - } - }); - } - return res; - } - - mergeFrom(other: ColorTheme) { - other.rules.forEach((value, key) => { - const merged = mergeRuleSettings(this.rules.get(key), value); - this.rules.set(key, merged); - }); - } -} - -function loadThemeNamed(themeName: string): ColorTheme { - function isTheme(extension: vscode.Extension): boolean { - return ( - extension.extensionKind === vscode.ExtensionKind.UI && - extension.packageJSON.contributes && - extension.packageJSON.contributes.themes - ); - } - - const themePaths: string[] = vscode.extensions.all - .filter(isTheme) - .flatMap( - ext => ext.packageJSON.contributes.themes - .filter((it: any) => (it.id || it.label) === themeName) - .map((it: any) => path.join(ext.extensionPath, it.path)) - ); - - const res = new ColorTheme(); - for (const themePath of themePaths) { - res.mergeFrom(loadThemeFile(themePath)); - } - - const globalCustomizations: any = vscode.workspace.getConfiguration('editor').get('tokenColorCustomizations'); - res.mergeFrom(ColorTheme.fromRules(globalCustomizations?.textMateRules ?? [])); - - const themeCustomizations: any = vscode.workspace.getConfiguration('editor.tokenColorCustomizations').get(`[${themeName}]`); - res.mergeFrom(ColorTheme.fromRules(themeCustomizations?.textMateRules ?? [])); - - - return res; -} - -function loadThemeFile(themePath: string): ColorTheme { - let text; - try { - text = fs.readFileSync(themePath, 'utf8'); - } catch { - return new ColorTheme(); - } - const obj = jsonc.parse(text); - const tokenColors: TextMateRule[] = obj?.tokenColors ?? []; - const res = ColorTheme.fromRules(tokenColors); - - for (const include of obj?.include ?? []) { - const includePath = path.join(path.dirname(themePath), include); - res.mergeFrom(loadThemeFile(includePath)); - } - - return res; -} - -interface TextMateRule { - scope: string | string[]; - settings: TextMateRuleSettings; -} - -function mergeRuleSettings( - defaultSetting: TextMateRuleSettings | undefined, - override: TextMateRuleSettings, -): TextMateRuleSettings { - return { - foreground: override.foreground ?? defaultSetting?.foreground, - background: override.background ?? defaultSetting?.background, - fontStyle: override.fontStyle ?? defaultSetting?.fontStyle, - }; -}