const lang = Object.freeze({ "injectionSelector": "L:text.html -comment", "name": "angular-expression", "patterns": [{ "include": "#ngExpression" }], "repository": { "arrayLiteral": { "begin": "\\[", "beginCaptures": { "0": { "name": "meta.brace.square.ts" } }, "end": "\\]", "endCaptures": { "0": { "name": "meta.brace.square.ts" } }, "name": "meta.array.literal.ts", "patterns": [{ "include": "#ngExpression" }, { "include": "#punctuationComma" }] }, "booleanLiteral": { "patterns": [{ "match": "(?>=|>>>=|\\|=", "name": "keyword.operator.assignment.compound.bitwise.ts" }, { "match": "<<|>>>|>>", "name": "keyword.operator.bitwise.shift.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" }, { "captures": { "1": { "name": "keyword.operator.arithmetic.ts" } }, "match": "(?<=[_$[:alnum:]])\\s*(\\/)(?![\\/*])" }, { "include": "#typeofOperator" }] }, "functionCall": { "begin": "(?=(\\??\\.\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(<([^<>]|\\<[^<>]+\\>)+>\\s*)?\\()", "end": "(?<=\\))(?!(\\??\\.\\s*)?([_$[:alpha:]][_$[:alnum:]]*)\\s*(<([^<>]|\\<[^<>]+\\>)+>\\s*)?\\()", "patterns": [{ "match": "\\?", "name": "punctuation.accessor.ts" }, { "match": "\\.", "name": "punctuation.accessor.ts" }, { "match": "([_$[:alpha:]][_$[:alnum:]]*)", "name": "entity.name.function.ts" }, { "begin": "\\<", "beginCaptures": { "0": { "name": "punctuation.definition.typeparameters.begin.ts" } }, "end": "\\>", "endCaptures": { "0": { "name": "punctuation.definition.typeparameters.end.ts" } }, "name": "meta.type.parameters.ts", "patterns": [{ "include": "#type" }, { "include": "#punctuationComma" }] }, { "include": "#parenExpression" }] }, "functionParameters": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.ts" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.ts" } }, "name": "meta.parameters.ts", "patterns": [{ "include": "#decorator" }, { "include": "#parameterName" }, { "include": "#variableInitializer" }, { "match": ",", "name": "punctuation.separator.parameter.ts" }] }, "identifiers": { "patterns": [{ "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))", "name": "support.class.ts" }, { "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "constant.other.object.property.ts" }, "3": { "name": "variable.other.object.property.ts" } }, "match": "(?x)([?!]?\\.)\\s*(?:\n([[:upper:]][_$[:digit:][:upper:]]*)|\n([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)" }, { "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "entity.name.function.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": "constant.other.property.ts" } }, "match": "([?!]?\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" }, { "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { "name": "variable.other.property.ts" } }, "match": "([?!]?\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)" }, { "captures": { "1": { "name": "constant.other.object.ts" }, "2": { "name": "variable.other.object.ts" } }, "match": "(?x)(?:\n([[:upper:]][_$[:digit:][:upper:]]*)|\n([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)" }, { "match": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "name": "constant.character.other" }, { "match": "[_$[:alpha:]][_$[:alnum:]]*", "name": "variable.other.readwrite.ts" }] }, "literal": { "name": "literal.ts", "patterns": [{ "include": "#numericLiteral" }, { "include": "#booleanLiteral" }, { "include": "#nullLiteral" }, { "include": "#undefinedLiteral" }, { "include": "#numericConstantLiteral" }, { "include": "#arrayLiteral" }, { "include": "#thisLiteral" }] }, "ngExpression": { "name": "meta.expression.ng", "patterns": [{ "include": "#string" }, { "include": "#literal" }, { "include": "#ternaryExpression" }, { "include": "#expressionOperator" }, { "include": "#functionCall" }, { "include": "#identifiers" }, { "include": "#parenExpression" }, { "include": "#punctuationComma" }, { "include": "#punctuationAccessor" }] }, "nullLiteral": { "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": "variable.parameter.ts" }, "5": { "name": "keyword.operator.optional.ts" } }, "match": "(?:\\s*\\b(readonly)\\s+)?(?:\\s*\\b(public|private|protected)\\s+)?(\\.\\.\\.)?\\s*(?])|(?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)', "name": "meta.type.annotation.ts", "patterns": [{ "include": "#type" }] }, "typeBuiltinLiterals": { "match": "(?)\\s*(?=\\()", "end": "(?<=\\))", "include": "#typeofOperator", "name": "meta.type.function.ts", "patterns": [{ "include": "#functionParameters" }] }, { "begin": "(?x)((?=[(]\\s*(([)])|(\\.\\.\\.)|([_$[:alnum:]]+\\s*(([:,?=])|([)]\\s*=>))))))", "end": "(?<=\\))", "name": "meta.type.function.ts", "patterns": [{ "include": "#functionParameters" }] }] }, "typeName": { "patterns": [{ "captures": { "1": { "name": "entity.name.type.module.ts" }, "2": { "name": "punctuation.accessor.ts" } }, "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*([?!]?\\.)" }, { "match": "[_$[:alpha:]][_$[:alnum:]]*", "name": "entity.name.type.ts" }] }, "typeObject": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.ts" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.ts" } }, "name": "meta.object.type.ts", "patterns": [{ "include": "#typeObjectMembers" }] }, "typeObjectMembers": { "patterns": [{ "include": "#typeAnnotation" }, { "include": "#punctuationComma" }, { "include": "#punctuationSemicolon" }] }, "typeOperators": { "patterns": [{ "include": "#typeofOperator" }, { "match": "[&|]", "name": "keyword.operator.type.ts" }, { "match": "(?