From fd13e449f5f2fe300f187129d6065ed1cfad74d3 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 17 Jan 2020 16:56:32 +0100 Subject: [PATCH] add TokenStylingDefaultRule.match --- .../common/tokenClassificationRegistry.ts | 48 +++++++++++-------- .../services/themes/common/colorThemeData.ts | 8 ++-- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/vs/platform/theme/common/tokenClassificationRegistry.ts b/src/vs/platform/theme/common/tokenClassificationRegistry.ts index d7eb816aa9839..5d6af25757c8c 100644 --- a/src/vs/platform/theme/common/tokenClassificationRegistry.ts +++ b/src/vs/platform/theme/common/tokenClassificationRegistry.ts @@ -96,14 +96,13 @@ export interface TokenStyleDefaults { } export interface TokenStylingDefaultRule { - classification: TokenClassification; - matchScore: number; + match(classification: TokenClassification): number; + selector: TokenClassification; defaults: TokenStyleDefaults; } export interface TokenStylingRule { - classification: TokenClassification; - matchScore: number; + match(classification: TokenClassification): number; value: TokenStyle; } @@ -276,16 +275,35 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry { return { type: tokenTypeDesc.num, modifiers: allModifierBits }; } - public getTokenStylingRule(classification: TokenClassification, value: TokenStyle): TokenStylingRule { - return { classification, matchScore: getTokenStylingScore(classification), value }; + + private newMatcher(selector: TokenClassification) { + const score = getTokenStylingScore(selector); + return (classification: TokenClassification) => { + const selectorType = selector.type; + if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) { + return -1; + } + const selectorModifier = selector.modifiers; + if ((classification.modifiers & selectorModifier) !== selectorModifier) { + return -1; + } + return score; + }; } - public registerTokenStyleDefault(classification: TokenClassification, defaults: TokenStyleDefaults): void { - this.tokenStylingDefaultRules.push({ classification, matchScore: getTokenStylingScore(classification), defaults }); + public getTokenStylingRule(selector: TokenClassification, value: TokenStyle): TokenStylingRule { + return { + match: this.newMatcher(selector), + value + }; + } + + public registerTokenStyleDefault(selector: TokenClassification, defaults: TokenStyleDefaults): void { + this.tokenStylingDefaultRules.push({ selector, match: this.newMatcher(selector), defaults }); } public deregisterTokenStyleDefault(classification: TokenClassification): void { - this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.classification.type === classification.type && r.classification.modifiers === classification.modifiers)); + this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.selector.type === classification.type && r.selector.modifiers === classification.modifiers)); } public deregisterTokenType(id: string): void { @@ -330,18 +348,6 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry { } -export function matchTokenStylingRule(themeSelector: TokenStylingRule | TokenStylingDefaultRule, classification: TokenClassification): number { - const selectorType = themeSelector.classification.type; - if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) { - return -1; - } - const selectorModifier = themeSelector.classification.modifiers; - if ((classification.modifiers & selectorModifier) !== selectorModifier) { - return -1; - } - return themeSelector.matchScore; -} - const tokenClassificationRegistry = new TokenClassificationRegistry(); platform.Registry.add(Extensions.TokenClassificationContribution, tokenClassificationRegistry); diff --git a/src/vs/workbench/services/themes/common/colorThemeData.ts b/src/vs/workbench/services/themes/common/colorThemeData.ts index 34a03efc88b5d..623b89ddeeb80 100644 --- a/src/vs/workbench/services/themes/common/colorThemeData.ts +++ b/src/vs/workbench/services/themes/common/colorThemeData.ts @@ -19,7 +19,7 @@ import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages'; import { URI } from 'vs/base/common/uri'; import { parse as parsePList } from 'vs/workbench/services/themes/common/plistParser'; import { startsWith } from 'vs/base/common/strings'; -import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue, matchTokenStylingRule } from 'vs/platform/theme/common/tokenClassificationRegistry'; +import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue } from 'vs/platform/theme/common/tokenClassificationRegistry'; import { MatcherWithPriority, Matcher, createMatchers } from 'vs/workbench/services/themes/common/textMateScopeMatcher'; import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader'; import { FontStyle, ColorId, MetadataConsts } from 'vs/editor/common/modes'; @@ -153,7 +153,7 @@ export class ColorThemeData implements IColorTheme { } if (this.tokenStylingRules === undefined) { for (const rule of tokenClassificationRegistry.getTokenStylingDefaultRules()) { - const matchScore = matchTokenStylingRule(rule, classification); + const matchScore = rule.match(classification); if (matchScore >= 0) { let style: TokenStyle | undefined; if (rule.defaults.scopesToProbe) { @@ -169,14 +169,14 @@ export class ColorThemeData implements IColorTheme { } } else { for (const rule of this.tokenStylingRules) { - const matchScore = matchTokenStylingRule(rule, classification); + const matchScore = rule.match(classification); if (matchScore >= 0) { _processStyle(matchScore, rule.value); } } } for (const rule of this.customTokenStylingRules) { - const matchScore = matchTokenStylingRule(rule, classification); + const matchScore = rule.match(classification); if (matchScore >= 0) { _processStyle(matchScore, rule.value); }