mirror of
https://github.com/Microsoft/vscode
synced 2024-10-30 11:10:48 +00:00
Optimize decodeTextMateToken (#4828)
This commit is contained in:
parent
e25312d0f5
commit
61246fb16f
2 changed files with 203 additions and 43 deletions
|
@ -12,7 +12,7 @@ import {ILineTokens, IMode, IToken, ITokenizationSupport} from 'vs/editor/common
|
|||
import {TMState} from 'vs/editor/common/modes/TMState';
|
||||
import {Token} from 'vs/editor/common/modes/supports';
|
||||
import {IModeService} from 'vs/editor/common/services/modeService';
|
||||
import {IGrammar, ITMToken, Registry} from 'vscode-textmate';
|
||||
import {IGrammar, Registry} from 'vscode-textmate';
|
||||
|
||||
export interface ITMSyntaxExtensionPoint {
|
||||
language: string;
|
||||
|
@ -126,15 +126,78 @@ function createTokenizationSupport(mode: IMode, grammar: IGrammar): ITokenizatio
|
|||
};
|
||||
}
|
||||
|
||||
export class DecodeMap {
|
||||
_decodeMapTrait: void;
|
||||
|
||||
lastAssignedId: number;
|
||||
scopeToTokenIds: { [scope:string]:number[]; };
|
||||
tokenToTokenId: { [token:string]:number; };
|
||||
tokenIdToToken: string[];
|
||||
prevToken: TMTokenDecodeData;
|
||||
|
||||
constructor() {
|
||||
this.lastAssignedId = 0;
|
||||
this.scopeToTokenIds = Object.create(null);
|
||||
this.tokenToTokenId = Object.create(null);
|
||||
this.tokenIdToToken = [null];
|
||||
this.prevToken = new TMTokenDecodeData([], []);
|
||||
}
|
||||
|
||||
public getTokenIds(scope:string): number[] {
|
||||
let tokens = this.scopeToTokenIds[scope];
|
||||
if (tokens) {
|
||||
return tokens;
|
||||
}
|
||||
let tmpTokens = scope.split('.');
|
||||
|
||||
tokens = [];
|
||||
for (let i = 0; i < tmpTokens.length; i++) {
|
||||
let token = tmpTokens[i];
|
||||
let tokenId = this.tokenToTokenId[token];
|
||||
if (!tokenId) {
|
||||
tokenId = (++this.lastAssignedId);
|
||||
this.tokenToTokenId[token] = tokenId;
|
||||
this.tokenIdToToken[tokenId] = token + ' ';
|
||||
}
|
||||
tokens.push(tokenId);
|
||||
}
|
||||
|
||||
this.scopeToTokenIds[scope] = tokens;
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public getToken(tokenMap:boolean[]): string {
|
||||
let result = '';
|
||||
for (let i = 1; i < this.lastAssignedId; i++) {
|
||||
if (tokenMap[i]) {
|
||||
result += this.tokenIdToToken[i];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export class TMTokenDecodeData {
|
||||
_tmTokenDecodeDataTrait: void;
|
||||
|
||||
public scopes: string[];
|
||||
public scopeTokensMaps: boolean[][];
|
||||
|
||||
constructor(scopes:string[], scopeTokensMaps:boolean[][]) {
|
||||
this.scopes = scopes;
|
||||
this.scopeTokensMaps = scopeTokensMaps;
|
||||
}
|
||||
}
|
||||
|
||||
class Tokenizer {
|
||||
private _grammar: IGrammar;
|
||||
private _modeId: string;
|
||||
private _decodeMap: DecodeMap;
|
||||
|
||||
constructor(modeId:string, grammar: IGrammar) {
|
||||
this._modeId = modeId;
|
||||
this._grammar = grammar;
|
||||
this._decodeMap = new DecodeMap();
|
||||
}
|
||||
|
||||
public tokenize(line: string, state: TMState, offsetDelta: number = 0, stopAtOffset?: number): ILineTokens {
|
||||
|
@ -165,12 +228,12 @@ class Tokenizer {
|
|||
for (let tokenIndex = 0, len = textMateResult.tokens.length; tokenIndex < len; tokenIndex++) {
|
||||
let token = textMateResult.tokens[tokenIndex];
|
||||
let tokenStartIndex = token.startIndex;
|
||||
let t = decodeTextMateToken(this._modeId, token);
|
||||
let tokenType = decodeTextMateToken(this._decodeMap, token.scopes);
|
||||
|
||||
// do not push a new token if the type is exactly the same (also helps with ligatures)
|
||||
if (t.tokenType !== lastTokenType) {
|
||||
ret.tokens.push(new Token(tokenStartIndex + offsetDelta, t.tokenType));
|
||||
lastTokenType = t.tokenType;
|
||||
if (tokenType !== lastTokenType) {
|
||||
ret.tokens.push(new Token(tokenStartIndex + offsetDelta, tokenType));
|
||||
lastTokenType = tokenType;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,48 +241,34 @@ class Tokenizer {
|
|||
}
|
||||
}
|
||||
|
||||
function decodeTextMateToken(modeId:string, entry: ITMToken) {
|
||||
let tokenTypeArray: string[] = [];
|
||||
for (let level = 1 /* deliberately skip scope 0*/; level < entry.scopes.length; ++level) {
|
||||
tokenTypeArray = tokenTypeArray.concat(entry.scopes[level].split('.'));
|
||||
}
|
||||
let modeToken = '';
|
||||
if (entry.scopes.length > 0) {
|
||||
let dotIndex = entry.scopes[0].lastIndexOf('.');
|
||||
if (dotIndex >= 0) {
|
||||
modeToken = entry.scopes[0].substr(dotIndex + 1);
|
||||
}
|
||||
}
|
||||
let tokenTypes: string[] = [];
|
||||
dedupTokens(tokenTypeArray, modeToken, tokenTypes);
|
||||
export function decodeTextMateToken(decodeMap: DecodeMap, scopes: string[]): string {
|
||||
const prevTokenScopes = decodeMap.prevToken.scopes;
|
||||
const prevTokenScopesLength = prevTokenScopes.length;
|
||||
const prevTokenScopeTokensMaps = decodeMap.prevToken.scopeTokensMaps;
|
||||
|
||||
return {
|
||||
tokenType: tokenTypes.join('.'),
|
||||
modeToken: modeId
|
||||
};
|
||||
}
|
||||
let scopeTokensMaps: boolean[][] = [];
|
||||
let prevScopeTokensMaps: boolean[] = [];
|
||||
let sameAsPrev = true;
|
||||
for (let level = 1/* deliberately skip scope 0*/; level < scopes.length; level++) {
|
||||
let scope = scopes[level];
|
||||
|
||||
/**
|
||||
* Remove duplicate entries, collect result in `result`, place `modeToken` at the end
|
||||
* and detect if this is a comment => return true if it looks like a comment
|
||||
*/
|
||||
function dedupTokens(tokenTypeArray:string[], modeToken:string, result:string[]): void {
|
||||
|
||||
tokenTypeArray.sort();
|
||||
|
||||
var prev:string = null,
|
||||
curr:string = null;
|
||||
|
||||
for (var i = 0, len = tokenTypeArray.length; i < len; i++) {
|
||||
prev = curr;
|
||||
curr = tokenTypeArray[i];
|
||||
|
||||
if (curr === prev || curr === modeToken) {
|
||||
continue;
|
||||
if (sameAsPrev) {
|
||||
if (level < prevTokenScopesLength && prevTokenScopes[level] === scope) {
|
||||
prevScopeTokensMaps = prevTokenScopeTokensMaps[level];
|
||||
scopeTokensMaps[level] = prevScopeTokensMaps;
|
||||
continue;
|
||||
}
|
||||
sameAsPrev = false;
|
||||
}
|
||||
|
||||
result.push(curr);
|
||||
let tokens = decodeMap.getTokenIds(scope);
|
||||
prevScopeTokensMaps = prevScopeTokensMaps.slice(0);
|
||||
for (let i = 0; i < tokens.length; i++) {
|
||||
prevScopeTokensMaps[tokens[i]] = true;
|
||||
}
|
||||
scopeTokensMaps[level] = prevScopeTokensMaps;
|
||||
}
|
||||
|
||||
result.push(modeToken);
|
||||
decodeMap.prevToken = new TMTokenDecodeData(scopes, scopeTokensMaps);
|
||||
return decodeMap.getToken(prevScopeTokensMaps);
|
||||
}
|
||||
|
|
111
src/vs/editor/test/node/textMate/TMSyntax.test.ts
Normal file
111
src/vs/editor/test/node/textMate/TMSyntax.test.ts
Normal file
|
@ -0,0 +1,111 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import {decodeTextMateToken, DecodeMap} from 'vs/editor/node/textMate/TMSyntax';
|
||||
|
||||
suite('textMate', () => {
|
||||
|
||||
test('decodeTextMateToken', () => {
|
||||
let decodeMap = new DecodeMap();
|
||||
|
||||
let input = getTestScopes();
|
||||
let actual:string[] = [];
|
||||
for (let i = 0, len = input.length; i < len; i++) {
|
||||
actual.push(decodeTextMateToken(decodeMap, input[i]));
|
||||
}
|
||||
|
||||
let expected = [
|
||||
'meta function js decl block type parameters paren cover object method declaration field member entity ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter brace ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name parameter ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member entity name ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name parameter variable ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member parameter brace round ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member brace ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member keyword operator ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member keyword operator ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member keyword operator ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string double ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string double ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member string double ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member brace array literal ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member array literal ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member brace array literal ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member keyword operator comparison ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member brace curly ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member brace curly ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member name ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member ',
|
||||
'meta function js decl block type parameters paren cover object method declaration field member '
|
||||
];
|
||||
|
||||
assert.deepEqual(actual, expected);
|
||||
});
|
||||
});
|
||||
|
||||
function getTestScopes():string[][] {
|
||||
return [
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','entity.name.function.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','meta.brace.round.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','parameter.name.js','variable.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','parameter.name.js','variable.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','parameter.name.js','variable.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','meta.brace.round.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.method.overload.declaration.js','entity.name.function.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','meta.brace.round.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','parameter.name.js','variable.parameter.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.function.type.parameter.js','meta.brace.round.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.brace.curly.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','keyword.operator.comparison.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','keyword.operator.arithmetic.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','keyword.operator.arithmetic.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','string.double.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.array.literal.js','meta.brace.square.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.array.literal.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.array.literal.js','meta.brace.square.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','keyword.operator.comparison.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.brace.curly.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.brace.curly.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.type.name.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.type.name.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js'],
|
||||
['source.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.block.js','meta.type.parameters.js','meta.type.paren.cover.js','meta.object.type.js','meta.field.declaration.js','meta.block.js','meta.object.member.js','meta.function.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.object.type.js','meta.method.declaration.js','meta.decl.block.js','meta.type.parameters.js','meta.type.paren.cover.js']
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue