Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
467f42da
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
467f42da
编写于
1月 03, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Prepare for theme integration tests
上级
616957b5
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
65 addition
and
1335 deletion
+65
-1335
src/vs/editor/common/modes/supports.ts
src/vs/editor/common/modes/supports.ts
+0
-13
src/vs/editor/node/languageConfigurationExtensionPoint.ts
src/vs/editor/node/languageConfigurationExtensionPoint.ts
+3
-3
src/vs/editor/node/textMate/TMSyntax.ts
src/vs/editor/node/textMate/TMSyntax.ts
+36
-351
src/vs/editor/node/textMate/textMateService.ts
src/vs/editor/node/textMate/textMateService.ts
+20
-0
src/vs/editor/test/node/textMate/TMSyntax.test.ts
src/vs/editor/test/node/textMate/TMSyntax.test.ts
+1
-965
src/vs/workbench/api/node/extHost.contribution.ts
src/vs/workbench/api/node/extHost.contribution.ts
+1
-3
src/vs/workbench/electron-browser/shell.ts
src/vs/workbench/electron-browser/shell.ts
+4
-0
未找到文件。
src/vs/editor/common/modes/supports.ts
浏览文件 @
467f42da
...
@@ -5,21 +5,8 @@
...
@@ -5,21 +5,8 @@
'
use strict
'
;
'
use strict
'
;
import
*
as
modes
from
'
vs/editor/common/modes
'
;
import
*
as
modes
from
'
vs/editor/common/modes
'
;
import
{
Token
}
from
'
vs/editor/common/core/token
'
;
import
{
LineTokens
}
from
'
vs/editor/common/core/lineTokens
'
;
import
{
LineTokens
}
from
'
vs/editor/common/core/lineTokens
'
;
export
class
RawLineTokens
implements
modes
.
ILineTokens
{
_lineTokensBrand
:
void
;
tokens
:
Token
[];
endState
:
modes
.
IState
;
constructor
(
tokens
:
Token
[],
endState
:
modes
.
IState
)
{
this
.
tokens
=
tokens
;
this
.
endState
=
endState
;
}
}
export
function
createScopedLineTokens
(
context
:
LineTokens
,
offset
:
number
):
ScopedLineTokens
{
export
function
createScopedLineTokens
(
context
:
LineTokens
,
offset
:
number
):
ScopedLineTokens
{
let
tokenCount
=
context
.
getTokenCount
();
let
tokenCount
=
context
.
getTokenCount
();
let
tokenIndex
=
context
.
findTokenIndexAtOffset
(
offset
);
let
tokenIndex
=
context
.
findTokenIndexAtOffset
(
offset
);
...
...
src/vs/editor/node/languageConfigurationExtensionPoint.ts
浏览文件 @
467f42da
...
@@ -13,8 +13,8 @@ import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageCo
...
@@ -13,8 +13,8 @@ import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageCo
import
{
Extensions
,
IJSONContributionRegistry
}
from
'
vs/platform/jsonschemas/common/jsonContributionRegistry
'
;
import
{
Extensions
,
IJSONContributionRegistry
}
from
'
vs/platform/jsonschemas/common/jsonContributionRegistry
'
;
import
{
Registry
}
from
'
vs/platform/platform
'
;
import
{
Registry
}
from
'
vs/platform/platform
'
;
import
{
IJSONSchema
}
from
'
vs/base/common/jsonSchema
'
;
import
{
IJSONSchema
}
from
'
vs/base/common/jsonSchema
'
;
import
{
MainProcessTextMateSyntax
}
from
'
vs/editor/node/textMate/TMSyntax
'
;
import
{
LanguageIdentifier
}
from
'
vs/editor/common/modes
'
;
import
{
LanguageIdentifier
}
from
'
vs/editor/common/modes
'
;
import
{
ITextMateService
}
from
'
vs/editor/node/textMate/textMateService
'
;
interface
ILanguageConfiguration
{
interface
ILanguageConfiguration
{
comments
?:
CommentRule
;
comments
?:
CommentRule
;
...
@@ -29,7 +29,7 @@ export class LanguageConfigurationFileHandler {
...
@@ -29,7 +29,7 @@ export class LanguageConfigurationFileHandler {
private
_done
:
boolean
[];
private
_done
:
boolean
[];
constructor
(
constructor
(
tmSyntax
:
MainProcessTextMateSyntax
,
@
ITextMateService
textMateService
:
ITextMateService
,
@
IModeService
modeService
:
IModeService
@
IModeService
modeService
:
IModeService
)
{
)
{
this
.
_modeService
=
modeService
;
this
.
_modeService
=
modeService
;
...
@@ -37,7 +37,7 @@ export class LanguageConfigurationFileHandler {
...
@@ -37,7 +37,7 @@ export class LanguageConfigurationFileHandler {
// Listen for hints that a language configuration is needed/usefull and then load it once
// Listen for hints that a language configuration is needed/usefull and then load it once
this
.
_modeService
.
onDidCreateMode
((
mode
)
=>
this
.
_loadConfigurationsForMode
(
mode
.
getLanguageIdentifier
()));
this
.
_modeService
.
onDidCreateMode
((
mode
)
=>
this
.
_loadConfigurationsForMode
(
mode
.
getLanguageIdentifier
()));
t
mSyntax
.
onDidEncounterLanguage
((
language
)
=>
{
t
extMateService
.
onDidEncounterLanguage
((
language
)
=>
{
// TODO@tokenization
// TODO@tokenization
throw
new
Error
(
'
TODO@tokenization
'
);
throw
new
Error
(
'
TODO@tokenization
'
);
// this._loadConfigurationsForMode(language);
// this._loadConfigurationsForMode(language);
...
...
src/vs/editor/node/textMate/TMSyntax.ts
浏览文件 @
467f42da
...
@@ -5,20 +5,19 @@
...
@@ -5,20 +5,19 @@
'
use strict
'
;
'
use strict
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
*
as
nls
from
'
vs/nls
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
*
as
paths
from
'
vs/base/common/paths
'
;
import
*
as
paths
from
'
vs/base/common/paths
'
;
import
*
as
strings
from
'
vs/base/common/strings
'
;
import
*
as
types
from
'
vs/base/common/types
'
;
import
*
as
types
from
'
vs/base/common/types
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
IExtensionPoint
,
ExtensionMessageCollector
,
ExtensionsRegistry
}
from
'
vs/platform/extensions/common/extensionsRegistry
'
;
import
{
IExtensionPoint
,
ExtensionMessageCollector
,
ExtensionsRegistry
}
from
'
vs/platform/extensions/common/extensionsRegistry
'
;
import
{
I
LineTokens
,
I
TokenizationSupport
,
TokenizationRegistry
}
from
'
vs/editor/common/modes
'
;
import
{
ITokenizationSupport
,
TokenizationRegistry
}
from
'
vs/editor/common/modes
'
;
import
{
TMState
}
from
'
vs/editor/node/textMate/TMState
'
;
import
{
TMState
}
from
'
vs/editor/node/textMate/TMState
'
;
import
{
RawLineTokens
}
from
'
vs/editor/common/modes/supports
'
;
import
{
IModeService
}
from
'
vs/editor/common/services/modeService
'
;
import
{
IModeService
}
from
'
vs/editor/common/services/modeService
'
;
import
{
IGrammar
,
Registry
,
StackElement
,
IToken
,
IEmbeddedLanguagesMap
as
IEmbeddedLanguagesMap2
}
from
'
vscode-textmate
'
;
import
{
IGrammar
,
Registry
,
IEmbeddedLanguagesMap
as
IEmbeddedLanguagesMap2
}
from
'
vscode-textmate
'
;
import
{
Token
}
from
'
vs/editor/common/core/token
'
;
import
{
languagesExtPoint
}
from
'
vs/editor/common/services/modeServiceImpl
'
;
import
{
languagesExtPoint
}
from
'
vs/editor/common/services/modeServiceImpl
'
;
import
{
IThemeService
}
from
'
vs/workbench/services/themes/common/themeService
'
;
import
{
IThemeService
}
from
'
vs/workbench/services/themes/common/themeService
'
;
import
{
ITextMateService
}
from
'
vs/editor/node/textMate/textMateService
'
;
export
interface
IEmbeddedLanguagesMap
{
export
interface
IEmbeddedLanguagesMap
{
[
scopeName
:
string
]:
string
;
[
scopeName
:
string
]:
string
;
...
@@ -82,7 +81,7 @@ export class TMScopeRegistry {
...
@@ -82,7 +81,7 @@ export class TMScopeRegistry {
}
}
public
register
(
scopeName
:
string
,
filePath
:
string
,
embeddedLanguages
?:
IEmbeddedLanguagesMap
):
void
{
public
register
(
scopeName
:
string
,
filePath
:
string
,
embeddedLanguages
?:
IEmbeddedLanguagesMap
):
void
{
this
.
_scopeNameToLanguageRegistration
[
scopeName
]
=
new
TMLanguageRegistration
(
this
,
scopeName
,
filePath
,
embeddedLanguages
);
this
.
_scopeNameToLanguageRegistration
[
scopeName
]
=
new
TMLanguageRegistration
(
scopeName
,
filePath
,
embeddedLanguages
);
}
}
public
getLanguageRegistration
(
scopeName
:
string
):
TMLanguageRegistration
{
public
getLanguageRegistration
(
scopeName
:
string
):
TMLanguageRegistration
{
...
@@ -112,11 +111,7 @@ export class TMLanguageRegistration {
...
@@ -112,11 +111,7 @@ export class TMLanguageRegistration {
readonly
grammarFilePath
:
string
;
readonly
grammarFilePath
:
string
;
readonly
embeddedLanguages
:
IEmbeddedLanguagesMap
;
readonly
embeddedLanguages
:
IEmbeddedLanguagesMap
;
private
readonly
_registry
:
TMScopeRegistry
;
constructor
(
scopeName
:
string
,
grammarFilePath
:
string
,
embeddedLanguages
:
IEmbeddedLanguagesMap
)
{
private
readonly
_embeddedLanguagesRegex
:
RegExp
;
constructor
(
registry
:
TMScopeRegistry
,
scopeName
:
string
,
grammarFilePath
:
string
,
embeddedLanguages
:
IEmbeddedLanguagesMap
)
{
this
.
_registry
=
registry
;
this
.
scopeName
=
scopeName
;
this
.
scopeName
=
scopeName
;
this
.
grammarFilePath
=
grammarFilePath
;
this
.
grammarFilePath
=
grammarFilePath
;
...
@@ -136,44 +131,6 @@ export class TMLanguageRegistration {
...
@@ -136,44 +131,6 @@ export class TMLanguageRegistration {
this
.
embeddedLanguages
[
scope
]
=
language
;
this
.
embeddedLanguages
[
scope
]
=
language
;
}
}
}
}
// create the regex
let
escapedScopes
=
Object
.
keys
(
this
.
embeddedLanguages
).
map
((
scopeName
)
=>
strings
.
escapeRegExpCharacters
(
scopeName
));
if
(
escapedScopes
.
length
===
0
)
{
// no scopes registered
this
.
_embeddedLanguagesRegex
=
null
;
}
else
{
escapedScopes
.
sort
();
escapedScopes
.
reverse
();
this
.
_embeddedLanguagesRegex
=
new
RegExp
(
`^((
${
escapedScopes
.
join
(
'
)|(
'
)}
))($|\\.)`
,
''
);
}
}
/**
* Given a produced TM scope, return the language that token describes or null if unknown.
* e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null
*/
public
scopeToLanguage
(
scope
:
string
):
string
{
if
(
!
scope
)
{
return
null
;
}
if
(
!
this
.
_embeddedLanguagesRegex
)
{
// no scopes registered
return
null
;
}
let
m
=
scope
.
match
(
this
.
_embeddedLanguagesRegex
);
if
(
!
m
)
{
// no scopes matched
return
null
;
}
let
language
=
this
.
embeddedLanguages
[
m
[
1
]]
||
null
;
if
(
!
language
)
{
return
null
;
}
this
.
_registry
.
onEncounteredLanguage
(
language
);
return
language
;
}
}
}
}
...
@@ -185,12 +142,15 @@ function createStyleSheet(): HTMLStyleElement {
...
@@ -185,12 +142,15 @@ function createStyleSheet(): HTMLStyleElement {
return
style
;
return
style
;
}
}
export
class
MainProcessTextMateSyntax
{
export
class
MainProcessTextMateSyntax
implements
ITextMateService
{
public
_serviceBrand
:
any
;
private
_grammarRegistry
:
Registry
;
private
_grammarRegistry
:
Registry
;
private
_modeService
:
IModeService
;
private
_modeService
:
IModeService
;
private
_themeService
:
IThemeService
;
private
_themeService
:
IThemeService
;
private
_scopeRegistry
:
TMScopeRegistry
;
private
_scopeRegistry
:
TMScopeRegistry
;
private
_injections
:
{
[
scopeName
:
string
]:
string
[];
};
private
_injections
:
{
[
scopeName
:
string
]:
string
[];
};
private
_languageToScope
:
Map
<
string
,
string
>
;
private
_styleElement
:
HTMLStyleElement
;
private
_styleElement
:
HTMLStyleElement
;
public
onDidEncounterLanguage
:
Event
<
string
>
;
public
onDidEncounterLanguage
:
Event
<
string
>
;
...
@@ -205,6 +165,7 @@ export class MainProcessTextMateSyntax {
...
@@ -205,6 +165,7 @@ export class MainProcessTextMateSyntax {
this
.
_scopeRegistry
=
new
TMScopeRegistry
();
this
.
_scopeRegistry
=
new
TMScopeRegistry
();
this
.
onDidEncounterLanguage
=
this
.
_scopeRegistry
.
onDidEncounterLanguage
;
this
.
onDidEncounterLanguage
=
this
.
_scopeRegistry
.
onDidEncounterLanguage
;
this
.
_injections
=
{};
this
.
_injections
=
{};
this
.
_languageToScope
=
new
Map
<
string
,
string
>
();
this
.
_grammarRegistry
=
new
Registry
({
this
.
_grammarRegistry
=
new
Registry
({
getFilePath
:
(
scopeName
:
string
)
=>
{
getFilePath
:
(
scopeName
:
string
)
=>
{
...
@@ -225,6 +186,13 @@ export class MainProcessTextMateSyntax {
...
@@ -225,6 +186,13 @@ export class MainProcessTextMateSyntax {
}
}
}
}
});
});
this
.
_modeService
.
onDidCreateMode
((
mode
)
=>
{
let
modeId
=
mode
.
getId
();
if
(
this
.
_languageToScope
[
modeId
])
{
this
.
registerDefinition
(
modeId
);
}
});
}
}
private
static
_generateCSS
(
colorMap
:
string
[]):
string
{
private
static
_generateCSS
(
colorMap
:
string
[]):
string
{
...
@@ -289,13 +257,7 @@ export class MainProcessTextMateSyntax {
...
@@ -289,13 +257,7 @@ export class MainProcessTextMateSyntax {
let
modeId
=
syntax
.
language
;
let
modeId
=
syntax
.
language
;
if
(
modeId
)
{
if
(
modeId
)
{
let
disposable
=
this
.
_modeService
.
onDidCreateMode
((
mode
)
=>
{
this
.
_languageToScope
[
modeId
]
=
syntax
.
scopeName
;
if
(
mode
.
getId
()
!==
modeId
)
{
return
;
}
this
.
registerDefinition
(
modeId
,
syntax
.
scopeName
);
disposable
.
dispose
();
});
}
}
}
}
...
@@ -313,28 +275,33 @@ export class MainProcessTextMateSyntax {
...
@@ -313,28 +275,33 @@ export class MainProcessTextMateSyntax {
return
result
;
return
result
;
}
}
private
registerDefinition
(
modeId
:
string
,
scopeName
:
string
):
void
{
public
createGrammar
(
modeId
:
string
):
TPromise
<
IGrammar
>
{
let
scopeName
=
this
.
_languageToScope
[
modeId
];
let
languageRegistration
=
this
.
_scopeRegistry
.
getLanguageRegistration
(
scopeName
);
let
languageRegistration
=
this
.
_scopeRegistry
.
getLanguageRegistration
(
scopeName
);
let
embeddedLanguages
=
this
.
_resolveEmbeddedLanguages
(
languageRegistration
.
embeddedLanguages
);
let
embeddedLanguages
=
this
.
_resolveEmbeddedLanguages
(
languageRegistration
.
embeddedLanguages
);
let
languageId
=
this
.
_modeService
.
getLanguageIdentifier
(
modeId
).
iid
;
let
languageId
=
this
.
_modeService
.
getLanguageIdentifier
(
modeId
).
iid
;
this
.
_grammarRegistry
.
loadGrammarWithEmbeddedLanguages
(
scopeName
,
languageId
,
embeddedLanguages
,
(
err
,
grammar
)
=>
{
return
new
TPromise
<
IGrammar
>
((
c
,
e
,
p
)
=>
{
if
(
err
)
{
this
.
_grammarRegistry
.
loadGrammarWithEmbeddedLanguages
(
scopeName
,
languageId
,
embeddedLanguages
,
(
err
,
grammar
)
=>
{
onUnexpectedError
(
err
);
if
(
err
)
{
return
;
return
e
(
err
);
}
}
c
(
grammar
);
let
languageRegistration
=
this
.
_scopeRegistry
.
getLanguageRegistration
(
scopeName
);
});
TokenizationRegistry
.
register
(
modeId
,
createTokenizationSupport
(
languageRegistration
,
modeId
,
grammar
));
});
});
}
}
private
registerDefinition
(
modeId
:
string
):
void
{
this
.
createGrammar
(
modeId
).
then
((
grammar
)
=>
{
TokenizationRegistry
.
register
(
modeId
,
createTokenizationSupport
(
grammar
));
},
onUnexpectedError
);
}
}
}
function
createTokenizationSupport
(
languageRegistration
:
TMLanguageRegistration
,
modeId
:
string
,
grammar
:
IGrammar
):
ITokenizationSupport
{
function
createTokenizationSupport
(
grammar
:
IGrammar
):
ITokenizationSupport
{
var
tokenizer
=
new
Tokenizer
(
languageRegistration
,
modeId
,
grammar
);
return
{
return
{
getInitialState
:
()
=>
new
TMState
(
null
),
getInitialState
:
()
=>
new
TMState
(
null
),
tokenize
:
(
line
,
state
,
offsetDelta
)
=>
tokenizer
.
tokenize
(
line
,
<
TMState
>
state
,
offsetDelta
)
,
tokenize
:
undefined
,
tokenize3
:
(
line
:
string
,
state
:
TMState
,
offsetDelta
:
number
)
=>
{
tokenize3
:
(
line
:
string
,
state
:
TMState
,
offsetDelta
:
number
)
=>
{
if
(
offsetDelta
!==
0
)
{
if
(
offsetDelta
!==
0
)
{
throw
new
Error
(
'
Unexpected: offsetDelta should be 0.
'
);
throw
new
Error
(
'
Unexpected: offsetDelta should be 0.
'
);
...
@@ -357,285 +324,3 @@ function createTokenizationSupport(languageRegistration: TMLanguageRegistration,
...
@@ -357,285 +324,3 @@ function createTokenizationSupport(languageRegistration: TMLanguageRegistration,
}
}
};
};
}
}
/**
* Data associated with a text mate scope as part of decoding.
*
* e.g.
* For a scope "punctuation.definition.string.end.html", the tokens are: punctuation, definition, string, end, html.
* Each of those tokens receive a unique numeric id, so instead of storing the token strings, we store the token ids.
* Ultimately this means we store something like [23, 21, 12, 13, 1], considering those numbers to be the ids of the tokens.
*/
export
class
TMScopeDecodeData
{
_tmScopeDecodeDataBrand
:
void
;
/**
* The original text mate scope.
*/
public
readonly
scope
:
string
;
/**
* The language this scope belongs to.
* e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null
*/
public
readonly
language
:
string
;
/**
* The token ids this scope consists of.
*/
public
readonly
tokenIds
:
number
[];
constructor
(
scope
:
string
,
language
:
string
,
tokenIds
:
number
[])
{
this
.
scope
=
scope
;
this
.
language
=
language
;
this
.
tokenIds
=
tokenIds
;
}
}
/**
* Data associated with a stack of text mate scopes as part of decoding.
*/
export
class
TMScopesDecodeData
{
_tmScopesDecodeDataBrand
:
void
;
/**
* The last scope in the stack.
*/
public
readonly
scope
:
string
;
/**
* The resolved tokens mask.
* tokens[i] === true ===> token with id i is present.
*/
public
readonly
tokensMask
:
boolean
[];
/**
* The resolved language.
*/
public
readonly
language
:
string
;
constructor
(
parent
:
TMScopesDecodeData
,
scope
:
TMScopeDecodeData
)
{
// 1) Inherit data from `parent`.
let
tokensMask
:
boolean
[];
let
language
:
string
;
if
(
parent
)
{
tokensMask
=
parent
.
tokensMask
.
slice
(
0
);
language
=
parent
.
language
;
}
else
{
tokensMask
=
[];
language
=
null
;
}
// 2) Overwrite with data from `scope`.
let
scopeTokenIds
=
scope
.
tokenIds
;
for
(
let
i
=
0
,
len
=
scopeTokenIds
.
length
;
i
<
len
;
i
++
)
{
tokensMask
[
scopeTokenIds
[
i
]]
=
true
;
}
if
(
scope
.
language
)
{
language
=
scope
.
language
;
}
this
.
scope
=
scope
.
scope
;
this
.
tokensMask
=
tokensMask
;
this
.
language
=
language
;
}
}
export
class
DecodeMap
{
_decodeMapBrand
:
void
;
private
lastAssignedTokenId
:
number
;
private
readonly
languageRegistration
:
TMLanguageRegistration
;
private
readonly
scopeToTokenIds
:
{
[
scope
:
string
]:
TMScopeDecodeData
;
};
private
readonly
tokenToTokenId
:
{
[
token
:
string
]:
number
;
};
private
readonly
tokenIdToToken
:
string
[];
prevTokenScopes
:
TMScopesDecodeData
[];
public
readonly
topLevelScope
:
TMScopesDecodeData
;
constructor
(
languageRegistration
:
TMLanguageRegistration
)
{
this
.
lastAssignedTokenId
=
0
;
this
.
languageRegistration
=
languageRegistration
;
this
.
scopeToTokenIds
=
Object
.
create
(
null
);
this
.
tokenToTokenId
=
Object
.
create
(
null
);
this
.
tokenIdToToken
=
[
null
];
this
.
prevTokenScopes
=
[];
this
.
topLevelScope
=
new
TMScopesDecodeData
(
null
,
new
TMScopeDecodeData
(
languageRegistration
.
scopeName
,
this
.
languageRegistration
.
scopeToLanguage
(
languageRegistration
.
scopeName
),
[]));
}
private
_getTokenId
(
token
:
string
):
number
{
let
tokenId
=
this
.
tokenToTokenId
[
token
];
if
(
!
tokenId
)
{
tokenId
=
(
++
this
.
lastAssignedTokenId
);
this
.
tokenToTokenId
[
token
]
=
tokenId
;
this
.
tokenIdToToken
[
tokenId
]
=
token
;
}
return
tokenId
;
}
public
decodeTMScope
(
scope
:
string
):
TMScopeDecodeData
{
let
result
=
this
.
scopeToTokenIds
[
scope
];
if
(
result
)
{
return
result
;
}
let
scopePieces
=
scope
.
split
(
'
.
'
);
let
tokenIds
:
number
[]
=
[];
for
(
let
i
=
0
;
i
<
scopePieces
.
length
;
i
++
)
{
tokenIds
[
i
]
=
this
.
_getTokenId
(
scopePieces
[
i
]);
}
result
=
new
TMScopeDecodeData
(
scope
,
this
.
languageRegistration
.
scopeToLanguage
(
scope
),
tokenIds
);
this
.
scopeToTokenIds
[
scope
]
=
result
;
return
result
;
}
public
getToken
(
tokenMap
:
boolean
[]):
string
{
let
result
=
''
;
let
isFirst
=
true
;
for
(
let
i
=
1
,
len
=
tokenMap
.
length
;
i
<
len
;
i
++
)
{
if
(
tokenMap
[
i
])
{
if
(
isFirst
)
{
isFirst
=
false
;
result
+=
this
.
tokenIdToToken
[
i
];
}
else
{
result
+=
'
.
'
;
result
+=
this
.
tokenIdToToken
[
i
];
}
}
}
return
result
;
}
}
function
depth
(
stackElement
:
StackElement
):
number
{
return
stackElement
.
depth
;
}
class
Tokenizer
{
private
_grammar
:
IGrammar
;
private
_modeId
:
string
;
private
_decodeMap
:
DecodeMap
;
private
_stackOverflowReported
:
boolean
;
constructor
(
languageRegistration
:
TMLanguageRegistration
,
modeId
:
string
,
grammar
:
IGrammar
)
{
this
.
_modeId
=
modeId
;
this
.
_grammar
=
grammar
;
this
.
_decodeMap
=
new
DecodeMap
(
languageRegistration
);
this
.
_stackOverflowReported
=
false
;
}
public
tokenize
(
line
:
string
,
state
:
TMState
,
offsetDelta
:
number
):
ILineTokens
{
// Do not attempt to tokenize if a line has over 20k
if
(
line
.
length
>=
20000
)
{
console
.
log
(
`Line (
${
line
.
substr
(
0
,
15
)}
...): longer than 20k characters, tokenization skipped.`
);
return
new
RawLineTokens
(
[
new
Token
(
offsetDelta
,
''
,
this
.
_modeId
)],
state
);
}
// or if the rule stack contains more than 100 rules (indicator of broken grammar that forgets to pop rules)
if
(
depth
(
state
.
ruleStack
)
>
100
)
{
if
(
!
this
.
_stackOverflowReported
)
{
// don't report again unless a good state has been reached again.
console
.
log
(
`Line (
${
line
.
substr
(
0
,
15
)}
...): stack deeper than 100: tokenization stopped.`
,
printRuleStack
(
state
.
ruleStack
));
this
.
_stackOverflowReported
=
true
;
}
return
new
RawLineTokens
(
[
new
Token
(
offsetDelta
,
''
,
this
.
_modeId
)],
state
);
}
this
.
_stackOverflowReported
=
false
;
let
textMateResult
=
this
.
_grammar
.
tokenizeLine
(
line
,
state
.
ruleStack
);
let
endState
:
TMState
;
// try to save an object if possible
if
(
state
.
ruleStack
!==
null
&&
textMateResult
.
ruleStack
.
equals
(
state
.
ruleStack
))
{
endState
=
state
;
}
else
{
endState
=
new
TMState
(
textMateResult
.
ruleStack
);
}
return
decodeTextMateTokens
(
this
.
_modeId
,
this
.
_decodeMap
,
line
,
offsetDelta
,
textMateResult
.
tokens
,
endState
);
}
}
// TODO: replace with something like ruleStack.toDebugString
function
printRuleStack
(
ruleStack
:
StackElement
):
string
[]
{
// TODO@tokenization
throw
new
Error
(
'
Not implemented
'
);
// let scopes = [];
// while (ruleStack) {
// scopes.push(ruleStack['_scopeName']);
// ruleStack = ruleStack._parent;
// }
// return scopes;
}
export
function
decodeTextMateTokens
(
topLevelModeId
:
string
,
decodeMap
:
DecodeMap
,
line
:
string
,
offsetDelta
:
number
,
resultTokens
:
IToken
[],
resultState
:
TMState
):
RawLineTokens
{
// Create the result early and fill in the tokens later
let
tokens
:
Token
[]
=
[];
let
lastTokenType
:
string
=
null
;
let
lastTokenLanguage
:
string
=
null
;
for
(
let
tokenIndex
=
0
,
len
=
resultTokens
.
length
;
tokenIndex
<
len
;
tokenIndex
++
)
{
let
token
=
resultTokens
[
tokenIndex
];
let
tokenStartIndex
=
token
.
startIndex
;
let
tokenType
=
''
;
let
tokenModeId
=
topLevelModeId
;
let
decodedToken
=
decodeTextMateToken
(
decodeMap
,
token
.
scopes
);
if
(
decodedToken
)
{
tokenType
=
decodeMap
.
getToken
(
decodedToken
.
tokensMask
);
if
(
decodedToken
.
language
)
{
tokenModeId
=
decodedToken
.
language
;
}
}
// do not push a new token if the type is exactly the same (also helps with ligatures)
if
(
tokenType
!==
lastTokenType
||
tokenModeId
!==
lastTokenLanguage
)
{
tokens
.
push
(
new
Token
(
tokenStartIndex
+
offsetDelta
,
tokenType
,
tokenModeId
));
lastTokenType
=
tokenType
;
lastTokenLanguage
=
tokenModeId
;
}
}
return
new
RawLineTokens
(
tokens
,
resultState
);
}
export
function
decodeTextMateToken
(
decodeMap
:
DecodeMap
,
scopes
:
string
[]):
TMScopesDecodeData
{
const
prevTokenScopes
=
decodeMap
.
prevTokenScopes
;
const
prevTokenScopesLength
=
prevTokenScopes
.
length
;
let
resultScopes
:
TMScopesDecodeData
[]
=
[
decodeMap
.
topLevelScope
];
let
lastResultScope
:
TMScopesDecodeData
=
decodeMap
.
topLevelScope
;
let
sameAsPrev
=
true
;
for
(
let
level
=
1
/* deliberately skip scope 0*/
,
scopesLength
=
scopes
.
length
;
level
<
scopesLength
;
level
++
)
{
let
scope
=
scopes
[
level
];
if
(
sameAsPrev
&&
level
<
prevTokenScopesLength
)
{
let
prevTokenScope
=
prevTokenScopes
[
level
];
if
(
prevTokenScope
.
scope
===
scope
)
{
// continue reusing the results of the previous token's computation
lastResultScope
=
prevTokenScope
;
resultScopes
[
level
]
=
lastResultScope
;
continue
;
}
}
sameAsPrev
=
false
;
lastResultScope
=
new
TMScopesDecodeData
(
lastResultScope
,
decodeMap
.
decodeTMScope
(
scope
));
resultScopes
[
level
]
=
lastResultScope
;
}
decodeMap
.
prevTokenScopes
=
resultScopes
;
return
lastResultScope
;
}
src/vs/editor/node/textMate/textMateService.ts
0 → 100644
浏览文件 @
467f42da
/*---------------------------------------------------------------------------------------------
* 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
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
Event
from
'
vs/base/common/event
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IGrammar
}
from
'
vscode-textmate
'
;
export
var
ITextMateService
=
createDecorator
<
ITextMateService
>
(
'
textMateService
'
);
export
interface
ITextMateService
{
_serviceBrand
:
any
;
onDidEncounterLanguage
:
Event
<
string
>
;
createGrammar
(
modeId
:
string
):
TPromise
<
IGrammar
>
;
}
src/vs/editor/test/node/textMate/TMSyntax.test.ts
浏览文件 @
467f42da
...
@@ -5,10 +5,9 @@
...
@@ -5,10 +5,9 @@
'
use strict
'
;
'
use strict
'
;
import
*
as
assert
from
'
assert
'
;
import
*
as
assert
from
'
assert
'
;
import
{
decodeTextMateToken
,
decodeTextMateTokens
,
DecodeMap
,
TMScopeRegistry
,
TMLanguageRegistration
}
from
'
vs/editor/node/textMate/TMSyntax
'
;
import
{
TMScopeRegistry
}
from
'
vs/editor/node/textMate/TMSyntax
'
;
suite
(
'
TextMate.TMScopeRegistry
'
,
()
=>
{
suite
(
'
TextMate.TMScopeRegistry
'
,
()
=>
{
test
(
'
getFilePath
'
,
()
=>
{
test
(
'
getFilePath
'
,
()
=>
{
let
registry
=
new
TMScopeRegistry
();
let
registry
=
new
TMScopeRegistry
();
...
@@ -30,967 +29,4 @@ suite('TextMate.TMScopeRegistry', () => {
...
@@ -30,967 +29,4 @@ suite('TextMate.TMScopeRegistry', () => {
assert
.
equal
(
registry
.
getFilePath
(
'
source.b
'
),
'
./grammar/b.tmLanguage
'
);
assert
.
equal
(
registry
.
getFilePath
(
'
source.b
'
),
'
./grammar/b.tmLanguage
'
);
assert
.
equal
(
registry
.
getFilePath
(
'
b
'
),
null
);
assert
.
equal
(
registry
.
getFilePath
(
'
b
'
),
null
);
});
});
test
(
'
scopeToLanguage
'
,
()
=>
{
let
registry
=
new
TMScopeRegistry
();
registry
.
register
(
'
source.html
'
,
'
./grammar/html.tmLanguage
'
,
{
'
source.html
'
:
'
html
'
,
'
source.c
'
:
'
c
'
,
'
source.css
'
:
'
css
'
,
'
source.js
'
:
'
javascript
'
,
'
source.python
'
:
'
python
'
,
'
source.smarty
'
:
'
smarty
'
,
'
source.baz
'
:
null
,
});
let
languageRegistration
=
registry
.
getLanguageRegistration
(
'
source.html
'
);
// exact matches
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.html
'
),
'
html
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.css
'
),
'
css
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.c
'
),
'
c
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.js
'
),
'
javascript
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.python
'
),
'
python
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.smarty
'
),
'
smarty
'
);
// prefix matches
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.css.embedded.html
'
),
'
css
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.js.embedded.html
'
),
'
javascript
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.python.embedded.html
'
),
'
python
'
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.smarty.embedded.html
'
),
'
smarty
'
);
// misses
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.ts
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.csss
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source.baz
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
asource.css
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
a.source.css
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
source_css
'
),
null
);
assert
.
equal
(
languageRegistration
.
scopeToLanguage
(
'
punctuation.definition.tag.html
'
),
null
);
});
});
});
suite
(
'
TextMate.decodeTextMateTokens
'
,
()
=>
{
test
(
'
embedded modes
'
,
()
=>
{
let
registry
=
new
TMScopeRegistry
();
registry
.
register
(
'
source.html
'
,
'
./grammar/html.tmLanguage
'
,
{
'
source.html
'
:
'
html
'
,
'
source.c
'
:
'
c
'
,
'
source.css
'
:
'
css
'
,
'
source.js
'
:
'
javascript
'
,
'
source.python
'
:
'
python
'
,
'
source.smarty
'
:
'
smarty
'
,
'
source.baz
'
:
null
,
});
let
languageRegistration
=
registry
.
getLanguageRegistration
(
'
source.html
'
);
let
decodeMap
=
new
DecodeMap
(
languageRegistration
);
let
actual
=
decodeTextMateTokens
(
'
html
'
,
decodeMap
,
'
text<style>body{}</style><script>var x=3;</script>text
'
,
0
,
[
{
startIndex
:
0
,
endIndex
:
4
,
scopes
:
[
'
source.html
'
]
},
{
startIndex
:
4
,
endIndex
:
11
,
scopes
:
[
'
source.html
'
,
'
style.tag.open
'
]
},
{
startIndex
:
11
,
endIndex
:
17
,
scopes
:
[
'
source.html
'
,
'
source.css
'
]
},
{
startIndex
:
17
,
endIndex
:
25
,
scopes
:
[
'
source.html
'
,
'
style.tag.close
'
]
},
{
startIndex
:
25
,
endIndex
:
33
,
scopes
:
[
'
source.html
'
,
'
script.tag.open
'
]
},
{
startIndex
:
33
,
endIndex
:
41
,
scopes
:
[
'
source.html
'
,
'
source.js
'
]
},
{
startIndex
:
41
,
endIndex
:
50
,
scopes
:
[
'
source.html
'
,
'
script.tag.close
'
]
},
{
startIndex
:
50
,
endIndex
:
54
,
scopes
:
[
'
source.html
'
]
},
],
null
);
assert
.
deepEqual
(
actual
.
tokens
,
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
4
,
language
:
'
html
'
,
type
:
'
style.tag.open
'
},
{
offset
:
11
,
language
:
'
css
'
,
type
:
'
source.css
'
},
{
offset
:
17
,
language
:
'
html
'
,
type
:
'
style.tag.close
'
},
{
offset
:
25
,
language
:
'
html
'
,
type
:
'
tag.open.script
'
},
{
offset
:
33
,
language
:
'
javascript
'
,
type
:
'
source.js
'
},
{
offset
:
41
,
language
:
'
html
'
,
type
:
'
tag.close.script
'
},
{
offset
:
50
,
language
:
'
html
'
,
type
:
''
},
]);
});
test
(
'
php and embedded
'
,
()
=>
{
var
tests
=
[
{
line
:
'
<div></div>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
4
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
entity.name.tag.html
'
]
},
{
startIndex
:
4
,
endIndex
:
5
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
punctuation.definition.tag.html
'
,
'
meta.scope.between-tag-pair.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
7
,
endIndex
:
10
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
entity.name.tag.html
'
]
},
{
startIndex
:
10
,
endIndex
:
11
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.entity.name
'
},
{
offset
:
4
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition.scope.between-tag-pair
'
},
{
offset
:
6
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition
'
},
{
offset
:
7
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.entity.name
'
},
{
offset
:
10
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition
'
}
]
},
{
line
:
'
<script>var x = 3;</script>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
7
,
scopes
:
[
'
text.html.php
'
,
'
entity.name.tag.script.html
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
8
,
endIndex
:
11
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
,
'
storage.type.js
'
]
},
{
startIndex
:
11
,
endIndex
:
12
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
]
},
{
startIndex
:
12
,
endIndex
:
13
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
,
'
meta.var-single-variable.expr.js
'
,
'
variable.other.readwrite.js
'
]
},
{
startIndex
:
13
,
endIndex
:
14
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
,
'
meta.var-single-variable.expr.js
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
,
'
keyword.operator.assignment.js
'
]
},
{
startIndex
:
15
,
endIndex
:
16
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
]
},
{
startIndex
:
16
,
endIndex
:
17
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
meta.var.expr.js
'
,
'
constant.numeric.decimal.js
'
]
},
{
startIndex
:
17
,
endIndex
:
18
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
punctuation.terminator.statement.js
'
]
},
{
startIndex
:
18
,
endIndex
:
20
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
20
,
endIndex
:
26
,
scopes
:
[
'
text.html.php
'
,
'
source.js.embedded.html
'
,
'
entity.name.tag.script.html
'
]
},
{
startIndex
:
26
,
endIndex
:
27
,
scopes
:
[
'
text.html.php
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
tag.html.punctuation.definition
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
tag.html.entity.name.script
'
},
{
offset
:
7
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.js.embedded
'
},
{
offset
:
8
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr.storage.type
'
},
{
offset
:
11
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr
'
},
{
offset
:
12
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr.var-single-variable.variable.other.readwrite
'
},
{
offset
:
13
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr.var-single-variable
'
},
{
offset
:
14
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr.keyword.operator.assignment
'
},
{
offset
:
15
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr
'
},
{
offset
:
16
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.js.embedded.var.expr.constant.numeric.decimal
'
},
{
offset
:
17
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.source.js.embedded.terminator.statement
'
},
{
offset
:
18
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.js.embedded
'
},
{
offset
:
20
,
language
:
'
javascript
'
,
type
:
'
tag.html.entity.name.script.source.js.embedded
'
},
{
offset
:
26
,
language
:
'
html
'
,
type
:
'
tag.html.punctuation.definition
'
}
]
},
{
line
:
'
<style>body{background-color:red;}</style>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
6
,
scopes
:
[
'
text.html.php
'
,
'
entity.name.tag.style.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
7
,
endIndex
:
11
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.selector.css
'
,
'
entity.name.tag.css
'
]
},
{
startIndex
:
11
,
endIndex
:
12
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
punctuation.section.property-list.begin.css
'
]
},
{
startIndex
:
12
,
endIndex
:
28
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-name.css
'
,
'
support.type.property-name.css
'
]
},
{
startIndex
:
28
,
endIndex
:
29
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
punctuation.separator.key-value.css
'
]
},
{
startIndex
:
29
,
endIndex
:
32
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
support.constant.color.w3c-standard-color-name.css
'
]
},
{
startIndex
:
32
,
endIndex
:
33
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
punctuation.terminator.rule.css
'
]
},
{
startIndex
:
33
,
endIndex
:
34
,
scopes
:
[
'
text.html.php
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
punctuation.section.property-list.end.css
'
]
},
{
startIndex
:
34
,
endIndex
:
36
,
scopes
:
[
'
text.html.php
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
36
,
endIndex
:
41
,
scopes
:
[
'
text.html.php
'
,
'
entity.name.tag.style.html
'
]
},
{
startIndex
:
41
,
endIndex
:
42
,
scopes
:
[
'
text.html.php
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
tag.html.punctuation.definition
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
tag.html.entity.name.style
'
},
{
offset
:
6
,
language
:
'
css
'
,
type
:
'
tag.html.punctuation.definition.source.embedded.css
'
},
{
offset
:
7
,
language
:
'
css
'
,
type
:
'
meta.tag.html.entity.name.source.embedded.css.selector
'
},
{
offset
:
11
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.embedded.css.property-list.section.begin
'
},
{
offset
:
12
,
language
:
'
css
'
,
type
:
'
meta.html.source.embedded.type.css.property-list.property-name.support
'
},
{
offset
:
28
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.embedded.css.property-list.property-value.separator.key-value
'
},
{
offset
:
29
,
language
:
'
css
'
,
type
:
'
meta.html.source.embedded.constant.css.property-list.support.property-value.color.w3c-standard-color-name
'
},
{
offset
:
32
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.embedded.terminator.css.property-list.property-value.rule
'
},
{
offset
:
33
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.embedded.css.property-list.section.end
'
},
{
offset
:
34
,
language
:
'
html
'
,
type
:
'
tag.html.punctuation.definition
'
},
{
offset
:
36
,
language
:
'
html
'
,
type
:
'
tag.html.entity.name.style
'
},
{
offset
:
41
,
language
:
'
html
'
,
type
:
'
tag.html.punctuation.definition
'
}
]
},
{
line
:
'
<?php
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
5
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
punctuation.section.embedded.metatag.begin.php
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.punctuation.embedded.section.begin.block.php.metatag
'
}
]
},
{
line
:
'
$query =
\
"SELECT col1, col2 FROM db; -- selects from sql
\
";
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
variable.other.php
'
,
'
punctuation.definition.variable.php
'
]
},
{
startIndex
:
1
,
endIndex
:
6
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
variable.other.php
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
keyword.operator.assignment.php
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
9
,
endIndex
:
10
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
punctuation.definition.string.begin.php
'
]
},
{
startIndex
:
10
,
endIndex
:
16
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
source.sql.embedded.php
'
,
'
keyword.other.DML.sql
'
]
},
{
startIndex
:
16
,
endIndex
:
28
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
source.sql.embedded.php
'
]
},
{
startIndex
:
28
,
endIndex
:
32
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
source.sql.embedded.php
'
,
'
keyword.other.DML.sql
'
]
},
{
startIndex
:
32
,
endIndex
:
37
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
source.sql.embedded.php
'
]
},
{
startIndex
:
37
,
endIndex
:
56
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
source.sql.embedded.php
'
,
'
comment.line.double-dash.sql
'
]
},
{
startIndex
:
56
,
endIndex
:
57
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.sql.php
'
,
'
punctuation.definition.string.end.php
'
]
},
{
startIndex
:
57
,
endIndex
:
58
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
punctuation.terminator.expression.php
'
]
},
{
startIndex
:
58
,
endIndex
:
60
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.variable.other.block.php
'
},
{
offset
:
1
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.variable.other.block.php
'
},
{
offset
:
6
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
7
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.keyword.operator.assignment.block.php
'
},
{
offset
:
8
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
9
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.begin.block.php.string.quoted.double.sql
'
},
{
offset
:
10
,
language
:
'
sql
'
,
type
:
'
meta.source.embedded.other.keyword.block.php.string.quoted.double.sql.DML
'
},
{
offset
:
16
,
language
:
'
sql
'
,
type
:
'
meta.source.embedded.block.php.string.quoted.double.sql
'
},
{
offset
:
28
,
language
:
'
sql
'
,
type
:
'
meta.source.embedded.other.keyword.block.php.string.quoted.double.sql.DML
'
},
{
offset
:
32
,
language
:
'
sql
'
,
type
:
'
meta.source.embedded.block.php.string.quoted.double.sql
'
},
{
offset
:
37
,
language
:
'
sql
'
,
type
:
'
meta.source.embedded.block.php.string.quoted.double.sql.comment.line.double-dash
'
},
{
offset
:
56
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.end.block.php.string.quoted.double.sql
'
},
{
offset
:
57
,
language
:
'
php
'
,
type
:
'
meta.punctuation.source.embedded.terminator.block.php.expression
'
},
{
offset
:
58
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
}
]
},
{
line
:
'
$a = <<<JSON {
\
"3
\
":
\
"4
\
" } JSON;
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
variable.other.php
'
,
'
punctuation.definition.variable.php
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
variable.other.php
'
]
},
{
startIndex
:
2
,
endIndex
:
3
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
3
,
endIndex
:
4
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
keyword.operator.assignment.php
'
]
},
{
startIndex
:
4
,
endIndex
:
5
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
keyword.operator.comparison.php
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
keyword.operator.comparison.php
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
keyword.operator.comparison.php
'
]
},
{
startIndex
:
8
,
endIndex
:
12
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
constant.other.php
'
]
},
{
startIndex
:
12
,
endIndex
:
13
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
13
,
endIndex
:
14
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
punctuation.section.scope.begin.php
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
15
,
endIndex
:
16
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.begin.php
'
]
},
{
startIndex
:
16
,
endIndex
:
17
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
meta.string-contents.quoted.double.php
'
]
},
{
startIndex
:
17
,
endIndex
:
18
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.end.php
'
]
},
{
startIndex
:
18
,
endIndex
:
20
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
20
,
endIndex
:
21
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.begin.php
'
]
},
{
startIndex
:
21
,
endIndex
:
22
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
meta.string-contents.quoted.double.php
'
]
},
{
startIndex
:
22
,
endIndex
:
23
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.end.php
'
]
},
{
startIndex
:
23
,
endIndex
:
24
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
24
,
endIndex
:
25
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
punctuation.section.scope.end.php
'
]
},
{
startIndex
:
25
,
endIndex
:
26
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
]
},
{
startIndex
:
26
,
endIndex
:
30
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
constant.other.php
'
]
},
{
startIndex
:
30
,
endIndex
:
31
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
source.php
'
,
'
punctuation.terminator.expression.php
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.variable.other.block.php
'
},
{
offset
:
1
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.variable.other.block.php
'
},
{
offset
:
2
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
3
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.keyword.operator.assignment.block.php
'
},
{
offset
:
4
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
5
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.keyword.operator.block.php.comparison
'
},
{
offset
:
8
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.other.constant.block.php
'
},
{
offset
:
12
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
13
,
language
:
'
php
'
,
type
:
'
meta.punctuation.scope.source.embedded.section.begin.block.php
'
},
{
offset
:
14
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
15
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.begin.block.php.string.quoted.double
'
},
{
offset
:
16
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php.string.quoted.double.string-contents
'
},
{
offset
:
17
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.end.block.php.string.quoted.double
'
},
{
offset
:
18
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
20
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.begin.block.php.string.quoted.double
'
},
{
offset
:
21
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php.string.quoted.double.string-contents
'
},
{
offset
:
22
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.end.block.php.string.quoted.double
'
},
{
offset
:
23
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
24
,
language
:
'
php
'
,
type
:
'
meta.punctuation.scope.source.embedded.section.end.block.php
'
},
{
offset
:
25
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.block.php
'
},
{
offset
:
26
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.other.constant.block.php
'
},
{
offset
:
30
,
language
:
'
php
'
,
type
:
'
meta.punctuation.source.embedded.terminator.block.php.expression
'
}
]
},
{
line
:
'
?>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
punctuation.section.embedded.metatag.end.php
'
,
'
source.php
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.block.php
'
,
'
punctuation.section.embedded.metatag.end.php
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
php
'
,
type
:
'
meta.punctuation.source.embedded.section.end.block.php.metatag
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.punctuation.embedded.section.end.block.php.metatag
'
}
]
},
{
line
:
'
<div><?=
\
"something
\
"?></div>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
1
,
endIndex
:
4
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
entity.name.tag.block.any.html
'
]
},
{
startIndex
:
4
,
endIndex
:
5
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
},
{
startIndex
:
5
,
endIndex
:
8
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
punctuation.section.embedded.begin.php
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.begin.php
'
]
},
{
startIndex
:
9
,
endIndex
:
18
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
meta.string-contents.quoted.double.php
'
]
},
{
startIndex
:
18
,
endIndex
:
19
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
source.php
'
,
'
string.quoted.double.php
'
,
'
punctuation.definition.string.end.php
'
]
},
{
startIndex
:
19
,
endIndex
:
20
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
punctuation.section.embedded.end.php
'
,
'
source.php
'
]
},
{
startIndex
:
20
,
endIndex
:
21
,
scopes
:
[
'
text.html.php
'
,
'
meta.embedded.line.php
'
,
'
punctuation.section.embedded.end.php
'
]
},
{
startIndex
:
21
,
endIndex
:
23
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
23
,
endIndex
:
26
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
entity.name.tag.block.any.html
'
]
},
{
startIndex
:
26
,
endIndex
:
27
,
scopes
:
[
'
text.html.php
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition.begin.block
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.entity.name.block
'
},
{
offset
:
4
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition.end.block
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
'
meta.punctuation.embedded.section.begin.php.line
'
},
{
offset
:
8
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.begin.php.string.quoted.double.line
'
},
{
offset
:
9
,
language
:
'
php
'
,
type
:
'
meta.source.embedded.php.string.quoted.double.line.string-contents
'
},
{
offset
:
18
,
language
:
'
php
'
,
type
:
'
meta.punctuation.definition.source.embedded.end.php.string.quoted.double.line
'
},
{
offset
:
19
,
language
:
'
php
'
,
type
:
'
meta.punctuation.source.embedded.section.end.php.line
'
},
{
offset
:
20
,
language
:
'
html
'
,
type
:
'
meta.punctuation.embedded.section.end.php.line
'
},
{
offset
:
21
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition.begin.block
'
},
{
offset
:
23
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.entity.name.block
'
},
{
offset
:
26
,
language
:
'
html
'
,
type
:
'
meta.tag.any.html.punctuation.definition.end.block
'
}
]
}
];
let
registry
=
new
TMScopeRegistry
();
registry
.
register
(
'
text.html.php
'
,
null
,
{
'
text.html
'
:
'
html
'
,
'
source.php
'
:
'
php
'
,
'
source.sql
'
:
'
sql
'
,
'
text.xml
'
:
'
xml
'
,
'
source.js
'
:
'
javascript
'
,
'
source.json
'
:
'
json
'
,
'
source.css
'
:
'
css
'
});
let
decodeMap
=
new
DecodeMap
(
registry
.
getLanguageRegistration
(
'
text.html.php
'
));
for
(
let
i
=
0
,
len
=
tests
.
length
;
i
<
len
;
i
++
)
{
let
test
=
tests
[
i
];
let
actual
=
decodeTextMateTokens
(
'
html
'
,
decodeMap
,
test
.
line
,
0
,
test
.
tmTokens
,
null
);
assert
.
deepEqual
(
actual
.
tokens
,
test
.
tokens
,
'
test
'
+
test
.
line
);
}
});
test
(
'
html and embedded
'
,
()
=>
{
var
tests
=
[
{
line
:
'
<!DOCTYPE HTML>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.sgml.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.sgml.html
'
,
'
meta.tag.sgml.doctype.html
'
]
},
{
startIndex
:
9
,
endIndex
:
14
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.sgml.html
'
,
'
meta.tag.sgml.doctype.html
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.sgml.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.sgml.html.punctuation.definition
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.sgml.html.doctype
'
},
{
offset
:
14
,
language
:
'
html
'
,
type
:
'
meta.tag.sgml.html.punctuation.definition
'
},
],
},
{
line
:
'
<!--
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
4
,
scopes
:
[
'
text.html.basic
'
,
'
comment.block.html
'
,
'
punctuation.definition.comment.html
'
]
},
{
startIndex
:
4
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
comment.block.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
html.punctuation.definition.comment.block
'
},
{
offset
:
4
,
language
:
'
html
'
,
type
:
'
html.comment.block
'
},
],
},
{
line
:
'
\t
Comments are overrated
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
24
,
scopes
:
[
'
text.html.basic
'
,
'
comment.block.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
html.comment.block
'
},
],
},
{
line
:
'
-->
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
3
,
scopes
:
[
'
text.html.basic
'
,
'
comment.block.html
'
,
'
punctuation.definition.comment.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
html.punctuation.definition.comment.block
'
},
],
},
{
line
:
'
<html>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
5
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
},
{
line
:
'
<head>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
5
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
},
{
line
:
'
\t
<title>HTML Sample</title>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
2
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.name.tag.inline.any.html
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
},
{
startIndex
:
8
,
endIndex
:
19
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
19
,
endIndex
:
21
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
21
,
endIndex
:
26
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.name.tag.inline.any.html
'
]
},
{
startIndex
:
26
,
endIndex
:
27
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.name.inline
'
},
{
offset
:
7
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end
'
},
{
offset
:
8
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
19
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin
'
},
{
offset
:
21
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.name.inline
'
},
{
offset
:
26
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end
'
},
],
},
{
line
:
'
\t
<meta http-equiv=
\
"X-UA-Compatible
\
" content=
\
"IE=edge
\
">
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
2
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.name.tag.inline.any.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
7
,
endIndex
:
17
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
17
,
endIndex
:
18
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
18
,
endIndex
:
19
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
19
,
endIndex
:
34
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
34
,
endIndex
:
35
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
35
,
endIndex
:
36
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
36
,
endIndex
:
43
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
43
,
endIndex
:
44
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
44
,
endIndex
:
45
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
45
,
endIndex
:
52
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
52
,
endIndex
:
53
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
53
,
endIndex
:
54
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.name.inline
'
},
{
offset
:
6
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
7
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.inline.other.attribute-name
'
},
{
offset
:
17
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
18
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin.string.quoted.double
'
},
{
offset
:
19
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline.string.quoted.double
'
},
{
offset
:
34
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end.string.quoted.double
'
},
{
offset
:
35
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
36
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.inline.other.attribute-name
'
},
{
offset
:
43
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
44
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin.string.quoted.double
'
},
{
offset
:
45
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline.string.quoted.double
'
},
{
offset
:
52
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end.string.quoted.double
'
},
{
offset
:
53
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end
'
},
],
},
{
line
:
'
\t
<style type=
\
"text/css
\
">
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
entity.name.tag.style.html
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
]
},
{
startIndex
:
8
,
endIndex
:
12
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
12
,
endIndex
:
13
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
]
},
{
startIndex
:
13
,
endIndex
:
14
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
14
,
endIndex
:
22
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
22
,
endIndex
:
23
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
23
,
endIndex
:
24
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
css
'
,
type
:
'
html.source.css.embedded
'
},
{
offset
:
1
,
language
:
'
css
'
,
type
:
'
tag.html.punctuation.definition.source.css.embedded
'
},
{
offset
:
2
,
language
:
'
css
'
,
type
:
'
tag.html.entity.name.source.css.embedded.style
'
},
{
offset
:
7
,
language
:
'
css
'
,
type
:
'
html.source.css.embedded
'
},
{
offset
:
8
,
language
:
'
css
'
,
type
:
'
html.entity.other.attribute-name.source.css.embedded
'
},
{
offset
:
12
,
language
:
'
css
'
,
type
:
'
html.source.css.embedded
'
},
{
offset
:
13
,
language
:
'
css
'
,
type
:
'
html.punctuation.definition.begin.string.quoted.double.source.css.embedded
'
},
{
offset
:
14
,
language
:
'
css
'
,
type
:
'
html.string.quoted.double.source.css.embedded
'
},
{
offset
:
22
,
language
:
'
css
'
,
type
:
'
html.punctuation.definition.end.string.quoted.double.source.css.embedded
'
},
{
offset
:
23
,
language
:
'
css
'
,
type
:
'
tag.html.punctuation.definition.source.css.embedded
'
},
],
},
{
line
:
'
\t\t
h1 {
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.selector.css
'
]
},
{
startIndex
:
2
,
endIndex
:
4
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.selector.css
'
,
'
entity.name.tag.css
'
]
},
{
startIndex
:
4
,
endIndex
:
5
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.selector.css
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
punctuation.section.property-list.begin.css
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.selector
'
},
{
offset
:
2
,
language
:
'
css
'
,
type
:
'
meta.tag.html.entity.name.source.css.embedded.selector
'
},
{
offset
:
4
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.selector
'
},
{
offset
:
5
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.begin.source.css.embedded.property-list.section
'
},
],
},
{
line
:
'
\t\t\t
color: #CCA3A3;
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
3
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
]
},
{
startIndex
:
3
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-name.css
'
,
'
support.type.property-name.css
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
punctuation.separator.key-value.css
'
]
},
{
startIndex
:
9
,
endIndex
:
10
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
]
},
{
startIndex
:
10
,
endIndex
:
11
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
constant.other.color.rgb-value.css
'
,
'
punctuation.definition.constant.css
'
]
},
{
startIndex
:
11
,
endIndex
:
17
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
constant.other.color.rgb-value.css
'
]
},
{
startIndex
:
17
,
endIndex
:
18
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
meta.property-value.css
'
,
'
punctuation.terminator.rule.css
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.property-list
'
},
{
offset
:
3
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.property-list.property-name.support.type
'
},
{
offset
:
8
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.css.embedded.property-list.property-value.separator.key-value
'
},
{
offset
:
9
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.property-list.property-value
'
},
{
offset
:
10
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.definition.other.source.css.embedded.property-list.property-value.constant.color.rgb-value
'
},
{
offset
:
11
,
language
:
'
css
'
,
type
:
'
meta.html.other.source.css.embedded.property-list.property-value.constant.color.rgb-value
'
},
{
offset
:
17
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.source.css.embedded.property-list.property-value.terminator.rule
'
},
],
},
{
line
:
'
\t\t
}
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
]
},
{
startIndex
:
2
,
endIndex
:
3
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
meta.property-list.css
'
,
'
punctuation.section.property-list.end.css
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
css
'
,
type
:
'
meta.html.source.css.embedded.property-list
'
},
{
offset
:
2
,
language
:
'
css
'
,
type
:
'
meta.html.punctuation.end.source.css.embedded.property-list.section
'
},
],
},
{
line
:
'
\t
</style>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
]
},
{
startIndex
:
1
,
endIndex
:
3
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
3
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
entity.name.tag.style.html
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
source.css.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
css
'
,
type
:
'
html.source.css.embedded
'
},
{
offset
:
1
,
language
:
'
css
'
,
type
:
'
tag.html.punctuation.definition.source.css.embedded
'
},
{
offset
:
3
,
language
:
'
css
'
,
type
:
'
tag.html.entity.name.source.css.embedded.style
'
},
{
offset
:
8
,
language
:
'
css
'
,
type
:
'
tag.html.punctuation.definition.source.css.embedded
'
},
],
},
{
line
:
'
\t
<script type=
\
"text/javascript
\
">
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
entity.name.tag.script.html
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
]
},
{
startIndex
:
9
,
endIndex
:
13
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
13
,
endIndex
:
14
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
15
,
endIndex
:
30
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
30
,
endIndex
:
31
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
31
,
endIndex
:
32
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.js
'
},
{
offset
:
1
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.embedded.js
'
},
{
offset
:
2
,
language
:
'
javascript
'
,
type
:
'
tag.html.entity.name.source.embedded.js.script
'
},
{
offset
:
8
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.js
'
},
{
offset
:
9
,
language
:
'
javascript
'
,
type
:
'
html.entity.other.attribute-name.source.embedded.js
'
},
{
offset
:
13
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.js
'
},
{
offset
:
14
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.definition.begin.string.quoted.double.source.embedded.js
'
},
{
offset
:
15
,
language
:
'
javascript
'
,
type
:
'
html.string.quoted.double.source.embedded.js
'
},
{
offset
:
30
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.definition.end.string.quoted.double.source.embedded.js
'
},
{
offset
:
31
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.embedded.js
'
},
],
},
{
line
:
'
\t\t
window.alert(
\
"I am a sample...
\
");
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
]
},
{
startIndex
:
2
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
support.variable.dom.js
'
]
},
{
startIndex
:
8
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.accessor.js
'
]
},
{
startIndex
:
9
,
endIndex
:
14
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
support.function.js
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
meta.brace.round.js
'
]
},
{
startIndex
:
15
,
endIndex
:
16
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.js
'
,
'
punctuation.definition.string.begin.js
'
]
},
{
startIndex
:
16
,
endIndex
:
32
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.js
'
]
},
{
startIndex
:
32
,
endIndex
:
33
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
string.quoted.double.js
'
,
'
punctuation.definition.string.end.js
'
]
},
{
startIndex
:
33
,
endIndex
:
34
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
meta.brace.round.js
'
]
},
{
startIndex
:
34
,
endIndex
:
35
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.terminator.statement.js
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.js
'
},
{
offset
:
2
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.support.js.variable.dom
'
},
{
offset
:
8
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.source.embedded.js.accessor
'
},
{
offset
:
9
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.support.js.function
'
},
{
offset
:
14
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.embedded.js.brace.round
'
},
{
offset
:
15
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.definition.begin.string.quoted.double.source.embedded.js
'
},
{
offset
:
16
,
language
:
'
javascript
'
,
type
:
'
html.string.quoted.double.source.embedded.js
'
},
{
offset
:
32
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.definition.end.string.quoted.double.source.embedded.js
'
},
{
offset
:
33
,
language
:
'
javascript
'
,
type
:
'
meta.html.source.embedded.js.brace.round
'
},
{
offset
:
34
,
language
:
'
javascript
'
,
type
:
'
html.punctuation.source.embedded.terminator.js.statement
'
},
],
},
{
line
:
'
\t
</script>After
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
]
},
{
startIndex
:
1
,
endIndex
:
3
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
3
,
endIndex
:
9
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
entity.name.tag.script.html
'
]
},
{
startIndex
:
9
,
endIndex
:
10
,
scopes
:
[
'
text.html.basic
'
,
'
source.js.embedded.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
10
,
endIndex
:
15
,
scopes
:
[
'
text.html.basic
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
javascript
'
,
type
:
'
html.source.embedded.js
'
},
{
offset
:
1
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.embedded.js
'
},
{
offset
:
3
,
language
:
'
javascript
'
,
type
:
'
tag.html.entity.name.source.embedded.js.script
'
},
{
offset
:
9
,
language
:
'
javascript
'
,
type
:
'
tag.html.punctuation.definition.source.embedded.js
'
},
{
offset
:
10
,
language
:
'
html
'
,
type
:
''
},
],
},
{
line
:
'
</head>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
6
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
},
{
line
:
'
<body>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
1
,
endIndex
:
5
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
5
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
},
{
line
:
'
\t
<h1>Heading No.1</h1>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
2
,
endIndex
:
4
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
entity.name.tag.block.any.html
'
]
},
{
startIndex
:
4
,
endIndex
:
5
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
},
{
startIndex
:
5
,
endIndex
:
17
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
17
,
endIndex
:
19
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
19
,
endIndex
:
21
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
entity.name.tag.block.any.html
'
]
},
{
startIndex
:
21
,
endIndex
:
22
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.block.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.block.any.begin
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.block.any.entity.name
'
},
{
offset
:
4
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.block.any.end
'
},
{
offset
:
5
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
17
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.block.any.begin
'
},
{
offset
:
19
,
language
:
'
html
'
,
type
:
'
meta.tag.html.block.any.entity.name
'
},
{
offset
:
21
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.block.any.end
'
},
],
},
{
line
:
'
\t
<input disabled type=
\
"button
\
" value=
\
"Click me
\
" />
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
text.html.basic
'
]
},
{
startIndex
:
1
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.begin.html
'
]
},
{
startIndex
:
2
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.name.tag.inline.any.html
'
]
},
{
startIndex
:
7
,
endIndex
:
8
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
8
,
endIndex
:
16
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
16
,
endIndex
:
17
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
17
,
endIndex
:
21
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
21
,
endIndex
:
22
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
22
,
endIndex
:
23
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
23
,
endIndex
:
29
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
29
,
endIndex
:
30
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
30
,
endIndex
:
31
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
31
,
endIndex
:
36
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
entity.other.attribute-name.html
'
]
},
{
startIndex
:
36
,
endIndex
:
37
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
]
},
{
startIndex
:
37
,
endIndex
:
38
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.begin.html
'
]
},
{
startIndex
:
38
,
endIndex
:
46
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
]
},
{
startIndex
:
46
,
endIndex
:
47
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
string.quoted.double.html
'
,
'
punctuation.definition.string.end.html
'
]
},
{
startIndex
:
47
,
endIndex
:
50
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.inline.any.html
'
,
'
punctuation.definition.tag.end.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
''
},
{
offset
:
1
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.name.inline
'
},
{
offset
:
7
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
8
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.inline.other.attribute-name
'
},
{
offset
:
16
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
17
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.inline.other.attribute-name
'
},
{
offset
:
21
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
22
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin.string.quoted.double
'
},
{
offset
:
23
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline.string.quoted.double
'
},
{
offset
:
29
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end.string.quoted.double
'
},
{
offset
:
30
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
31
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.entity.inline.other.attribute-name
'
},
{
offset
:
36
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline
'
},
{
offset
:
37
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.begin.string.quoted.double
'
},
{
offset
:
38
,
language
:
'
html
'
,
type
:
'
meta.tag.html.any.inline.string.quoted.double
'
},
{
offset
:
46
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end.string.quoted.double
'
},
{
offset
:
47
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.any.inline.end
'
},
],
},
{
line
:
'
</body>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
6
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
},
{
line
:
'
</html>
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
2
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
},
{
startIndex
:
2
,
endIndex
:
6
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
entity.name.tag.structure.any.html
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
text.html.basic
'
,
'
meta.tag.structure.any.html
'
,
'
punctuation.definition.tag.html
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
{
offset
:
2
,
language
:
'
html
'
,
type
:
'
meta.tag.html.structure.any.entity.name
'
},
{
offset
:
6
,
language
:
'
html
'
,
type
:
'
meta.tag.html.punctuation.definition.structure.any
'
},
],
}
];
let
registry
=
new
TMScopeRegistry
();
registry
.
register
(
'
text.html.basic
'
,
null
,
{
'
text.html.basic
'
:
'
html
'
,
'
source.css
'
:
'
css
'
,
'
source.js
'
:
'
javascript
'
,
'
source.python
'
:
'
python
'
,
'
source.smarty
'
:
'
smarty
'
});
let
decodeMap
=
new
DecodeMap
(
registry
.
getLanguageRegistration
(
'
text.html.basic
'
));
for
(
let
i
=
0
,
len
=
tests
.
length
;
i
<
len
;
i
++
)
{
let
test
=
tests
[
i
];
let
actual
=
decodeTextMateTokens
(
'
html
'
,
decodeMap
,
test
.
line
,
0
,
test
.
tmTokens
,
null
);
assert
.
deepEqual
(
actual
.
tokens
,
test
.
tokens
,
'
test
'
+
test
.
line
);
}
});
test
(
'
issue #14661: Comment shortcut in SCSS now using CSS style comments
'
,
()
=>
{
let
tests
=
[
{
line
:
'
class {
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
6
,
scopes
:
[
'
source.css.scss
'
]
},
{
startIndex
:
6
,
endIndex
:
7
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
punctuation.section.property-list.begin.bracket.curly.scss
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
scss
'
,
type
:
''
},
{
offset
:
6
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.punctuation.section.begin.bracket.curly
'
}
],
},
{
line
:
'
background: red;
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
4
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
]
},
{
startIndex
:
4
,
endIndex
:
14
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
meta.property-name.scss
'
,
'
support.type.property-name.scss
'
]
},
{
startIndex
:
14
,
endIndex
:
15
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
punctuation.separator.key-value.scss
'
]
},
{
startIndex
:
15
,
endIndex
:
16
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
]
},
{
startIndex
:
16
,
endIndex
:
19
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
meta.property-value.scss
'
,
'
support.constant.color.w3c-standard-color-name.scss
'
]
},
{
startIndex
:
19
,
endIndex
:
20
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
punctuation.terminator.rule.scss
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss
'
},
{
offset
:
4
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.property-name.support.type
'
},
{
offset
:
14
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.punctuation.separator.key-value
'
},
{
offset
:
15
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss
'
},
{
offset
:
16
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.support.property-value.constant.color.w3c-standard-color-name
'
},
{
offset
:
19
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.punctuation.terminator.rule
'
}
],
},
{
line
:
'
}
'
,
tmTokens
:
[
{
startIndex
:
0
,
endIndex
:
1
,
scopes
:
[
'
source.css.scss
'
,
'
meta.property-list.scss
'
,
'
punctuation.section.property-list.end.bracket.curly.scss
'
]
}
],
tokens
:
[
{
offset
:
0
,
language
:
'
scss
'
,
type
:
'
meta.property-list.scss.punctuation.section.bracket.curly.end
'
}
],
}
];
let
registry
=
new
TMScopeRegistry
();
registry
.
register
(
'
source.css.scss
'
,
'
./syntaxes/scss.json
'
);
let
decodeMap
=
new
DecodeMap
(
registry
.
getLanguageRegistration
(
'
source.css.scss
'
));
for
(
let
i
=
0
,
len
=
tests
.
length
;
i
<
len
;
i
++
)
{
let
test
=
tests
[
i
];
let
actual
=
decodeTextMateTokens
(
'
scss
'
,
decodeMap
,
test
.
line
,
0
,
test
.
tmTokens
,
null
);
assert
.
deepEqual
(
actual
.
tokens
,
test
.
tokens
,
'
test
'
+
test
.
line
);
}
});
});
suite
(
'
textMate
'
,
()
=>
{
function
assertRelaxedEqual
(
a
:
string
,
b
:
string
):
void
{
let
relaxString
=
(
str
:
string
)
=>
{
let
pieces
=
str
.
split
(
'
.
'
);
pieces
.
sort
();
return
pieces
.
join
(
'
.
'
);
};
assert
.
equal
(
relaxString
(
a
),
relaxString
(
b
));
}
function
slowDecodeTextMateToken
(
scopes
:
string
[]):
string
{
let
allTokensMap
:
{
[
token
:
string
]:
boolean
;
}
=
Object
.
create
(
null
);
for
(
let
i
=
1
;
i
<
scopes
.
length
;
i
++
)
{
let
pieces
=
scopes
[
i
].
split
(
'
.
'
);
for
(
let
j
=
0
;
j
<
pieces
.
length
;
j
++
)
{
allTokensMap
[
pieces
[
j
]]
=
true
;
}
}
return
Object
.
keys
(
allTokensMap
).
join
(
'
.
'
);
}
function
testOneDecodeTextMateToken
(
decodeMap
:
DecodeMap
,
scopes
:
string
[],
expected
:
string
):
void
{
let
actualDecodedToken
=
decodeTextMateToken
(
decodeMap
,
scopes
);
let
actual
=
actualDecodedToken
?
decodeMap
.
getToken
(
actualDecodedToken
.
tokensMask
)
:
''
;
assert
.
equal
(
actual
,
expected
);
// Sanity-check
let
alternativeExpected
=
slowDecodeTextMateToken
(
scopes
);
assertRelaxedEqual
(
actual
,
alternativeExpected
);
}
function
testDecodeTextMateToken
(
input
:
string
[][],
expected
:
string
[]):
void
{
let
decodeMap
=
new
DecodeMap
(
new
TMLanguageRegistration
(
null
,
null
,
null
,
null
));
for
(
let
i
=
0
;
i
<
input
.
length
;
i
++
)
{
testOneDecodeTextMateToken
(
decodeMap
,
input
[
i
],
expected
[
i
]);
}
}
test
(
'
decodeTextMateToken JSON regression
'
,
()
=>
{
let
input
=
[
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
support.type.property-name.json
'
,
'
punctuation.support.type.property-name.begin.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
support.type.property-name.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
support.type.property-name.json
'
,
'
punctuation.support.type.property-name.end.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.value.json
'
,
'
punctuation.separator.dictionary.key-value.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.value.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.value.json
'
,
'
string.quoted.double.json
'
,
'
punctuation.definition.string.begin.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.value.json
'
,
'
string.quoted.double.json
'
,
'
punctuation.definition.string.end.json
'
],
[
'
source.json
'
,
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.value.json
'
,
'
punctuation.separator.dictionary.pair.json
'
]
];
let
expected
=
[
'
meta.structure.dictionary.json
'
,
'
meta.structure.dictionary.json.support.type.property-name.punctuation.begin
'
,
'
meta.structure.dictionary.json.support.type.property-name
'
,
'
meta.structure.dictionary.json.support.type.property-name.punctuation.end
'
,
'
meta.structure.dictionary.json.punctuation.value.separator.key-value
'
,
'
meta.structure.dictionary.json.value
'
,
'
meta.structure.dictionary.json.punctuation.begin.value.string.quoted.double.definition
'
,
'
meta.structure.dictionary.json.punctuation.end.value.string.quoted.double.definition
'
,
'
meta.structure.dictionary.json.punctuation.value.separator.pair
'
];
testDecodeTextMateToken
(
input
,
expected
);
});
test
(
'
decodeTextMateToken
'
,
()
=>
{
let
input
=
getTestScopes
();
let
expected
=
[
'
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.parameter
'
,
'
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
'
,
'
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
'
,
'
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.entity.name.overload
'
,
'
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.curly
'
,
'
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.comparison
'
,
'
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.keyword.operator.arithmetic
'
,
'
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.arithmetic
'
,
'
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.square
'
,
'
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.square
'
,
'
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
'
];
testDecodeTextMateToken
(
input
,
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
'
]
];
}
src/vs/workbench/api/node/extHost.contribution.ts
浏览文件 @
467f42da
...
@@ -34,7 +34,6 @@ import { MainProcessExtensionService } from './mainThreadExtensionService';
...
@@ -34,7 +34,6 @@ import { MainProcessExtensionService } from './mainThreadExtensionService';
import
{
MainThreadFileSystemEventService
}
from
'
./mainThreadFileSystemEventService
'
;
import
{
MainThreadFileSystemEventService
}
from
'
./mainThreadFileSystemEventService
'
;
// --- other interested parties
// --- other interested parties
import
{
MainProcessTextMateSyntax
}
from
'
vs/editor/node/textMate/TMSyntax
'
;
import
{
MainProcessTextMateSnippet
}
from
'
vs/editor/node/textMate/TMSnippets
'
;
import
{
MainProcessTextMateSnippet
}
from
'
vs/editor/node/textMate/TMSnippets
'
;
import
{
JSONValidationExtensionPoint
}
from
'
vs/platform/jsonschemas/common/jsonValidationExtensionPoint
'
;
import
{
JSONValidationExtensionPoint
}
from
'
vs/platform/jsonschemas/common/jsonValidationExtensionPoint
'
;
import
{
LanguageConfigurationFileHandler
}
from
'
vs/editor/node/languageConfigurationExtensionPoint
'
;
import
{
LanguageConfigurationFileHandler
}
from
'
vs/editor/node/languageConfigurationExtensionPoint
'
;
...
@@ -87,10 +86,9 @@ export class ExtHostContribution implements IWorkbenchContribution {
...
@@ -87,10 +86,9 @@ export class ExtHostContribution implements IWorkbenchContribution {
col
.
finish
(
true
,
this
.
threadService
);
col
.
finish
(
true
,
this
.
threadService
);
// Other interested parties
// Other interested parties
let
tmSyntax
=
create
(
MainProcessTextMateSyntax
);
create
(
MainProcessTextMateSnippet
);
create
(
MainProcessTextMateSnippet
);
create
(
JSONValidationExtensionPoint
);
create
(
JSONValidationExtensionPoint
);
this
.
instantiationService
.
createInstance
(
LanguageConfigurationFileHandler
,
tmSyntax
);
this
.
instantiationService
.
createInstance
(
LanguageConfigurationFileHandler
);
create
(
MainThreadFileSystemEventService
);
create
(
MainThreadFileSystemEventService
);
create
(
SaveParticipant
);
create
(
SaveParticipant
);
}
}
...
...
src/vs/workbench/electron-browser/shell.ts
浏览文件 @
467f42da
...
@@ -91,6 +91,8 @@ import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
...
@@ -91,6 +91,8 @@ import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
import
{
ExtensionHostProcessWorker
}
from
'
vs/workbench/electron-browser/extensionHost
'
;
import
{
ExtensionHostProcessWorker
}
from
'
vs/workbench/electron-browser/extensionHost
'
;
import
{
ITimerService
}
from
'
vs/workbench/services/timer/common/timerService
'
;
import
{
ITimerService
}
from
'
vs/workbench/services/timer/common/timerService
'
;
import
{
remote
}
from
'
electron
'
;
import
{
remote
}
from
'
electron
'
;
import
{
ITextMateService
}
from
'
vs/editor/node/textMate/textMateService
'
;
import
{
MainProcessTextMateSyntax
}
from
'
vs/editor/node/textMate/TMSyntax
'
;
import
'
vs/platform/opener/browser/opener.contribution
'
;
import
'
vs/platform/opener/browser/opener.contribution
'
;
/**
/**
...
@@ -353,6 +355,8 @@ export class WorkbenchShell {
...
@@ -353,6 +355,8 @@ export class WorkbenchShell {
this
.
themeService
=
instantiationService
.
createInstance
(
ThemeService
);
this
.
themeService
=
instantiationService
.
createInstance
(
ThemeService
);
serviceCollection
.
set
(
IThemeService
,
this
.
themeService
);
serviceCollection
.
set
(
IThemeService
,
this
.
themeService
);
serviceCollection
.
set
(
ITextMateService
,
new
SyncDescriptor
(
MainProcessTextMateSyntax
));
serviceCollection
.
set
(
ISearchService
,
new
SyncDescriptor
(
SearchService
));
serviceCollection
.
set
(
ISearchService
,
new
SyncDescriptor
(
SearchService
));
serviceCollection
.
set
(
ICodeEditorService
,
new
SyncDescriptor
(
CodeEditorServiceImpl
));
serviceCollection
.
set
(
ICodeEditorService
,
new
SyncDescriptor
(
CodeEditorServiceImpl
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录