Skip to content

Commit fd13e44

Browse files
committed
add TokenStylingDefaultRule.match
1 parent b6e7eaa commit fd13e44

File tree

2 files changed

+31
-25
lines changed

2 files changed

+31
-25
lines changed

src/vs/platform/theme/common/tokenClassificationRegistry.ts

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,13 @@ export interface TokenStyleDefaults {
9696
}
9797

9898
export interface TokenStylingDefaultRule {
99-
classification: TokenClassification;
100-
matchScore: number;
99+
match(classification: TokenClassification): number;
100+
selector: TokenClassification;
101101
defaults: TokenStyleDefaults;
102102
}
103103

104104
export interface TokenStylingRule {
105-
classification: TokenClassification;
106-
matchScore: number;
105+
match(classification: TokenClassification): number;
107106
value: TokenStyle;
108107
}
109108

@@ -276,16 +275,35 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry {
276275
return { type: tokenTypeDesc.num, modifiers: allModifierBits };
277276
}
278277

279-
public getTokenStylingRule(classification: TokenClassification, value: TokenStyle): TokenStylingRule {
280-
return { classification, matchScore: getTokenStylingScore(classification), value };
278+
279+
private newMatcher(selector: TokenClassification) {
280+
const score = getTokenStylingScore(selector);
281+
return (classification: TokenClassification) => {
282+
const selectorType = selector.type;
283+
if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) {
284+
return -1;
285+
}
286+
const selectorModifier = selector.modifiers;
287+
if ((classification.modifiers & selectorModifier) !== selectorModifier) {
288+
return -1;
289+
}
290+
return score;
291+
};
281292
}
282293

283-
public registerTokenStyleDefault(classification: TokenClassification, defaults: TokenStyleDefaults): void {
284-
this.tokenStylingDefaultRules.push({ classification, matchScore: getTokenStylingScore(classification), defaults });
294+
public getTokenStylingRule(selector: TokenClassification, value: TokenStyle): TokenStylingRule {
295+
return {
296+
match: this.newMatcher(selector),
297+
value
298+
};
299+
}
300+
301+
public registerTokenStyleDefault(selector: TokenClassification, defaults: TokenStyleDefaults): void {
302+
this.tokenStylingDefaultRules.push({ selector, match: this.newMatcher(selector), defaults });
285303
}
286304

287305
public deregisterTokenStyleDefault(classification: TokenClassification): void {
288-
this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.classification.type === classification.type && r.classification.modifiers === classification.modifiers));
306+
this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.selector.type === classification.type && r.selector.modifiers === classification.modifiers));
289307
}
290308

291309
public deregisterTokenType(id: string): void {
@@ -330,18 +348,6 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry {
330348

331349
}
332350

333-
export function matchTokenStylingRule(themeSelector: TokenStylingRule | TokenStylingDefaultRule, classification: TokenClassification): number {
334-
const selectorType = themeSelector.classification.type;
335-
if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) {
336-
return -1;
337-
}
338-
const selectorModifier = themeSelector.classification.modifiers;
339-
if ((classification.modifiers & selectorModifier) !== selectorModifier) {
340-
return -1;
341-
}
342-
return themeSelector.matchScore;
343-
}
344-
345351

346352
const tokenClassificationRegistry = new TokenClassificationRegistry();
347353
platform.Registry.add(Extensions.TokenClassificationContribution, tokenClassificationRegistry);

src/vs/workbench/services/themes/common/colorThemeData.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages';
1919
import { URI } from 'vs/base/common/uri';
2020
import { parse as parsePList } from 'vs/workbench/services/themes/common/plistParser';
2121
import { startsWith } from 'vs/base/common/strings';
22-
import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue, matchTokenStylingRule } from 'vs/platform/theme/common/tokenClassificationRegistry';
22+
import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue } from 'vs/platform/theme/common/tokenClassificationRegistry';
2323
import { MatcherWithPriority, Matcher, createMatchers } from 'vs/workbench/services/themes/common/textMateScopeMatcher';
2424
import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader';
2525
import { FontStyle, ColorId, MetadataConsts } from 'vs/editor/common/modes';
@@ -153,7 +153,7 @@ export class ColorThemeData implements IColorTheme {
153153
}
154154
if (this.tokenStylingRules === undefined) {
155155
for (const rule of tokenClassificationRegistry.getTokenStylingDefaultRules()) {
156-
const matchScore = matchTokenStylingRule(rule, classification);
156+
const matchScore = rule.match(classification);
157157
if (matchScore >= 0) {
158158
let style: TokenStyle | undefined;
159159
if (rule.defaults.scopesToProbe) {
@@ -169,14 +169,14 @@ export class ColorThemeData implements IColorTheme {
169169
}
170170
} else {
171171
for (const rule of this.tokenStylingRules) {
172-
const matchScore = matchTokenStylingRule(rule, classification);
172+
const matchScore = rule.match(classification);
173173
if (matchScore >= 0) {
174174
_processStyle(matchScore, rule.value);
175175
}
176176
}
177177
}
178178
for (const rule of this.customTokenStylingRules) {
179-
const matchScore = matchTokenStylingRule(rule, classification);
179+
const matchScore = rule.match(classification);
180180
if (matchScore >= 0) {
181181
_processStyle(matchScore, rule.value);
182182
}

0 commit comments

Comments
 (0)