tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,519 lines • 245 kB
JSON
{
"displayName": "TypeScript",
"name": "typescript",
"patterns": [
{
"include": "#directives"
},
{
"include": "#statements"
},
{
"include": "#shebang"
}
],
"repository": {
"access-modifier": {
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(abstract|declare|override|public|protected|private|readonly|static)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "storage.modifier.ts"
},
"after-operator-block-as-object-literal": {
"begin": "(?<!\\+\\+|--)(?<=[:=(,\\[?+!>]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"name": "meta.objectliteral.ts",
"patterns": [
{
"include": "#object-member"
}
]
},
"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"
}
]
},
"array-binding-pattern-const": {
"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-const"
},
{
"include": "#punctuation-comma"
}
]
},
"array-literal": {
"begin": "\\s*(\\[)",
"beginCaptures": {
"1": {
"name": "meta.brace.square.ts"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "meta.brace.square.ts"
}
},
"name": "meta.array.literal.ts",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"arrow-function": {
"patterns": [
{
"captures": {
"1": {
"name": "storage.modifier.async.ts"
},
"2": {
"name": "variable.parameter.ts"
}
},
"match": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync)\\s+)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?==>)",
"name": "meta.arrow.ts"
},
{
"begin": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(\\basync))?((?<![})!\\]])\\s*(?=((<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([)]\\s*:)|((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)))|((<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\)(\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)?\\s*=>)))",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
}
},
"end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))",
"name": "meta.arrow.ts",
"patterns": [
{
"include": "#comment"
},
{
"include": "#type-parameters"
},
{
"include": "#function-parameters"
},
{
"include": "#arrow-return-type"
},
{
"include": "#possibly-arrow-return-type"
}
]
},
{
"begin": "=>",
"beginCaptures": {
"0": {
"name": "storage.type.function.arrow.ts"
}
},
"end": "((?<=\\}|\\S)(?<!=>)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])",
"name": "meta.arrow.ts",
"patterns": [
{
"include": "#single-line-comment-consuming-line-ending"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
}
]
}
]
},
"arrow-return-type": {
"begin": "(?<=\\))\\s*(:)",
"beginCaptures": {
"1": {
"name": "keyword.operator.type.annotation.ts"
}
},
"end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|const|import|enum|namespace|module|type|abstract|declare)\\s+))",
"name": "meta.return.type.arrow.ts",
"patterns": [
{
"include": "#arrow-return-type-body"
}
]
},
"arrow-return-type-body": {
"patterns": [
{
"begin": "(?<=[:])(?=\\s*\\{)",
"end": "(?<=\\})",
"patterns": [
{
"include": "#type-object"
}
]
},
{
"include": "#type-predicate-operator"
},
{
"include": "#type"
}
]
},
"async-modifier": {
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(async)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "storage.modifier.async.ts"
},
"binding-element": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#numeric-literal"
},
{
"include": "#regex"
},
{
"include": "#object-binding-pattern"
},
{
"include": "#array-binding-pattern"
},
{
"include": "#destructuring-variable-rest"
},
{
"include": "#variable-initializer"
}
]
},
"binding-element-const": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#numeric-literal"
},
{
"include": "#regex"
},
{
"include": "#object-binding-pattern-const"
},
{
"include": "#array-binding-pattern-const"
},
{
"include": "#destructuring-variable-rest-const"
},
{
"include": "#variable-initializer"
}
]
},
"boolean-literal": {
"patterns": [
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))true(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "constant.language.boolean.true.ts"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))false(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "constant.language.boolean.false.ts"
}
]
},
"brackets": {
"patterns": [
{
"begin": "{",
"end": "}|(?=\\*/)",
"patterns": [
{
"include": "#brackets"
}
]
},
{
"begin": "\\[",
"end": "\\]|(?=\\*/)",
"patterns": [
{
"include": "#brackets"
}
]
}
]
},
"cast": {
"patterns": [
{
"captures": {
"1": {
"name": "meta.brace.angle.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "meta.brace.angle.ts"
}
},
"match": "\\s*(<)\\s*(const)\\s*(>)",
"name": "cast.expr.ts"
},
{
"begin": "(?:(?<!\\+\\+|--)(?<=^return|[^\\._$[:alnum:]]return|^throw|[^\\._$[:alnum:]]throw|^yield|[^\\._$[:alnum:]]yield|^await|[^\\._$[:alnum:]]await|^default|[^\\._$[:alnum:]]default|[=(,:>*?\\&\\|\\^]|[^_$[:alnum:]](?:\\+\\+|\\-\\-)|[^\\+]\\+|[^\\-]\\-))\\s*(<)(?!<?\\=)(?!\\s*$)",
"beginCaptures": {
"1": {
"name": "meta.brace.angle.ts"
}
},
"end": "(\\>)",
"endCaptures": {
"1": {
"name": "meta.brace.angle.ts"
}
},
"name": "cast.expr.ts",
"patterns": [
{
"include": "#type"
}
]
},
{
"begin": "(?:(?<=^))\\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\\s*>)",
"beginCaptures": {
"1": {
"name": "meta.brace.angle.ts"
}
},
"end": "(\\>)",
"endCaptures": {
"1": {
"name": "meta.brace.angle.ts"
}
},
"name": "cast.expr.ts",
"patterns": [
{
"include": "#type"
}
]
}
]
},
"class-declaration": {
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?\\b(?:(abstract)\\s+)?\\b(class)\\b(?=\\s+|/[/*])",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.modifier.ts"
},
"4": {
"name": "storage.type.class.ts"
}
},
"end": "(?<=\\})",
"name": "meta.class.ts",
"patterns": [
{
"include": "#class-declaration-or-expression-patterns"
}
]
},
"class-declaration-or-expression-patterns": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#class-or-interface-heritage"
},
{
"captures": {
"0": {
"name": "entity.name.type.class.ts"
}
},
"match": "[_$[:alpha:]][_$[:alnum:]]*"
},
{
"include": "#type-parameters"
},
{
"include": "#class-or-interface-body"
}
]
},
"class-expression": {
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(abstract)\\s+)?(class)\\b(?=\\s+|[<{]|\\/[\\/*])",
"beginCaptures": {
"1": {
"name": "storage.modifier.ts"
},
"2": {
"name": "storage.type.class.ts"
}
},
"end": "(?<=\\})",
"name": "meta.class.ts",
"patterns": [
{
"include": "#class-declaration-or-expression-patterns"
}
]
},
"class-or-interface-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#decorator"
},
{
"begin": "(?<=:)\\s*",
"end": "(?=\\s|[;),}\\]:\\-\\+]|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))",
"patterns": [
{
"include": "#expression"
}
]
},
{
"include": "#method-declaration"
},
{
"include": "#indexer-declaration"
},
{
"include": "#field-declaration"
},
{
"include": "#string"
},
{
"include": "#type-annotation"
},
{
"include": "#variable-initializer"
},
{
"include": "#access-modifier"
},
{
"include": "#property-accessor"
},
{
"include": "#async-modifier"
},
{
"include": "#after-operator-block-as-object-literal"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
},
{
"include": "#punctuation-semicolon"
}
]
},
"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"
},
{
"captures": {
"1": {
"name": "entity.name.type.module.ts"
},
"2": {
"name": "punctuation.accessor.ts"
},
"3": {
"name": "punctuation.accessor.optional.ts"
}
},
"match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))(?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)*\\s*)"
},
{
"captures": {
"1": {
"name": "entity.other.inherited-class.ts"
}
},
"match": "([_$[:alpha:]][_$[:alnum:]]*)"
},
{
"include": "#expressionPunctuations"
}
]
},
"comment": {
"patterns": [
{
"begin": "/\\*\\*(?!/)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.ts"
}
},
"end": "\\*/",
"endCaptures": {
"0": {
"name": "punctuation.definition.comment.ts"
}
},
"name": "comment.block.documentation.ts",
"patterns": [
{
"include": "#docblock"
}
]
},
{
"begin": "(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.ts"
},
"2": {
"name": "storage.type.internaldeclaration.ts"
},
"3": {
"name": "punctuation.decorator.internaldeclaration.ts"
}
},
"end": "\\*/",
"endCaptures": {
"0": {
"name": "punctuation.definition.comment.ts"
}
},
"name": "comment.block.ts"
},
{
"begin": "(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.ts"
},
"2": {
"name": "comment.line.double-slash.ts"
},
"3": {
"name": "punctuation.definition.comment.ts"
},
"4": {
"name": "storage.type.internaldeclaration.ts"
},
"5": {
"name": "punctuation.decorator.internaldeclaration.ts"
}
},
"contentName": "comment.line.double-slash.ts",
"end": "(?=$)"
}
]
},
"control-statement": {
"patterns": [
{
"include": "#switch-statement"
},
{
"include": "#for-loop"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(catch|finally|throw|try)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.trycatch.ts"
},
{
"captures": {
"1": {
"name": "keyword.control.loop.ts"
},
"2": {
"name": "entity.name.label.ts"
}
},
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|goto)\\s+([_$[:alpha:]][_$[:alnum:]]*)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(break|continue|do|goto|while)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.loop.ts"
},
{
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"0": {
"name": "keyword.control.flow.ts"
}
},
"end": "(?=[;}]|$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))",
"patterns": [
{
"include": "#expression"
}
]
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(case|default|switch)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.switch.ts"
},
{
"include": "#if-statement"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.conditional.ts"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(with)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.with.ts"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(package)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.ts"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(debugger)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.other.debugger.ts"
}
]
},
"decl-block": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ts"
}
},
"name": "meta.block.ts",
"patterns": [
{
"include": "#statements"
}
]
},
"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"
},
{
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(declare|export)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "storage.modifier.ts"
}
]
},
"decorator": {
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\@",
"beginCaptures": {
"0": {
"name": "punctuation.decorator.ts"
}
},
"end": "(?=\\s)",
"name": "meta.decorator.ts",
"patterns": [
{
"include": "#expression"
}
]
},
"destructuring-const": {
"patterns": [
{
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)",
"end": "(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))",
"name": "meta.object-binding-pattern-variable.ts",
"patterns": [
{
"include": "#object-binding-pattern-const"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
},
{
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)",
"end": "(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))",
"name": "meta.array-binding-pattern-variable.ts",
"patterns": [
{
"include": "#array-binding-pattern-const"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
}
]
},
"destructuring-parameter": {
"patterns": [
{
"begin": "(?<!=|:)\\s*(?:(\\.\\.\\.)\\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"
}
},
"name": "meta.parameter.object-binding-pattern.ts",
"patterns": [
{
"include": "#parameter-object-binding-element"
}
]
},
{
"begin": "(?<!=|:)\\s*(?:(\\.\\.\\.)\\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"
}
},
"name": "meta.paramter.array-binding-pattern.ts",
"patterns": [
{
"include": "#parameter-binding-element"
},
{
"include": "#punctuation-comma"
}
]
}
]
},
"destructuring-parameter-rest": {
"captures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "variable.parameter.ts"
}
},
"match": "(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)"
},
"destructuring-variable": {
"patterns": [
{
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\{)",
"end": "(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))",
"name": "meta.object-binding-pattern-variable.ts",
"patterns": [
{
"include": "#object-binding-pattern"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
},
{
"begin": "(?<!=|:|^of|[^\\._$[:alnum:]]of|^in|[^\\._$[:alnum:]]in)\\s*(?=\\[)",
"end": "(?=$|^|[;,=}]|((?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(of|in)\\s+))",
"name": "meta.array-binding-pattern-variable.ts",
"patterns": [
{
"include": "#array-binding-pattern"
},
{
"include": "#type-annotation"
},
{
"include": "#comment"
}
]
}
]
},
"destructuring-variable-rest": {
"captures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "meta.definition.variable.ts variable.other.readwrite.ts"
}
},
"match": "(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)"
},
"destructuring-variable-rest-const": {
"captures": {
"1": {
"name": "keyword.operator.rest.ts"
},
"2": {
"name": "meta.definition.variable.ts variable.other.constant.ts"
}
},
"match": "(?:(\\.\\.\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)"
},
"directives": {
"begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name|resolution-mode)\\s*=\\s*((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/>\\s*$)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.ts"
}
},
"end": "(?=$)",
"name": "comment.line.triple-slash.directive.ts",
"patterns": [
{
"begin": "(<)(reference|amd-dependency|amd-module)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.directive.ts"
},
"2": {
"name": "entity.name.tag.directive.ts"
}
},
"end": "/>",
"endCaptures": {
"0": {
"name": "punctuation.definition.tag.directive.ts"
}
},
"name": "meta.tag.ts",
"patterns": [
{
"match": "path|types|no-default-lib|lib|name|resolution-mode",
"name": "entity.other.attribute-name.directive.ts"
},
{
"match": "=",
"name": "keyword.operator.assignment.ts"
},
{
"include": "#string"
}
]
}
]
},
"docblock": {
"patterns": [
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "constant.language.access-type.jsdoc"
}
},
"match": "((@)(?:access|api))\\s+(private|protected|public)\\b"
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "entity.name.type.instance.jsdoc"
},
"4": {
"name": "punctuation.definition.bracket.angle.begin.jsdoc"
},
"5": {
"name": "constant.other.email.link.underline.jsdoc"
},
"6": {
"name": "punctuation.definition.bracket.angle.end.jsdoc"
}
},
"match": "((@)author)\\s+([^@\\s<>*/](?:[^@<>*/]|\\*[^/])*)(?:\\s*(<)([^>\\s]+)(>))?"
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "entity.name.type.instance.jsdoc"
},
"4": {
"name": "keyword.operator.control.jsdoc"
},
"5": {
"name": "entity.name.type.instance.jsdoc"
}
},
"match": "((@)borrows)\\s+((?:[^@\\s*/]|\\*[^/])+)\\s+(as)\\s+((?:[^@\\s*/]|\\*[^/])+)"
},
{
"begin": "((@)example)\\s+",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"end": "(?=@|\\*/)",
"name": "meta.example.jsdoc",
"patterns": [
{
"match": "^\\s\\*\\s+"
},
{
"begin": "\\G(<)caption(>)",
"beginCaptures": {
"0": {
"name": "entity.name.tag.inline.jsdoc"
},
"1": {
"name": "punctuation.definition.bracket.angle.begin.jsdoc"
},
"2": {
"name": "punctuation.definition.bracket.angle.end.jsdoc"
}
},
"contentName": "constant.other.description.jsdoc",
"end": "(</)caption(>)|(?=\\*/)",
"endCaptures": {
"0": {
"name": "entity.name.tag.inline.jsdoc"
},
"1": {
"name": "punctuation.definition.bracket.angle.begin.jsdoc"
},
"2": {
"name": "punctuation.definition.bracket.angle.end.jsdoc"
}
}
},
{
"captures": {
"0": {
"name": "source.embedded.ts"
}
},
"match": "[^\\s@*](?:[^*]|\\*[^/])*"
}
]
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "constant.language.symbol-type.jsdoc"
}
},
"match": "((@)kind)\\s+(class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\\b"
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "variable.other.link.underline.jsdoc"
},
"4": {
"name": "entity.name.type.instance.jsdoc"
}
},
"match": "((@)see)\\s+(?:((?=https?://)(?:[^\\s*]|\\*[^/])+)|((?!https?://|(?:\\[[^\\[\\]]*\\])?{@(?:link|linkcode|linkplain|tutorial)\\b)(?:[^@\\s*/]|\\*[^/])+))"
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "variable.other.jsdoc"
}
},
"match": "((@)template)\\s+([A-Za-z_$][\\w$.\\[\\]]*(?:\\s*,\\s*[A-Za-z_$][\\w$.\\[\\]]*)*)"
},
{
"begin": "((@)template)\\s+(?={)",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])",
"patterns": [
{
"include": "#jsdoctype"
},
{
"match": "([A-Za-z_$][\\w$.\\[\\]]*)",
"name": "variable.other.jsdoc"
}
]
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "variable.other.jsdoc"
}
},
"match": "((@)(?:arg|argument|const|constant|member|namespace|param|var))\\s+([A-Za-z_$][\\w$.\\[\\]]*)"
},
{
"begin": "((@)typedef)\\s+(?={)",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])",
"patterns": [
{
"include": "#jsdoctype"
},
{
"match": "(?:[^@\\s*/]|\\*[^/])+",
"name": "entity.name.type.instance.jsdoc"
}
]
},
{
"begin": "((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])",
"patterns": [
{
"include": "#jsdoctype"
},
{
"match": "([A-Za-z_$][\\w$.\\[\\]]*)",
"name": "variable.other.jsdoc"
},
{
"captures": {
"1": {
"name": "punctuation.definition.optional-value.begin.bracket.square.jsdoc"
},
"2": {
"name": "keyword.operator.assignment.jsdoc"
},
"3": {
"name": "source.embedded.ts"
},
"4": {
"name": "punctuation.definition.optional-value.end.bracket.square.jsdoc"
},
"5": {
"name": "invalid.illegal.syntax.jsdoc"
}
},
"match": "(\\[)\\s*[\\w$]+(?:(?:\\[\\])?\\.[\\w$]+)*(?:\\s*(=)\\s*((?>\"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\"|'(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?'|\\[(?:(?:\\*(?!/))|[^*])*?\\]|(?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])*)*))?\\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))",
"name": "variable.other.jsdoc"
}
]
},
{
"begin": "((@)(?:define|enum|exception|export|extends|lends|implements|modifies|namespace|private|protected|returns?|satisfies|suppress|this|throws|type|yields?))\\s+(?={)",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])",
"patterns": [
{
"include": "#jsdoctype"
}
]
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "entity.name.type.instance.jsdoc"
}
},
"match": "((@)(?:alias|augments|callback|constructs|emits|event|fires|exports?|extends|external|function|func|host|lends|listens|interface|memberof!?|method|module|mixes|mixin|name|requires|see|this|typedef|uses))\\s+((?:[^{}@\\s*]|\\*[^/])+)"
},
{
"begin": "((@)(?:default(?:value)?|license|version))\\s+(([''\"]))",
"beginCaptures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "variable.other.jsdoc"
},
"4": {
"name": "punctuation.definition.string.begin.jsdoc"
}
},
"contentName": "variable.other.jsdoc",
"end": "(\\3)|(?=$|\\*/)",
"endCaptures": {
"0": {
"name": "variable.other.jsdoc"
},
"1": {
"name": "punctuation.definition.string.end.jsdoc"
}
}
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
},
"3": {
"name": "variable.other.jsdoc"
}
},
"match": "((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)"
},
{
"captures": {
"1": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"match": "(@)(?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles|callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright|default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception|exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func|function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc|inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method|mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects|override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected|public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary|suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation|version|virtual|writeOnce|yields?)\\b",
"name": "storage.type.class.jsdoc"
},
{
"include": "#inline-tags"
},
{
"captures": {
"1": {
"name": "storage.type.class.jsdoc"
},
"2": {
"name": "punctuation.definition.block.tag.jsdoc"
}
},
"match": "((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)"
}
]
},
"enum-declaration": {
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bexport)\\s+)?(?:(\\bdeclare)\\s+)?(?:\\b(const)\\s+)?\\b(enum)\\s+([_$[:alpha:]][_$[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "storage.modifier.ts"
},
"3": {
"name": "storage.modifier.ts"
},
"4": {
"name": "storage.type.enum.ts"
},
"5": {
"name": "entity.name.type.enum.ts"
}
},
"end": "(?<=\\})",
"name": "meta.enum.declaration.ts",
"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"
}
]
}
]
},
"export-declaration": {
"patterns": [
{
"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"
}
},
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)\\s+(as)\\s+(namespace)\\s+([_$[:alpha:]][_$[:alnum:]]*)"
},
{
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?(?:(?:\\s*(=))|(?:\\s+(default)(?=\\s+)))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.type.ts"
},
"3": {
"name": "keyword.operator.assignment.ts"
},
"4": {
"name": "keyword.control.default.ts"
}
},
"end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))",
"name": "meta.export.default.ts",
"patterns": [
{
"include": "#interface-declaration"
},
{
"include": "#expression"
}
]
},
{
"begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(export)(?:\\s+(type))?\\b(?!(\\$)|(\\s*:))((?=\\s*[\\{*])|((?=\\s*[_$[:alpha:]][_$[:alnum:]]*(\\s|,))(?!\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b)))",
"beginCaptures": {
"1": {
"name": "keyword.control.export.ts"
},
"2": {
"name": "keyword.control.type.ts"
}
},
"end": "(?=$|;|^\\s*$|(?:^\\s*(?:abstract|async|(?:\\bawait\\s+(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)\\b)|break|case|catch|class|const|continue|declare|do|else|enum|export|finally|function|for|goto|if|import|interface|let|module|namespace|switch|return|throw|try|type|(?:\\busing(?=\\s+(?!in\\b|of\\b(?!\\s*(?:of\\b|=)))[_$[:alpha:]])\\b)|var|while)\\b))",
"name": "meta.export.ts",
"patterns": [
{
"include": "#import-export-declaration"
}
]
}
]
},
"expression": {
"patterns": [
{
"include": "#expressionWithoutIdentifiers"
},
{
"include": "#identifiers"
},
{
"include": "#expressionPunctuations"
}
]
},
"expression-inside-possibly-arrow-parens": {
"patterns": [
{
"include": "#expressionWithoutIdentifiers"
},
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#decorator"
},
{
"include": "#destructuring-parameter"
},
{
"captures": {
"1": {
"name": "storage.modifier.ts"
}
},
"match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|protected|private|readonly)\\s+(?=(override|public|protected|private|readonly)\\s+)"
},
{
"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": "(?:(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(override|public|private|protected|readonly)\\s+)?(?:(\\.\\.\\.)\\s*)?(?<!=|:)(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|([_$[:alpha:]][_$[:alnum:]]*))(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)(?=\\s*(=\\s*(((async\\s+)?((function\\s*[(<*])|(function\\s+)|([_$[:alpha:]][_$[:alnum:]]*\\s*=>)))|((async\\s*)?(((<\\s*$)|((<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))|((<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([)]\\s*:)|((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:)))|((<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\