codemirror-textmate
Version:
Textmate based tokenization for CodeMirror
1,696 lines (1,695 loc) • 130 kB
JSON
{
"information_for_contributors": [
"This file has been converted from https://github.com/Microsoft/TypeScript-TmLanguage/blob/master/TypeScript.tmLanguage",
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
"version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/77d21fd8d3f750fcf67bdf7436f4e46565cba350",
"name": "TypeScript",
"scopeName": "source.ts",
"patterns": [
{
"include": "#directives"
},
{
"include": "#statements"
},
{
"name": "comment.line.shebang.ts",
"match": "\\A(#!).*(?=$)",
"captures": {
"1": {
"name": "punctuation.definition.comment.ts"
}
}
}
],
"repository": {
"statements": {
"patterns": [
{
"include": "#string"
},
{
"include": "#template"
},
{
"include": "#comment"
},
{
"include": "#declaration"
},
{
"include": "#control-statement"
},
{
"include": "#after-operator-block-as-object-literal"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-semicolon"
}
]
},
"declaration": {
"patterns": [
{
"include": "#decorator"
},
{
"include": "#var-expr"
},
{
"include": "#function-declaration"
},
{
"include": "#class-declaration"
},
{
"include": "#interface-declaration"
},
{
"include": "#enum-declaration"
},
{
"include": "#namespace-declaration"
},
{
"include": "#type-alias-declaration"
},
{
"include": "#import-equals-declaration"
},
{
"include": "#import-declaration"
},
{
"include": "#export-declaration"
}
]
},
"control-statement": {
"patterns": [
{
"include": "#switch-statement"
},
{
"include": "#for-loop"
},
{
"name": "keyword.control.trycatch.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.control.loop.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.control.flow.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.control.switch.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.control.conditional.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.control.with.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "keyword.other.debugger.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"name": "storage.modifier.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(declare)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
}
]
},
"expression": {
"patterns": [
{
"include": "#expressionWithoutIdentifiers"
},
{
"include": "#identifiers"
},
{
"include": "#expressionPunctuations"
}
]
},
"expressionWithoutIdentifiers": {
"patterns": [
{
"include": "#string"
},
{
"include": "#regex"
},
{
"include": "#template"
},
{
"include": "#comment"
},
{
"include": "#function-expression"
},
{
"include": "#class-expression"
},
{
"include": "#arrow-function"
},
{
"include": "#cast"
},
{
"include": "#ternary-expression"
},
{
"include": "#new-expr"
},
{
"include": "#object-literal"
},
{
"include": "#expression-operators"
},
{
"include": "#function-call"
},
{
"include": "#literal"
},
{
"include": "#support-objects"
},
{
"include": "#paren-expression"
}
]
},
"expressionPunctuations": {
"patterns": [
{
"include": "#punctuation-comma"
},
{
"include": "#punctuation-accessor"
}
]
},
"decorator": {
"name": "meta.decorator.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\@",
"beginCaptures": {
"0": {
"name": "punctuation.decorator.ts"
}
},
"end": "(?=\\s)",
"patterns": [
{
"include": "#expression"
}
]
},
"var-expr": {
"name": "meta.var.expr.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(var|let|const(?!\\s+enum\\b))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.type.ts"
}
},
"end": "(?=$|^|;|}|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#destructuring-variable"
},
{
"include": "#var-single-variable"
},
{
"include": "#variable-initializer"
},
{
"include": "#comment"
},
{
"begin": "(,)\\s*(?!\\S)",
"beginCaptures": {
"1": {
"name": "punctuation.separator.comma.ts"
}
},
"end": "(?<!,)((?==|;|}|(\\s+(of|in)\\s+)|^\\s*$))|((?<=\\S)(?=\\s*$))",
"patterns": [
{
"include": "#comment"
},
{
"include": "#destructuring-variable"
},
{
"include": "#var-single-variable"
},
{
"include": "#punctuation-comma"
}
]
},
{
"include": "#punctuation-comma"
}
]
},
"var-single-variable": {
"patterns": [
{
"name": "meta.var-single-variable.expr.ts",
"begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\([^\\(\\)]*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ts entity.name.function.ts"
}
},
"end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#var-single-variable-type-annotation"
}
]
},
{
"name": "meta.var-single-variable.expr.ts",
"begin": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ts variable.other.constant.ts"
}
},
"end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#var-single-variable-type-annotation"
}
]
},
{
"name": "meta.var-single-variable.expr.ts",
"begin": "([_$[:alpha:]][_$[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ts variable.other.readwrite.ts"
}
},
"end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#var-single-variable-type-annotation"
}
]
}
]
},
"var-single-variable-type-annotation": {
"patterns": [
{
"include": "#type-annotation"
},
{
"include": "#string"
},
{
"include": "#comment"
}
]
},
"destructuring-variable": {
"patterns": [
{
"name": "meta.object-binding-pattern-variable.ts",
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)",
"end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#object-binding-pattern"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
},
{
"name": "meta.array-binding-pattern-variable.ts",
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)",
"end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
"patterns": [
{
"include": "#array-binding-pattern"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
}
]
},
"object-binding-element": {
"patterns": [
{
"include": "#comment"
},
{
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))",
"end": "(?=,|\\})",
"patterns": [
{
"include": "#object-binding-element-propertyName"
},
{
"include": "#binding-element"
}
]
},
{
"include": "#object-binding-pattern"
},
{
"include": "#destructuring-variable-rest"
},
{
"include": "#variable-initializer"
},
{
"include": "#punctuation-comma"
}
]
},
"object-binding-element-propertyName": {
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))",
"end": "(:)",
"endCaptures": {
"0": {
"name": "punctuation.destructuring.ts"
}
},
"patterns": [
{
"include": "#string"
},
{
"include": "#array-literal"
},
{
"name": "variable.object.property.ts",
"match": "([_$[:alpha:]][_$[:alnum:]]*)"
}
]
},
"binding-element": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#object-binding-pattern"
},
{
"include": "#array-binding-pattern"
},
{
"include": "#destructuring-variable-rest"
},
{
"include": "#variable-initializer"
}
]
},
"destructuring-variable-rest": {
"match": "(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)",
"captures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "meta.definition.variable.ts variable.other.readwrite.ts"
}
}
},
"object-binding-pattern": {
"begin": "(?:(\\.\\.\\.)\\s*)?(\\{)",
"beginCaptures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"patterns": [
{
"include": "#object-binding-element"
}
]
},
"array-binding-pattern": {
"begin": "(?:(\\.\\.\\.)\\s*)?(\\[)",
"beginCaptures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"patterns": [
{
"include": "#binding-element"
},
{
"include": "#punctuation-comma"
}
]
},
"parameter-name": {
"patterns": [
{
"match": "\\s*\\b(public|protected|private|readonly)(?=\\s+(public|protected|private|readonly)\\s+)",
"captures": {
"1": {
"name": "storage.modifier.ts"
}
}
},
{
"match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\([^\\(\\)]*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "keyword.operator.rest.ts"
},
"3": {
"name": "entity.name.function.ts variable.language.this.ts"
},
"4": {
"name": "entity.name.function.ts"
},
"5": {
"name": "keyword.operator.optional.ts"
}
}
},
{
"match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)",
"captures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "keyword.operator.rest.ts"
},
"3": {
"name": "variable.parameter.ts variable.language.this.ts"
},
"4": {
"name": "variable.parameter.ts"
},
"5": {
"name": "keyword.operator.optional.ts"
}
}
}
]
},
"destructuring-parameter": {
"patterns": [
{
"name": "meta.parameter.object-binding-pattern.ts",
"begin": "(?<!=|:)\\s*(\\{)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"patterns": [
{
"include": "#parameter-object-binding-element"
}
]
},
{
"name": "meta.paramter.array-binding-pattern.ts",
"begin": "(?<!=|:)\\s*(\\[)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"patterns": [
{
"include": "#parameter-binding-element"
},
{
"include": "#punctuation-comma"
}
]
}
]
},
"parameter-object-binding-element": {
"patterns": [
{
"include": "#comment"
},
{
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(:))",
"end": "(?=,|\\})",
"patterns": [
{
"include": "#object-binding-element-propertyName"
},
{
"include": "#parameter-binding-element"
}
]
},
{
"include": "#parameter-object-binding-pattern"
},
{
"include": "#destructuring-parameter-rest"
},
{
"include": "#variable-initializer"
},
{
"include": "#punctuation-comma"
}
]
},
"parameter-binding-element": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#parameter-object-binding-pattern"
},
{
"include": "#parameter-array-binding-pattern"
},
{
"include": "#destructuring-parameter-rest"
},
{
"include": "#variable-initializer"
}
]
},
"destructuring-parameter-rest": {
"match": "(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)",
"captures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "variable.parameter.ts"
}
}
},
"parameter-object-binding-pattern": {
"begin": "(?:(\\.\\.\\.)\\s*)?(\\{)",
"beginCaptures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.object.ts"
}
},
"patterns": [
{
"include": "#parameter-object-binding-element"
}
]
},
"parameter-array-binding-pattern": {
"begin": "(?:(\\.\\.\\.)\\s*)?(\\[)",
"beginCaptures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.binding-pattern.array.ts"
}
},
"patterns": [
{
"include": "#parameter-binding-element"
},
{
"include": "#punctuation-comma"
}
]
},
"field-declaration": {
"name": "meta.field.declaration.ts",
"begin": "(?<!\\()(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s+)?(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\?\\s*)?(=|:))",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
}
},
"end": "(?=\\}|;|,|$|(^(?!(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\?\\s*)?(=|:))))|(?<=\\})",
"patterns": [
{
"include": "#variable-initializer"
},
{
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\?\\s*)?(=|:))",
"end": "(?=[};,=]|$|(^(?!(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\?\\s*)?(=|:))))|(?<=\\})",
"patterns": [
{
"include": "#type-annotation"
},
{
"include": "#string"
},
{
"include": "#array-literal"
},
{
"include": "#comment"
},
{
"name": "meta.definition.property.ts entity.name.function.ts",
"match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\([^\\(\\)]*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))"
},
{
"name": "meta.definition.property.ts variable.object.property.ts",
"match": "[_$[:alpha:]][_$[:alnum:]]*"
},
{
"name": "keyword.operator.optional.ts",
"match": "\\?"
}
]
}
]
},
"variable-initializer": {
"patterns": [
{
"begin": "(?<!=|!)(=)(?!=)(?=\\s*\\S)",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.ts"
}
},
"end": "(?=$|^|[,);}\\]])",
"patterns": [
{
"include": "#expression"
}
]
},
{
"begin": "(?<!=|!)(=)(?!=)",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.ts"
}
},
"end": "(?=[,);}\\]])|(?=^\\s*$)|(?<=\\S)(?<!=)(?=\\s*$)",
"patterns": [
{
"include": "#expression"
}
]
}
]
},
"function-declaration": {
"name": "meta.function.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(export)\\s+)?(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.async.ts"
},
"3": {
"name": "storage.type.function.ts"
},
"4": {
"name": "keyword.generator.asterisk.ts"
},
"5": {
"name": "meta.definition.function.ts entity.name.function.ts"
}
},
"end": "(?=$|^|;)|(?<=\\})",
"patterns": [
{
"include": "#function-body"
}
]
},
"function-expression": {
"name": "meta.function.expression.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(async)\\s+)?(function\\b)(?:\\s*(\\*))?(?:(?:\\s+|(?<=\\*))([_$[:alpha:]][_$[:alnum:]]*))?\\s*",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
},
"2": {
"name": "storage.type.function.ts"
},
"3": {
"name": "keyword.generator.asterisk.ts"
},
"4": {
"name": "meta.definition.function.ts entity.name.function.ts"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#function-body"
}
]
},
"function-body": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameters"
},
{
"include": "#function-parameters"
},
{
"include": "#return-type"
},
{
"include": "#decl-block"
}
]
},
"method-declaration": {
"patterns": [
{
"name": "meta.method.declaration.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)(?:(\\*)\\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*[\\(\\<])",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.modifier.async.ts"
},
"4": {
"name": "storage.type.property.ts"
},
"5": {
"name": "keyword.generator.asterisk.ts"
}
},
"end": "(?=\\}|;|,|$)|(?<=\\})",
"patterns": [
{
"include": "#method-declaration-name"
},
{
"include": "#function-body"
}
]
},
{
"name": "meta.method.declaration.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(public|private|protected)\\s+)?(?:\\b(abstract)\\s+)?(?:\\b(async)\\s+)?(?:(?:\\b(?:(new)|(constructor))\\b(?!:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.)))|(?:(\\*)\\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))?\\s*[\\(\\<]))",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.modifier.async.ts"
},
"4": {
"name": "keyword.operator.new.ts"
},
"5": {
"name": "storage.type.ts"
},
"6": {
"name": "keyword.generator.asterisk.ts"
}
},
"end": "(?=\\}|;|,|$)|(?<=\\})",
"patterns": [
{
"include": "#method-declaration-name"
},
{
"include": "#function-body"
}
]
}
]
},
"object-literal-method-declaration": {
"name": "meta.method.declaration.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*[\\(\\<])",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
},
"2": {
"name": "storage.type.property.ts"
},
"3": {
"name": "keyword.generator.asterisk.ts"
}
},
"end": "(?=\\}|;|,)|(?<=\\})",
"patterns": [
{
"include": "#method-declaration-name"
},
{
"include": "#function-body"
},
{
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(async)\\s+)?(?:\\b(get|set)\\s+)?(?:(\\*)\\s*)?(?=((([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??))\\s*[\\(\\<])",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
},
"2": {
"name": "storage.type.property.ts"
},
"3": {
"name": "keyword.generator.asterisk.ts"
}
},
"end": "(?=\\(|\\<)",
"patterns": [
{
"include": "#method-declaration-name"
}
]
}
]
},
"method-declaration-name": {
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)|(\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\]))\\s*(\\??)\\s*[\\(\\<])",
"end": "(?=\\(|\\<)",
"patterns": [
{
"include": "#string"
},
{
"include": "#array-literal"
},
{
"name": "meta.definition.method.ts entity.name.function.ts",
"match": "[_$[:alpha:]][_$[:alnum:]]*"
},
{
"name": "keyword.operator.optional.ts",
"match": "\\?"
}
]
},
"arrow-function": {
"patterns": [
{
"name": "meta.arrow.ts",
"match": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?==>)",
"captures": {
"1": {
"name": "storage.modifier.async.ts"
},
"2": {
"name": "variable.parameter.ts"
}
}
},
{
"name": "meta.arrow.ts",
"begin": "(?x) (?:\n (?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\n)? ((?<![})!\\]])\\s*\n (?=\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\[[^\\[\\]]*\\]))([^()]|(\\([^\\(\\)]*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
}
},
"end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameters"
},
{
"include": "#function-parameters"
},
{
"include": "#arrow-return-type"
}
]
},
{
"name": "meta.arrow.ts",
"begin": "=>",
"beginCaptures": {
"0": {
"name": "storage.type.function.arrow.ts"
}
},
"end": "(?<=\\}|\\S)(?<!=>)|((?!\\{)(?=\\S))",
"patterns": [
{
"include": "#decl-block"
},
{
"include": "#expression"
}
]
}
]
},
"indexer-declaration": {
"name": "meta.indexer.declaration.ts",
"begin": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s*)?(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:)",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "meta.brace.square.ts"
},
"3": {
"name": "variable.parameter.ts"
}
},
"end": "(\\])\\s*(\\?\\s*)?|$",
"endCaptures": {
"1": {
"name": "meta.brace.square.ts"
},
"2": {
"name": "keyword.operator.optional.ts"
}
},
"patterns": [
{
"include": "#type-annotation"
}
]
},
"indexer-mapped-type-declaration": {
"name": "meta.indexer.mappedtype.declaration.ts",
"begin": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(readonly)\\s*)?(\\[)\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s+(in)\\s+",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "meta.brace.square.ts"
},
"3": {
"name": "entity.name.type.ts"
},
"4": {
"name": "keyword.operator.expression.in.ts"
}
},
"end": "(\\])\\s*(\\?\\s*)?|$",
"endCaptures": {
"1": {
"name": "meta.brace.square.ts"
},
"2": {
"name": "keyword.operator.optional.ts"
}
},
"patterns": [
{
"include": "#type"
}
]
},
"function-parameters": {
"name": "meta.parameters.ts",
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.parameters.begin.ts"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.parameters.end.ts"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#decorator"
},
{
"include": "#destructuring-parameter"
},
{
"include": "#parameter-name"
},
{
"include": "#type-annotation"
},
{
"include": "#variable-initializer"
},
{
"name": "punctuation.separator.parameter.ts",
"match": ","
}
]
},
"class-declaration": {
"name": "meta.class.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(export)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[/*])",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.type.class.ts"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#class-declaration-or-expression-patterns"
}
]
},
"class-expression": {
"name": "meta.class.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(class)\\b(?=\\s+|[<{]|/[/*])",
"beginCaptures": {
"1": {
"name": "storage.type.class.ts"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#class-declaration-or-expression-patterns"
}
]
},
"class-declaration-or-expression-patterns": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#class-or-interface-heritage"
},
{
"match": "[_$[:alpha:]][_$[:alnum:]]*",
"captures": {
"0": {
"name": "entity.name.type.class.ts"
}
}
},
{
"include": "#type-parameters"
},
{
"include": "#class-or-interface-body"
}
]
},
"interface-declaration": {
"name": "meta.interface.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(export)\\s+)?\\b(?:(abstract)\\s+)?\\b(interface)\\b(?=\\s+|/[/*])",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.type.interface.ts"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#comment"
},
{
"include": "#class-or-interface-heritage"
},
{
"match": "[_$[:alpha:]][_$[:alnum:]]*",
"captures": {
"0": {
"name": "entity.name.type.interface.ts"
}
}
},
{
"include": "#type-parameters"
},
{
"include": "#class-or-interface-body"
}
]
},
"class-or-interface-heritage": {
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(extends|implements)\\b)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#class-or-interface-heritage"
},
{
"include": "#type-parameters"
},
{
"include": "#expressionWithoutIdentifiers"
},
{
"match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\s*)",
"captures": {
"1": {
"name": "entity.name.type.module.ts"
},
"2": {
"name": "punctuation.accessor.ts"
},
"3": {
"name": "punctuation.accessor.optional.ts"
}
}
},
{
"match": "([_$[:alpha:]][_$[:alnum:]]*)",
"captures": {
"1": {
"name": "entity.other.inherited-class.ts"
}
}
},
{
"include": "#expressionPunctuations"
}
]
},
"class-or-interface-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"patterns": [
{
"include": "#string"
},
{
"include": "#comment"
},
{
"include": "#decorator"
},
{
"include": "#method-declaration"
},
{
"include": "#indexer-declaration"
},
{
"include": "#field-declaration"
},
{
"include": "#type-annotation"
},
{
"include": "#variable-initializer"
},
{
"include": "#access-modifier"
},
{
"include": "#property-accessor"
},
{
"include": "#after-operator-block-as-object-literal"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
},
{
"include": "#punctuation-semicolon"
}
]
},
"access-modifier": {
"name": "storage.modifier.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(abstract|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
"property-accessor": {
"name": "storage.type.property.ts",
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(get|set)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
"enum-declaration": {
"name": "meta.enum.declaration.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([_$[:alpha:]][_$[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.type.enum.ts"
},
"4": {
"name": "entity.name.type.enum.ts"
}
},
"end": "(?<=\\})",
"patterns": [
{
"include": "#comment"
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"patterns": [
{
"include": "#comment"
},
{
"begin": "([_$[:alpha:]][_$[:alnum:]]*)",
"beginCaptures": {
"0": {
"name": "variable.other.enummember.ts"
}
},
"end": "(?=,|\\}|$)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
{
"begin": "(?=((\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])+\\])))",
"end": "(?=,|\\}|$)",
"patterns": [
{
"include": "#string"
},
{
"include": "#array-literal"
},
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
{
"include": "#punctuation-comma"
}
]
}
]
},
"namespace-declaration": {
"name": "meta.namespace.declaration.ts",
"begin": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(namespace|module)\\s+(?=[_$[:alpha:]\"'`]))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.type.namespace.ts"
}
},
"end": "(?<=\\})|(?=;|\\babstract\\b|\\basync\\b|\\bclass\\b|\\bconst\\b|\\bdeclare\\b|\\benum\\b|\\bexport\\b|\\bfunction\\b|\\bimport\\b|\\binterface\\b|\\blet\\b|\\bmodule\\b|\\bnamespace\\b|\\btype\\b|\\bvar\\b)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"name": "entity.name.type.module.ts",
"match": "([_$[:alpha:]][_$[:alnum:]]*)"
},
{
"include": "#punctuation-accessor"
},
{
"include": "#decl-block"
}
]
},
"type-alias-declaration": {
"name": "meta.type.declaration.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(type)\\b\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.type.type.ts"
},
"3": {
"name": "entity.name.type.alias.ts"
}
},
"end": "(?=[};]|\\babstract\\b|\\basync\\b|\\bclass\\b|\\bconst\\b|\\bdeclare\\b|\\benum\\b|\\bexport\\b|\\bfunction\\b|\\bimport\\b|\\binterface\\b|\\blet\\b|\\bmodule\\b|\\bnamespace\\b|\\btype\\b|\\bvar\\b)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameters"
},
{
"include": "#type"
},
{
"match": "(=)\\s*",
"captures": {
"1": {
"name": "keyword.operator.assignment.ts"
}
}
}
]
},
"import-equals-declaration": {
"patterns": [
{
"name": "meta.import-equals.external.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(import)\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(require)\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.import.ts"
},
"3": {
"name": "variable.other.readwrite.alias.ts"
},
"4": {
"name": "keyword.operator.assignment.ts"
},
"5": {
"name": "keyword.control.require.ts"
},
"6": {
"name": "meta.brace.round.ts"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "meta.brace.round.ts"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
}
]
},
{
"name": "meta.import-equals.internal.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(import)\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*(=)\\s*(?!require\\b)",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.import.ts"
},
"3": {
"name": "variable.other.readwrite.alias.ts"
},
"4": {
"name": "keyword.operator.assignment.ts"
}
},
"end": "(?=;|$|^)",
"patterns": [
{
"include": "#comment"
},
{
"match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))",
"captures": {
"1": {
"name": "entity.name.type.module.ts"
},
"2": {
"name": "punctuation.accessor.ts"
},
"3": {
"name": "punctuation.accessor.optional.ts"
}
}
},
{
"name": "variable.other.readwrite.ts",
"match": "([_$[:alpha:]][_$[:alnum:]]*)"
}
]
}
]
},
"import-declaration": {
"name": "meta.import.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?\\b(import)(?!\\s*[:\\(])(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.import.ts"
}
},
"end": "(?=;|$|^)",
"patterns": [
{
"include": "#import-export-declaration"
}
]
},
"export-declaration": {
"patterns": [
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)\\s+(as)\\s+(namespace)\\s+([_$[:alpha:]][_$[:alnum:]]*)",
"captures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.as.ts"
},
"3": {
"name": "storage.type.namespace.ts"
},
"4": {
"name": "entity.name.type.module.ts"
}
}
},
{
"name": "meta.export.default.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:(?:\\s*(=))|(?:\\s+(default)(?=\\s+)))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.operator.assignment.ts"
},
"3": {
"name": "keyword.control.default.ts"
}
},
"end": "(?=;|$|\\babstract\\b|\\basync\\b|\\bclass\\b|\\bconst\\b|\\bdeclare\\b|\\benum\\b|\\bexport\\b|\\bfunction\\b|\\bimport\\b|\\binterface\\b|\\blet\\b|\\bmodule\\b|\\bnamespace\\b|\\btype\\b|\\bvar\\b)",
"patterns": [
{
"include": "#expression"
}
]
},
{
"name": "meta.export.ts",
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?!\\s*:)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"0": {
"name": "keyword.control.export.ts"
}
},
"end": "(?=;|$|\\babstract\\b|\\basync\\b|\\bclass\\b|\\bconst\\b|\\bdeclare\\b|\\benum\\b|\\bexport\\b|\\bfunction\\b|\\bimport\\b|\\binterface\\b|\\blet\\b|\\bmodule\\b|\\bnamespace\\b|\\btype\\b|\\bvar\\b)",
"patterns": [
{
"include": "#import-export-declaration"
}
]
}
]
},
"import-export-declaration": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#import-export-block"
},
{
"name": "keyword.control.from.ts",
"match": "\\bfrom\\b"
},
{
"include": "#import-export-clause"
}
]
},
"import-export-block": {
"name": "meta.block.ts",
"begin": "\\{",
"beginCaptures": {