{ "scopeName": "expression.ng", "injectionSelector": "L:text.html -comment", "patterns": [ { "include": "#ngExpression" } ], "repository": { "ngExpression": { "name": "meta.expression.ng", "patterns": [ { "include": "#string" }, { "include": "#literal" }, { "include": "#arrowFunction" }, { "include": "#ternaryExpression" }, { "include": "#expressionOperator" }, { "include": "#functionCall" }, { "include": "#identifiers" }, { "include": "#parenExpression" }, { "include": "#punctuationComma" }, { "include": "#punctuationSemicolon" }, { "include": "#punctuationAccessor" } ] }, "arrayLiteral": { "name": "meta.array.literal.ts", "begin": "\\[", "beginCaptures": { "0": { "name": "meta.brace.square.ts" } }, "end": "\\]", "endCaptures": { "0": { "name": "meta.brace.square.ts" } }, "patterns": [ { "include": "#ngExpression" }, { "include": "#punctuationComma" } ] }, "booleanLiteral": { "patterns": [ { "name": "constant.language.boolean.true.ts", "match": "(?>=|>>>=|\\|=" }, { "name": "keyword.operator.bitwise.shift.ts", "match": "<<|>>>|>>" }, { "name": "keyword.operator.spread.ts", "match": "\\.\\.\\." }, { "name": "keyword.operator.comparison.ts", "match": "===|!==|==|!=" }, { "name": "keyword.operator.relational.ts", "match": "<=|>=|<>|<|>" }, { "name": "keyword.operator.logical.ts", "match": "\\!|&&|\\?\\?|\\|\\|" }, { "name": "keyword.operator.bitwise.ts", "match": "\\&|~|\\^|\\|" }, { "name": "keyword.operator.assignment.ts", "match": "\\=" }, { "name": "keyword.operator.decrement.ts", "match": "--" }, { "name": "keyword.operator.increment.ts", "match": "\\+\\+" }, { "name": "keyword.operator.arithmetic.ts", "match": "\\%|\\*|\\/|-|\\+" }, { "match": "(?<=[_$[:alnum:]])\\s*(\\/)(?![\\/*])", "captures": { "1": { "name": "keyword.operator.arithmetic.ts" } } }, { "include": "#typeofOperator" } ] }, "functionCall": { "begin": "(?=(\\??\\.\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(<([^<>]|\\<[^<>]+\\>)+>\\s*)?(\\?\\.\\s*)?\\()", "end": "(?<=\\))(?!(\\??\\.\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(<([^<>]|\\<[^<>]+\\>)+>\\s*)?(\\?\\.\\s*)?\\()", "patterns": [ { "name": "punctuation.accessor.ts", "match": "\\?" }, { "name": "punctuation.accessor.ts", "match": "\\." }, { "name": "entity.name.function.ts", "match": "([_$[:alpha:]][_$[:alnum:]]*)" }, { "name": "meta.type.parameters.ts", "begin": "\\<", "beginCaptures": { "0": { "name": "punctuation.definition.typeparameters.begin.ts" } }, "end": "\\>", "endCaptures": { "0": { "name": "punctuation.definition.typeparameters.end.ts" } }, "patterns": [ { "include": "#type" }, { "include": "#punctuationComma" } ] }, { "include": "#parenExpression" } ] }, "functionParameters": { "name": "meta.parameters.ts", "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.ts" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.ts" } }, "patterns": [ { "include": "#decorator" }, { "include": "#parameterName" }, { "include": "#variableInitializer" }, { "name": "punctuation.separator.parameter.ts", "match": "," } ] }, "identifiers": { "patterns": [ { "name": "support.class.ts", "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))" }, { "match": "(?x)([?!]?\\.)\\s*(?:\n([[:upper:]][_$[:digit:][:upper:]]*)|\n([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "constant.other.object.property.ts" }, "3": { "name": "variable.other.object.property.ts" } } }, { "match": "(?x)(?:([?!]?\\.)\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*((async\\s+)|(function\\s*[(<])|(function\\s+)|([_$[:alpha:]][_$[:alnum:]]*\\s*=>)|((<([^<>]|\\<[^<>]+\\>)+>\\s*)?\\(([^()]|\\([^()]*\\))*\\)(\\s*:\\s*(.)*)?\\s*=>)))", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "entity.name.function.ts" } } }, { "match": "([?!]?\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "constant.other.property.ts" } } }, { "match": "([?!]?\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "variable.other.property.ts" } } }, { "match": "(?x)(?:\n([[:upper:]][_$[:digit:][:upper:]]*)|\n([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "constant.other.object.ts" }, "2": { "name": "variable.other.object.ts" } } }, { "name": "constant.character.other", "match": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" }, { "name": "variable.other.readwrite.ts", "match": "[_$[:alpha:]][_$[:alnum:]]*" } ] }, "literal": { "name": "literal.ts", "patterns": [ { "include": "#numericLiteral" }, { "include": "#booleanLiteral" }, { "include": "#nullLiteral" }, { "include": "#undefinedLiteral" }, { "include": "#numericConstantLiteral" }, { "include": "#arrayLiteral" }, { "include": "#thisLiteral" } ] }, "nullLiteral": { "name": "constant.language.null.ts", "match": "(?) | ((<([^<>]|\\<[^<>]+\\>)+>\\s*)?\\(([^()]|\\([^()]*\\))*\\)(\\s*:\\s*(.)*)?\\s*=>)) ) | (:\\s*( (<) | ([(]\\s*( ([)]) | (\\.\\.\\.) | ([_$[:alnum:]]+\\s*( ([:,?=])| ([)]\\s*=>) )) ))) ))", "captures": { "1": { "name": "storage.modifier.ts" }, "2": { "name": "storage.modifier.ts" }, "3": { "name": "keyword.operator.rest.ts" }, "4": { "name": "entity.name.function.ts" }, "5": { "name": "keyword.operator.optional.ts" } } }, { "match": "(?:\\s*\\b(readonly)\\s+)?(?:\\s*\\b(public|private|protected)\\s+)?(\\.\\.\\.)?\\s*(?\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", "end": "(?=`)", "patterns": [ { "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", "end": "(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", "patterns": [ { "include": "#support-function-call-identifiers" }, { "name": "entity.name.function.tagged-template.ts", "match": "([_$[:alpha:]][_$[:alnum:]]*)" } ] }, { "include": "#typeArguments" } ] }, { "begin": "([_$[:alpha:]][_$[:alnum:]]*)?\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)`)", "beginCaptures": { "1": { "name": "entity.name.function.tagged-template.ts" } }, "end": "(?=`)", "patterns": [ { "include": "#typeArguments" } ] } ] }, "templateLiteralSubstitutionElement": { "name": "meta.template.expression.ts", "begin": "\\${", "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.ts" } }, "end": "}", "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.ts" } }, "patterns": [ { "include": "#ngExpression" } ], "contentName": "meta.embedded.line.ts" }, "typeArguments": { "name": "meta.type.parameters.ts", "begin": "<", "beginCaptures": { "0": { "name": "punctuation.definition.typeparameters.begin.ts" } }, "end": ">", "endCaptures": { "0": { "name": "punctuation.definition.typeparameters.end.ts" } }, "patterns": [ { "include": "#typeArgumentsBody" } ] }, "stringCharacterEscape": { "name": "constant.character.escape.ts", "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" }, "ternaryExpression": { "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)", "beginCaptures": { "1": { "name": "keyword.operator.ternary.ts" } }, "end": "\\s*(:)", "endCaptures": { "1": { "name": "keyword.operator.ternary.ts" } }, "patterns": [ { "include": "#ngExpression" } ] }, "thisLiteral": { "name": "variable.language.this.ts", "match": "(?])|(?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)", "patterns": [ { "include": "#type" } ] }, "typeBuiltinLiterals": { "name": "support.type.builtin.ts", "match": "(?)\\s*(?=\\()", "end": "(?<=\\))", "patterns": [ { "include": "#functionParameters" } ] }, { "name": "meta.type.function.ts", "begin": "(?x)((?=[(]\\s*(([)])|(\\.\\.\\.)|([_$[:alnum:]]+\\s*(([:,?=])|([)]\\s*=>))))))", "end": "(?<=\\))", "patterns": [ { "include": "#functionParameters" } ] } ] }, "typeName": { "patterns": [ { "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*([?!]?\\.)", "captures": { "1": { "name": "entity.name.type.module.ts" }, "2": { "name": "punctuation.accessor.ts" } } }, { "name": "entity.name.type.ts", "match": "[_$[:alpha:]][_$[:alnum:]]*" } ] }, "typeObjectMembers": { "patterns": [ { "include": "#typeAnnotation" }, { "include": "#punctuationComma" }, { "include": "#punctuationSemicolon" } ] }, "typeObject": { "name": "meta.object.type.ts", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.ts" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.ts" } }, "patterns": [ { "include": "#typeObjectMembers" } ] }, "typeOperators": { "patterns": [ { "include": "#typeofOperator" }, { "name": "keyword.operator.type.ts", "match": "[&|]" }, { "name": "keyword.operator.expression.keyof.ts", "match": "(?)", "captures": { "1": { "name": "variable.parameter.ts" } } }, { "name": "meta.arrow.ts", "begin": "(?x) (?:\n (? is on new line\n(\n (<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*(((const\\s+)?[_$[:alpha:]])|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "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+))", "patterns": [ { "include": "#functionParameters" } ] }, { "name": "meta.arrow.ts", "begin": "=>", "beginCaptures": { "0": { "name": "storage.type.function.arrow.ts" } }, "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])", "patterns": [ { "include": "#ngExpression" } ] } ] } } }