From a437f0e5849d8ce0a14d40a55f2ac2166f5ec343 Mon Sep 17 00:00:00 2001 From: Seivan Heidari Date: Thu, 31 Oct 2019 11:26:39 +0100 Subject: Making loadColors more readable by monading all the things. --- editors/code/src/scopes.ts | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) (limited to 'editors/code') diff --git a/editors/code/src/scopes.ts b/editors/code/src/scopes.ts index 76cbbd84e..5d4395930 100644 --- a/editors/code/src/scopes.ts +++ b/editors/code/src/scopes.ts @@ -55,10 +55,10 @@ function loadThemeNamed(themeName: string) { const themePaths = vscode.extensions.all .filter(filterThemeExtensions) .reduce((list, extension) => { - const paths = extension.packageJSON.contributes.themes + return extension.packageJSON.contributes.themes .filter((element: any) => (element.id || element.label) === themeName) .map((element: any) => path.join(extension.extensionPath, element.path)) - return list.concat(paths) + .concat(list) }, Array()) @@ -92,7 +92,8 @@ function loadThemeFile(themePath: string) { .forEach(loadThemeFile) } -function mergeRuleSettings(defaultSetting: TextMateRuleSettings, override: TextMateRuleSettings): TextMateRuleSettings { +function mergeRuleSettings(defaultSetting: TextMateRuleSettings | undefined, override: TextMateRuleSettings): TextMateRuleSettings { + if (defaultSetting === undefined) { return override } const mergedRule = defaultSetting mergedRule.background = override.background || defaultSetting.background @@ -102,29 +103,21 @@ function mergeRuleSettings(defaultSetting: TextMateRuleSettings, override: TextM return mergedRule } -function loadColors(textMateRules: TextMateRule[]): void { - for (const rule of textMateRules) { +function updateRules(scope: string, updatedSettings: TextMateRuleSettings): void { + [rules.get(scope)] + .map(settings => mergeRuleSettings(settings, updatedSettings)) + .forEach(settings => rules.set(scope, settings)) +} +function loadColors(textMateRules: TextMateRule[]): void { + textMateRules.forEach(rule => { if (typeof rule.scope === 'string') { - const existingRule = rules.get(rule.scope) - if (existingRule) { - rules.set(rule.scope, mergeRuleSettings(existingRule, rule.settings)) - } - else { - rules.set(rule.scope, rule.settings) - } - } else if (rule.scope instanceof Array) { - for (const scope of rule.scope) { - const existingRule = rules.get(scope) - if (existingRule) { - rules.set(scope, mergeRuleSettings(existingRule, rule.settings)) - } - else { - rules.set(scope, rule.settings) - } - } + updateRules(rule.scope, rule.settings) } - } + else if (rule.scope instanceof Array) { + rule.scope.forEach(scope => updateRules(scope, rule.settings)) + } + }) } function isFile(filePath: string): boolean { -- cgit v1.2.3