From 6c381a0e49c7d8e23ba34eb362cd14296bb6aecc Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 13 Dec 2017 12:40:17 +0100 Subject: [PATCH] Load fast-plist async. For #40147 --- .../themes/electron-browser/colorThemeData.ts | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/services/themes/electron-browser/colorThemeData.ts b/src/vs/workbench/services/themes/electron-browser/colorThemeData.ts index a79b9fdba62..d0bcb83b6c9 100644 --- a/src/vs/workbench/services/themes/electron-browser/colorThemeData.ts +++ b/src/vs/workbench/services/themes/electron-browser/colorThemeData.ts @@ -14,7 +14,6 @@ import nls = require('vs/nls'); import * as types from 'vs/base/common/types'; import * as objects from 'vs/base/common/objects'; -import * as plist from 'fast-plist'; import pfs = require('vs/base/node/pfs'); import { Extensions, IColorRegistry, ColorIdentifier, editorBackground, editorForeground } from 'vs/platform/theme/common/colorRegistry'; @@ -289,25 +288,31 @@ function _loadColorThemeFromFile(themePath: string, resultRules: ITokenColorizat } } +let pListParser: Thenable<{ parse(content: string) }>; +function getPListParser() { + return pListParser || import('fast-plist'); +} + function _loadSyntaxTokensFromFile(themePath: string, resultRules: ITokenColorizationRule[], resultColors: IColorMap): TPromise { return pfs.readFile(themePath).then(content => { - try { - let contentValue = plist.parse(content.toString()); - let settings: ITokenColorizationRule[] = contentValue.settings; - if (!Array.isArray(settings)) { - return TPromise.wrapError(new Error(nls.localize('error.plist.invalidformat', "Problem parsing tmTheme file: {0}. 'settings' is not array."))); + return getPListParser().then(parser => { + try { + let contentValue = parser.parse(content.toString()); + let settings: ITokenColorizationRule[] = contentValue.settings; + if (!Array.isArray(settings)) { + return TPromise.wrapError(new Error(nls.localize('error.plist.invalidformat', "Problem parsing tmTheme file: {0}. 'settings' is not array."))); + } + convertSettings(settings, resultRules, resultColors); + return TPromise.as(null); + } catch (e) { + return TPromise.wrapError(new Error(nls.localize('error.cannotparse', "Problems parsing tmTheme file: {0}", e.message))); } - convertSettings(settings, resultRules, resultColors); - return TPromise.as(null); - } catch (e) { - return TPromise.wrapError(new Error(nls.localize('error.cannotparse', "Problems parsing tmTheme file: {0}", e.message))); - } + }); }, error => { return TPromise.wrapError(new Error(nls.localize('error.cannotload', "Problems loading tmTheme file {0}: {1}", themePath, error.message))); }); } - function updateDefaultRuleSettings(defaultRule: ITokenColorizationRule, theme: ColorThemeData): ITokenColorizationRule { let foreground = theme.getColor(editorForeground) || theme.getDefault(editorForeground); let background = theme.getColor(editorBackground) || theme.getDefault(editorBackground); -- GitLab