{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "javascriptreact", "scopeName": "source.js.jsx", "patterns": [ { "include": "#jsx-self-closing-element-in-expression" }, { "include": "#jsx-element-in-expression" }, { "include": "#jsx-fragment-in-expression" }, { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#regex-literal-prefix-ops" }, { "include": "#regex" }, { "include": "#qstring-double" }, { "include": "#qstring-single" }, { "include": "#template" }, { "include": "#decorator" }, { "include": "#object-method-key" }, { "include": "#arrow-function-params" }, { "include": "#ternary-expression" }, { "include": "#function-declaration" }, { "include": "#function-anon-declaration" }, { "include": "#class-declaration" }, { "include": "#extends-definition" }, { "include": "#let-destructure" }, { "include": "#const-binding" }, { "include": "#const-destructure" }, { "include": "#var-destructure" }, { "include": "#using-destructure" }, { "include": "#import-export-all" }, { "include": "#hexnumber" }, { "include": "#octalnumber" }, { "include": "#binarynumber" }, { "include": "#bigint" }, { "include": "#number" }, { "include": "#scope-keyword-operator-expression" }, { "include": "#scope-keyword-control-loop" }, { "include": "#scope-keyword-control-flow" }, { "include": "#scope-keyword-control-import" }, { "include": "#scope-keyword-control-conditional" }, { "include": "#scope-keyword-control-switch" }, { "include": "#scope-keyword-control-trycatch" }, { "include": "#scope-keyword-control" }, { "include": "#scope-keyword-control-export" }, { "include": "#scope-keyword-control-from-from" }, { "include": "#scope-keyword-other" }, { "include": "#scope-storage-type-class" }, { "include": "#scope-keyword-other-extends" }, { "include": "#scope-storage-modifier" }, { "include": "#scope-storage-modifier-accessibility" }, { "include": "#scope-storage-type-function" }, { "include": "#scope-storage-type-property" }, { "include": "#scope-storage-type" }, { "include": "#scope-storage-type-function-arrow" }, { "include": "#scope-constant-language-boolean-true" }, { "include": "#scope-constant-language-boolean-false" }, { "include": "#scope-constant-language-null" }, { "include": "#this-literal" }, { "include": "#super-literal" }, { "include": "#scope-support-class" }, { "include": "#scope-support-variable" }, { "include": "#method-call" }, { "include": "#known-property-access" }, { "include": "#property-access" }, { "include": "#operator-overrides" }, { "include": "#operators" }, { "include": "#punctuation-accessor" }, { "include": "#scope-punctuation-bracket-round" }, { "include": "#punctuation-comma" }, { "include": "#scope-punctuation-bracket-square" }, { "include": "#scope-punctuation-accessor-optional" }, { "include": "#scope-punctuation-bracket-curly" }, { "include": "#punctuation-semicolon" }, { "include": "#punctuation" }, { "include": "#arrow-parameter" }, { "include": "#function-call" }, { "include": "#ident" }, { "include": "#privatefield" } ], "repository": { "jsx-children": { "patterns": [ { "include": "#jsx-element" }, { "include": "#jsx-fragment" }, { "include": "#jsx-element-multiline" }, { "include": "#jsx-expression" }, { "include": "#jsx-entities" } ] }, "jsx-expression": { "name": "meta.embedded.expression.js.jsx", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.js.jsx" } }, "patterns": [ { "include": "$self" } ] }, "jsx-string-double-quoted": { "name": "string.quoted.double.js.jsx", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.js.jsx" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.js.jsx" } } }, "jsx-string-single-quoted": { "name": "string.quoted.single.js.jsx", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.js.jsx" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.js.jsx" } } }, "jsx-attributes": { "patterns": [ { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "match": "\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?([_$[:alpha:]][-_$[:alnum:].]*)(?=\\s|=|/?>|$)", "captures": { "1": { "name": "entity.other.attribute-name.namespace.js.jsx" }, "2": { "name": "punctuation.separator.namespace.js.jsx" }, "3": { "name": "entity.other.attribute-name.js.jsx" } } }, { "match": "=(?=\\s*(?:'|\"|\\{))", "name": "keyword.operator.assignment.js.jsx" }, { "include": "#jsx-string-double-quoted" }, { "include": "#jsx-string-single-quoted" }, { "include": "#jsx-expression" } ] }, "jsx-self-closing-element": { "name": "meta.tag.js.jsx", "begin": "(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.js.jsx" } }, "patterns": [ { "include": "#jsx-attributes" } ] }, "jsx-element": { "name": "meta.tag.js.jsx", "begin": "(?=(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?|<))", "end": "(/>)|()", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.js.jsx" }, "2": { "name": "punctuation.definition.tag.begin.js.jsx" }, "3": { "name": "entity.name.tag.namespace.js.jsx" }, "4": { "name": "punctuation.separator.namespace.js.jsx" }, "5": { "patterns": [ { "match": "(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?=\\s*\\.)", "name": "variable.other.object.js.jsx" }, { "match": "\\.", "name": "punctuation.accessor.js.jsx" }, { "match": "(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*", "name": "support.class.component.js.jsx" } ] }, "6": { "name": "entity.name.tag.js.jsx" }, "7": { "name": "support.class.component.js.jsx" }, "8": { "name": "punctuation.definition.tag.end.js.jsx" } }, "patterns": [ { "begin": "(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?)", "patterns": [ { "include": "#jsx-attributes" } ] }, { "begin": "(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.end.js.jsx" } }, "end": "(?=)|())", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.js.jsx" }, "2": { "name": "punctuation.definition.tag.begin.js.jsx" }, "3": { "name": "entity.name.tag.namespace.js.jsx" }, "4": { "name": "punctuation.separator.namespace.js.jsx" }, "5": { "patterns": [ { "match": "(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?=\\s*\\.)", "name": "variable.other.object.js.jsx" }, { "match": "\\.", "name": "punctuation.accessor.js.jsx" }, { "match": "(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*", "name": "support.class.component.js.jsx" } ] }, "6": { "name": "entity.name.tag.js.jsx" }, "7": { "name": "support.class.component.js.jsx" }, "8": { "name": "punctuation.definition.tag.end.js.jsx" } }, "patterns": [ { "begin": "(?<=>)", "end": "(?=)|(?=/>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.js.jsx" } }, "patterns": [ { "include": "#jsx-attributes" } ] } ] }, "jsx-fragment": { "name": "meta.tag.js.jsx", "begin": "(<)\\s*(>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.js.jsx" }, "2": { "name": "punctuation.definition.tag.end.js.jsx" } }, "end": "()", "endCaptures": { "1": { "name": "punctuation.definition.tag.begin.js.jsx" }, "2": { "name": "punctuation.definition.tag.end.js.jsx" } }, "contentName": "meta.jsx.children.js.jsx", "patterns": [ { "include": "#jsx-children" } ] }, "jsx-self-closing-element-in-expression": { "begin": "(?&|]|&&|\\|\\||=>|\\breturn|\\byield|\\bdefault|\\bcase|^)(?=\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?]*/>)", "end": "(?!\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?]*/>)", "patterns": [ { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#jsx-self-closing-element" } ] }, "jsx-element-in-expression": { "begin": "(?&|]|&&|\\|\\||=>|\\breturn|\\byield|\\bdefault|\\bcase|^)(?=\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?|<))", "end": "(?!\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(:))?(?:((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:\\.(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)+)|([[:lower:]][-[:alnum:]]*)|([_$[:upper:]][-_$[:alnum:].]*|(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*(?:[-.][_$[:alnum:]]+)+))(?|<))", "patterns": [ { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#jsx-element" } ] }, "jsx-fragment-in-expression": { "begin": "(?&|]|&&|\\|\\||=>|\\breturn|\\byield|\\bdefault|\\bcase|^)(?=\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(>))", "end": "(?!\\s*(?:(?:/\\*\\*(?!/)(?:(?!\\*/)[\\s\\S])*?\\*/|/\\*(?:(?!\\*/)[\\s\\S])*?\\*/)\\s*)*(<)\\s*(>))", "patterns": [ { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#jsx-fragment" } ] }, "regex-literal-prefix-ops": { "name": "string.regexp.js.jsx", "begin": "(?:(?<=[=|\\^&<>+\\-*%~(,.\\[?:{;])|(?<=\\binstanceof)|(?<=\\bin)|(?<=\\bextends)|(?<=\\byield)|(?<=\\bget)|(?<=\\bset)|(?<=\\basync)|(?<=\\belse)|(?<=\\bdo)|(?<=\\breturn)|(?<=\\bthrow)|(?<=\\btry)|(?<=\\bfinally)|(?<=\\bcatch)|(?<=\\bof)|(?<=\\bcase)|(?<=\\bexport)|(?<=\\bdefault)|(?<=\\bimport)|(?<=\\bstatic)|(?<=\\btypeof)|(?<=\\bvoid)|(?<=\\bdelete)|(?<=\\bawait)|(?<=^))\\s*([!](?:\\s*[!])*)\\s*(?:((?:/\\*\\*(?!/)[\\s\\S]*?\\*/|/\\*[\\s\\S]*?\\*/)\\s*))?(/)(?![*/])", "beginCaptures": { "1": { "name": "keyword.operator.logical.prefix.js.jsx" }, "2": { "name": "comment.block.js.jsx" }, "3": { "name": "punctuation.definition.string.begin.regexp.js.jsx" } }, "end": "(/)([a-z]*)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.regexp.js.jsx" }, "2": { "name": "keyword.other.regexp.js.jsx" } }, "patterns": [ { "include": "#regexp" } ] }, "regexp": { "patterns": [ { "name": "keyword.control.anchor.regexp", "match": "\\\\[bB]|\\^|\\$" }, { "match": "\\\\[1-9]\\d*|\\\\k<([a-zA-Z_$][\\w$]*)>", "captures": { "0": { "name": "keyword.other.back-reference.regexp" }, "1": { "name": "variable.other.regexp" } } }, { "name": "keyword.operator.quantifier.regexp", "match": "[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??" }, { "name": "keyword.operator.or.regexp", "match": "\\|" }, { "name": "meta.group.assertion.regexp", "begin": "(\\()((\\?=)|(\\?!)|(\\?<=)|(\\?))?", "beginCaptures": { "0": { "name": "punctuation.definition.group.regexp" }, "1": { "name": "punctuation.definition.group.no-capture.regexp" }, "2": { "name": "variable.other.regexp" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.group.regexp" } }, "patterns": [ { "include": "#regexp" } ] }, { "name": "constant.other.character-class.set.regexp", "begin": "(\\[)(\\^)?", "beginCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" }, "2": { "name": "keyword.operator.negation.regexp" } }, "end": "(\\])", "endCaptures": { "1": { "name": "punctuation.definition.character-class.regexp" } }, "patterns": [ { "name": "constant.other.character-class.range.regexp", "match": "(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))", "captures": { "1": { "name": "constant.character.numeric.regexp" }, "2": { "name": "constant.character.control.regexp" }, "3": { "name": "constant.character.escape.backslash.regexp" }, "4": { "name": "constant.character.numeric.regexp" }, "5": { "name": "constant.character.control.regexp" }, "6": { "name": "constant.character.escape.backslash.regexp" } } }, { "include": "#regex-character-class" } ] }, { "include": "#regex-character-class" } ] }, "regex-character-class": { "patterns": [ { "name": "constant.other.character-class.regexp", "match": "\\\\[wWsSdDtrnvf]|\\." }, { "name": "constant.character.numeric.regexp", "match": "\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})" }, { "name": "constant.character.control.regexp", "match": "\\\\c[A-Z]" }, { "name": "constant.character.escape.backslash.regexp", "match": "\\\\." } ] }, "shebang": { "name": "comment.line.shebang.js.jsx", "match": "^#![^\\n]*" }, "docblock": { "patterns": [ { "match": "(?x)\n((@)(?:access|api))\n\\s+\n(private|protected|public)\n\\b", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "constant.language.access-type.jsdoc" } } }, { "match": "(?x)\n((@)author)\n\\s+\n(\n [^@\\s<>*/]\n (?:[^@<>*/]|\\*[^/])*\n)\n(?:\n \\s*\n (<)\n ([^>\\s]+)\n (>)\n)?", "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": "(?x)\n((@)borrows) \\s+\n((?:[^@\\s*/]|\\*[^/])+) # \n\\s+ (as) \\s+ # as\n((?:[^@\\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" } } }, { "name": "meta.example.jsdoc", "begin": "((@)example)\\s+", "end": "(?=@|\\*/)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "patterns": [ { "match": "^\\s\\*\\s+" }, { "contentName": "constant.other.description.jsdoc", "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" } }, "end": "()|(?=\\*/)", "endCaptures": { "0": { "name": "entity.name.tag.inline.jsdoc" }, "1": { "name": "punctuation.definition.bracket.angle.begin.jsdoc" }, "2": { "name": "punctuation.definition.bracket.angle.end.jsdoc" } } }, { "match": "[^\\s@*](?:[^*]|\\*[^/])*", "captures": { "0": { "name": "source.embedded.js.jsx" } } } ] }, { "match": "(?x) ((@)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": "constant.language.symbol-type.jsdoc" } } }, { "match": "(?x)\n((@)see)\n\\s+\n(?:\n # URL\n (\n (?=https?://)\n (?:[^\\s*]|\\*[^/])+\n )\n |\n # JSDoc namepath\n (\n (?!\n # Avoid matching bare URIs (also acceptable as links)\n https?://\n |\n # Avoid matching {@inline tags}; we match those below\n (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n {@(?:link|linkcode|linkplain|tutorial)\\b\n )\n # Matched namepath\n (?:[^@\\s*/]|\\*[^/])+\n )\n)", "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": "(?x)\n((@)template)\n\\s+\n(\\[)\\s*\n( # 4: the declared type-parameter name\n [A-Za-z_$][\\w$]*\n)\n(?:\n \\s* (=) \\s* # 5: the `=` of the default\n ( # 6: the default type expression\n (?>\n \"(?:\\*(?!/)|\\\\(?!\")|[^*\\\\])*?\" |\n '(?:\\*(?!/)|\\\\(?!')|[^*\\\\])*?' |\n \\[ (?:\\*(?!/)|[^*])*? \\] |\n (?:\\*(?!/)|\\s(?!\\s*\\])|[^*\\s\\[\\]])\n )*\n )\n)?\n\\s* (\\])", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "punctuation.definition.optional-value.begin.bracket.square.jsdoc" }, "4": { "name": "entity.name.type.jsdoc" }, "5": { "name": "keyword.operator.assignment.jsdoc" }, "6": { "name": "entity.name.type.jsdoc" }, "7": { "name": "punctuation.definition.optional-value.end.bracket.square.jsdoc" } } }, { "match": "(?x)\n((@)template)\n\\s+\n# One or more valid identifiers\n(\n [A-Za-z_$] # First character: non-numeric word character\n [\\w$.\\[\\]]* # Rest of identifier\n (?: # Possible list of additional identifiers\n \\s* , \\s*\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n )*\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "begin": "(?x)((@)template)\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" }, { "name": "variable.other.jsdoc", "match": "([A-Za-z_$][\\w$.\\[\\]]*)" } ] }, { "match": "(?x)\n(\n (@)\n (?:arg|argument|const|constant|member|namespace|param|var)\n)\n\\s+\n(\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "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" }, { "name": "entity.name.type.instance.jsdoc", "match": "(?:[^@\\s*/]|\\*[^/])+" } ] }, { "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" }, { "name": "variable.other.jsdoc", "match": "([A-Za-z_$][\\w$.\\[\\]]*)" }, { "name": "variable.other.jsdoc", "match": "(?x)\n(\\[)\\s*\n[\\w$]+\n(?:\n (?:\\[\\])? # Foo[ ].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [\\w$]+\n)*\n(?:\n \\s*\n (=) # [foo=bar] Default parameter value\n \\s*\n (\n # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n (?>\n \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" | # [foo=\"bar\"] Double-quoted\n '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' | # [foo='bar'] Single-quoted\n \\[ (?:(?:\\*(?!/))|[^*])*? \\] | # [foo=[1,2]] Array literal\n (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])* # Everything else\n )*\n )\n)?\n\\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))", "captures": { "1": { "name": "punctuation.definition.optional-value.begin.bracket.square.jsdoc" }, "2": { "name": "keyword.operator.assignment.jsdoc" }, "3": { "name": "source.embedded.js.jsx" }, "4": { "name": "punctuation.definition.optional-value.end.bracket.square.jsdoc" }, "5": { "name": "invalid.illegal.syntax.jsdoc" } } } ] }, { "begin": "(?x)\n(\n (@)\n (?:define|enum|exception|export|extends|lends|implements|modifies\n |namespace|private|protected|returns?|satisfies|suppress|this|throws|type\n |yields?)\n)\n\\s+(?={)", "beginCaptures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } }, "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", "patterns": [ { "include": "#jsdoctype" } ] }, { "match": "(?x)\n(\n (@)\n (?:alias|augments|callback|constructs|emits|event|fires|exports?\n |extends|external|function|func|host|lends|listens|interface|memberof!?\n |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n)\n\\s+\n(\n (?:\n [^{}@\\s*] | \\*[^/]\n )+\n)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "entity.name.type.instance.jsdoc" } } }, { "contentName": "variable.other.jsdoc", "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" } }, "end": "(\\3)|(?=$|\\*/)", "endCaptures": { "0": { "name": "variable.other.jsdoc" }, "1": { "name": "punctuation.definition.string.end.jsdoc" } } }, { "match": "((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" }, "3": { "name": "variable.other.jsdoc" } } }, { "name": "storage.type.class.jsdoc", "match": "(?x) (@) (?: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", "captures": { "1": { "name": "punctuation.definition.block.tag.jsdoc" } } }, { "include": "#inline-tags" }, { "match": "((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)", "captures": { "1": { "name": "storage.type.class.jsdoc" }, "2": { "name": "punctuation.definition.block.tag.jsdoc" } } } ] }, "jsdoctype": { "patterns": [ { "contentName": "entity.name.type.instance.jsdoc", "begin": "\\G({)", "beginCaptures": { "0": { "name": "entity.name.type.instance.jsdoc" }, "1": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" } }, "end": "((}))\\s*|(?=\\*/)", "endCaptures": { "1": { "name": "entity.name.type.instance.jsdoc" }, "2": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } }, "patterns": [ { "include": "#brackets" } ] } ] }, "inline-tags": { "patterns": [ { "name": "constant.other.description.jsdoc", "match": "(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))", "captures": { "1": { "name": "punctuation.definition.bracket.square.begin.jsdoc" }, "2": { "name": "punctuation.definition.bracket.square.end.jsdoc" } } }, { "name": "entity.name.type.instance.jsdoc", "begin": "({)((@)(?:link(?:code|plain)?|tutorial))\\s*", "beginCaptures": { "1": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" }, "2": { "name": "storage.type.class.jsdoc" }, "3": { "name": "punctuation.definition.inline.tag.jsdoc" } }, "end": "}|(?=\\*/)", "endCaptures": { "0": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } }, "patterns": [ { "match": "\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?", "captures": { "1": { "name": "variable.other.link.underline.jsdoc" }, "2": { "name": "punctuation.separator.pipe.jsdoc" } } }, { "match": "\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?", "captures": { "1": { "name": "variable.other.description.jsdoc" }, "2": { "name": "punctuation.separator.pipe.jsdoc" } } } ] } ] }, "brackets": { "patterns": [ { "begin": "{", "beginCaptures": { "0": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" } }, "end": "}|(?=\\*/)", "endCaptures": { "0": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } }, "patterns": [ { "include": "#brackets" } ] }, { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.bracket.square.begin.jsdoc" } }, "end": "\\]|(?=\\*/)", "endCaptures": { "0": { "name": "punctuation.definition.bracket.square.end.jsdoc" } }, "patterns": [ { "include": "#brackets" } ] } ] }, "jsdoc": { "name": "comment.block.documentation.js.jsx", "begin": "/\\*\\*(?!/)", "end": "\\*/", "contentName": "meta.embedded.block.jsdoc", "beginCaptures": { "0": { "name": "punctuation.definition.comment.js.jsx" } }, "endCaptures": { "0": { "name": "punctuation.definition.comment.js.jsx" } }, "patterns": [ { "include": "#docblock" } ] }, "linecomment": { "name": "comment.line.double-slash.js.jsx", "match": "//[^\\n]*" }, "blockcomment": { "name": "comment.block.js.jsx", "begin": "/\\*", "end": "\\*/" }, "ident": { "name": "variable.other.readwrite.js.jsx", "match": "(?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*" }, "hexnumber": { "name": "constant.numeric.hex.js.jsx", "match": "0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*n?(?![0-9A-Za-z_$\\\\])" }, "octalnumber": { "name": "constant.numeric.octal.js.jsx", "match": "0[oO][0-7]+(?:_[0-7]+)*n?(?![0-9A-Za-z_$\\\\])" }, "binarynumber": { "name": "constant.numeric.binary.js.jsx", "match": "0[bB][01]+(?:_[01]+)*n?(?![0-9A-Za-z_$\\\\])" }, "bigint": { "name": "constant.numeric.bigint.js.jsx", "match": "[0-9]+(?:_[0-9]+)*n(?![0-9A-Za-z_$\\\\])" }, "number": { "name": "constant.numeric.decimal.js.jsx", "match": "(?:(?:0|[1-9][0-9]*(?:_[0-9]+)*)(?:\\.[0-9]*(?:_[0-9]+)*)?|\\.[0-9]+(?:_[0-9]+)*)(?:[eE][+\\-]?[0-9]+(?:_[0-9]+)*)?(?![0-9A-Za-z_$\\\\])" }, "template": { "name": "string.quoted.other.template.js.jsx", "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.template.begin.js.jsx" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.template.end.js.jsx" } }, "patterns": [ { "match": "\\\\(?:[nrtbfv0'\"\\\\`$]|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\})", "name": "constant.character.escape.js.jsx" }, { "begin": "\\$\\{", "beginCaptures": { "0": { "name": "punctuation.definition.template-expression.begin.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.template-expression.end.js.jsx" } }, "name": "meta.embedded.expression.js.jsx", "patterns": [ { "include": "$self" } ] } ] }, "decorator": { "name": "entity.name.function.decorator.js.jsx", "match": "@(?:(?:[a-zA-Z_$]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\}|\\.)*)?" }, "privatefield": { "name": "variable.other.property.js.jsx", "match": "#(?:[a-zA-Z_$]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*" }, "code-block": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.js.jsx" } }, "patterns": [ { "include": "#code-block" }, { "include": "$self" } ] }, "declaration-body": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.js.jsx" } }, "patterns": [ { "include": "#declaration-body" }, { "include": "#constructor-declaration" }, { "include": "#method-signature" }, { "include": "$self" } ] }, "nested-parens": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#nested-parens" }, { "include": "$self" } ] }, "declaration-params": { "name": "meta.parameters.js.jsx", "begin": "\\(", "end": "\\)", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.js.jsx" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.js.jsx" } }, "patterns": [ { "include": "#parameter-name" }, { "include": "#nested-parens" }, { "include": "$self" } ] }, "function-declaration": { "name": "meta.function.js.jsx", "begin": "\\b(function)\\s*(\\*)?\\s*((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "beginCaptures": { "1": { "name": "storage.type.function.js.jsx" }, "2": { "name": "keyword.operator.arithmetic.js.jsx" }, "3": { "name": "entity.name.function.js.jsx" } }, "patterns": [ { "include": "#declaration-params" }, { "include": "#code-block" }, { "include": "$self" } ], "end": "(?<=\\})" }, "function-anon-declaration": { "name": "meta.function.js.jsx", "begin": "\\b(function)\\s*(\\*)?\\s*(?=\\()", "beginCaptures": { "1": { "name": "storage.type.function.js.jsx" }, "2": { "name": "keyword.operator.arithmetic.js.jsx" } }, "end": "(?<=\\})", "patterns": [ { "include": "#declaration-params" }, { "include": "#code-block" }, { "include": "$self" } ] }, "class-declaration": { "name": "meta.class.js.jsx", "begin": "\\b(class)\\s+((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "beginCaptures": { "1": { "name": "storage.type.class.js.jsx" }, "2": { "name": "entity.name.type.class.js.jsx" } }, "patterns": [ { "include": "#declaration-body" }, { "include": "$self" } ], "end": "(?<=\\})" }, "constructor-declaration": { "name": "meta.constructor.js.jsx", "begin": "\\b(constructor)", "beginCaptures": { "1": { "name": "storage.type.function.js.jsx" } }, "end": "(?<=\\})|(?=[;}])", "patterns": [ { "include": "#declaration-params" }, { "include": "#code-block" }, { "include": "$self" } ] }, "method-signature": { "name": "meta.method.js.jsx", "begin": "\\b((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(\\?)?\\s*(?=[<(])", "beginCaptures": { "1": { "name": "entity.name.function.js.jsx" }, "2": { "name": "keyword.operator.optional.js.jsx" } }, "end": "(?<=\\})|(?=[;\\}])", "patterns": [ { "include": "#declaration-params" }, { "include": "#code-block" }, { "include": "$self" } ] }, "extends-definition": { "match": "\\b(extends)\\s+((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "captures": { "1": { "name": "keyword.other.extends.js.jsx" }, "2": { "name": "entity.other.inherited-class.js.jsx" } } }, "bind-default": { "begin": "(=)", "beginCaptures": { "1": { "name": "keyword.operator.assignment.js.jsx" } }, "end": "(?=[,}\\])])", "patterns": [ { "include": "$self" } ] }, "const-bind-prop": { "patterns": [ { "match": "(\\.\\.\\.)", "name": "keyword.operator.rest.js.jsx" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(\\s*)(:)", "captures": { "1": { "name": "variable.object.property.js.jsx" }, "3": { "name": "punctuation.destructuring.js.jsx" } } }, { "include": "#bind-default" }, { "include": "#const-bind-object" }, { "include": "#const-bind-array" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "name": "variable.other.constant.js.jsx" }, { "match": ",", "name": "punctuation.separator.comma.js.jsx" } ] }, "const-bind-elem": { "patterns": [ { "match": "(\\.\\.\\.)", "name": "keyword.operator.rest.js.jsx" }, { "include": "#bind-default" }, { "include": "#const-bind-object" }, { "include": "#const-bind-array" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "name": "variable.other.constant.js.jsx" }, { "match": ",", "name": "punctuation.separator.comma.js.jsx" } ] }, "const-bind-object": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.binding-pattern.object.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.binding-pattern.object.js.jsx" } }, "patterns": [ { "include": "#const-bind-prop" } ] }, "const-bind-array": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.binding-pattern.array.js.jsx" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.binding-pattern.array.js.jsx" } }, "patterns": [ { "include": "#const-bind-elem" } ] }, "mut-bind-prop": { "patterns": [ { "match": "(\\.\\.\\.)", "name": "keyword.operator.rest.js.jsx" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(\\s*)(:)", "captures": { "1": { "name": "variable.object.property.js.jsx" }, "3": { "name": "punctuation.destructuring.js.jsx" } } }, { "include": "#bind-default" }, { "include": "#mut-bind-object" }, { "include": "#mut-bind-array" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "name": "variable.other.readwrite.js.jsx" }, { "match": ",", "name": "punctuation.separator.comma.js.jsx" } ] }, "mut-bind-elem": { "patterns": [ { "match": "(\\.\\.\\.)", "name": "keyword.operator.rest.js.jsx" }, { "include": "#bind-default" }, { "include": "#mut-bind-object" }, { "include": "#mut-bind-array" }, { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "name": "variable.other.readwrite.js.jsx" }, { "match": ",", "name": "punctuation.separator.comma.js.jsx" } ] }, "mut-bind-object": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.binding-pattern.object.js.jsx" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.binding-pattern.object.js.jsx" } }, "patterns": [ { "include": "#mut-bind-prop" } ] }, "mut-bind-array": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.binding-pattern.array.js.jsx" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.binding-pattern.array.js.jsx" } }, "patterns": [ { "include": "#mut-bind-elem" } ] }, "let-destructure": { "begin": "\\b(let)\\s+(?=[{\\[])", "beginCaptures": { "1": { "name": "storage.type.js.jsx" } }, "end": "(?<=[}\\]])", "patterns": [ { "include": "#mut-bind-object" }, { "include": "#mut-bind-array" } ] }, "const-binding": { "match": "\\b(const)\\s+((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*[=:;,]|\\s*$)", "captures": { "1": { "name": "storage.type.js.jsx" }, "2": { "name": "variable.other.constant.js.jsx" } } }, "const-destructure": { "begin": "\\b(const)\\s+(?=[{\\[])", "beginCaptures": { "1": { "name": "storage.type.js.jsx" } }, "end": "(?<=[}\\]])", "patterns": [ { "include": "#const-bind-object" }, { "include": "#const-bind-array" } ] }, "var-destructure": { "begin": "\\b(var)\\s+(?=[{\\[])", "beginCaptures": { "1": { "name": "storage.type.js.jsx" } }, "end": "(?<=[}\\]])", "patterns": [ { "include": "#mut-bind-object" }, { "include": "#mut-bind-array" } ] }, "using-destructure": { "begin": "\\b(using)\\s+(?=[{\\[])", "beginCaptures": { "1": { "name": "storage.type.js.jsx" } }, "end": "(?<=[}\\]])", "patterns": [ { "include": "#mut-bind-object" }, { "include": "#mut-bind-array" } ] }, "import-export-all": { "match": "\\b(import)\\s+(\\*)", "captures": { "1": { "name": "keyword.control.import.js.jsx" }, "2": { "name": "constant.language.import-export-all.js.jsx" } } }, "function-call": { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*\\()", "captures": { "1": { "name": "entity.name.function.js.jsx" } } }, "object-method-key": { "match": "((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*:\\s*(?:\\w+\\s+)?[\\(])", "captures": { "1": { "name": "entity.name.function.js.jsx" } } }, "method-call": { "match": "(?<=[\\w$\\]\\)])(\\.)\\s*((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*\\()", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { "name": "entity.name.function.js.jsx" } } }, "known-property-access": { "match": "(?<=[\\w$\\]\\)])(\\.)\\s*(length|prototype|constructor)\\b", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { "name": "support.variable.property.js.jsx" } } }, "property-access": { "match": "(?<=[\\w$\\]\\)])(\\.)\\s*((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { "name": "entity.other.property.js.jsx" } } }, "arrow-parameter": { "match": "\\b((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)\\s*(?==>)", "captures": { "1": { "name": "variable.parameter.js.jsx" } } }, "arrow-function-params": { "name": "meta.parameters.arrow.js.jsx", "begin": "(\\()(?=[^()]*\\)\\s*(?::\\s*[^=>{]*)?\\s*=>)", "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.js.jsx" } }, "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.js.jsx" } }, "patterns": [ { "match": "(?<=[,(])\\s*(\\.\\.\\.)?\\s*((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*[,:)?=])", "captures": { "1": { "name": "keyword.operator.spread.js.jsx" }, "2": { "name": "variable.parameter.js.jsx" } } }, { "include": "#nested-parens" }, { "include": "$self" } ] }, "ternary-expression": { "name": "meta.ternary-expression.js.jsx", "begin": "(\\?)(?![:.?])", "beginCaptures": { "1": { "name": "keyword.operator.ternary.js.jsx" } }, "end": "(:)", "endCaptures": { "1": { "name": "keyword.operator.ternary.js.jsx" } }, "patterns": [ { "include": "#ternary-expression" }, { "include": "$self" } ] }, "scope-constant-language-boolean-true": { "match": "\\b(true)\\b", "name": "constant.language.boolean.true.js.jsx" }, "scope-constant-language-boolean-false": { "match": "\\b(false)\\b", "name": "constant.language.boolean.false.js.jsx" }, "scope-constant-language-null": { "match": "\\b(null|undefined)\\b", "name": "constant.language.null.js.jsx" }, "scope-keyword-operator-expression": { "match": "\\b(instanceof|new|typeof|void|delete)\\b", "name": "keyword.operator.expression.js.jsx" }, "scope-keyword-control-loop": { "match": "\\b(in|for|while|do|break|continue|of)\\b", "name": "keyword.control.loop.js.jsx" }, "scope-keyword-other": { "match": "\\b(target|meta|as)\\b", "name": "keyword.other.js.jsx" }, "scope-storage-type-class": { "match": "\\b(class)\\b", "name": "storage.type.class.js.jsx" }, "scope-keyword-other-extends": { "match": "\\b(extends)\\b", "name": "keyword.other.extends.js.jsx" }, "scope-storage-modifier": { "match": "\\b(async|accessor)\\b", "name": "storage.modifier.js.jsx" }, "scope-storage-modifier-accessibility": { "match": "\\b(static)\\b(?=\\s+(?:\\.\\.\\.|[[:alpha:]_$\\[*#{\"'0-9]))", "name": "storage.modifier.js.jsx" }, "scope-keyword-control-flow": { "match": "\\b(yield|await|return)\\b", "name": "keyword.control.flow.js.jsx" }, "scope-keyword-control-import": { "match": "\\b(import)\\b", "name": "keyword.control.import.js.jsx" }, "scope-storage-type-function": { "match": "\\b(function)\\b", "name": "storage.type.function.js.jsx" }, "scope-storage-type-property": { "match": "\\b(get|set)\\b", "name": "storage.type.property.js.jsx" }, "scope-storage-type": { "match": "\\b(let|const|var|using)\\b", "name": "storage.type.js.jsx" }, "scope-keyword-control-conditional": { "match": "\\b(if|else)\\b", "name": "keyword.control.conditional.js.jsx" }, "scope-keyword-control-switch": { "match": "\\b(switch|case|default)\\b", "name": "keyword.control.switch.js.jsx" }, "scope-keyword-control-trycatch": { "match": "\\b(throw|try|catch|finally)\\b", "name": "keyword.control.trycatch.js.jsx" }, "scope-keyword-control": { "match": "\\b(debugger|with)\\b", "name": "keyword.control.js.jsx" }, "scope-keyword-control-export": { "match": "\\b(export)\\b", "name": "keyword.control.export.js.jsx" }, "scope-keyword-control-from-from": { "match": "\\bfrom\\b(?=\\s*[\"'])", "name": "keyword.control.from.js.jsx" }, "scope-support-class": { "match": "\\b(Promise|Array|Map|Set|WeakMap|WeakSet|Error|RegExp|Date|Object|Function|Symbol)\\b(?!\\s*(?:\\.|\\?\\.|\\())", "name": "support.class.js.jsx" }, "scope-support-variable": { "match": "\\b(console|window|document|process|module|require|exports|global|globalThis)\\b", "name": "support.variable.js.jsx" }, "scope-storage-type-function-arrow": { "match": "=>", "name": "storage.type.function.arrow.js.jsx" }, "operator-overrides": { "match": "(>>>=)|(\\*\\*=)|(<<=)|(>>=)|(\\?\\?=)|(\\|\\|=)|(&&=)|(===)|(!==)|(>>>)|(\\+=)|(-=)|(\\*=)|(/=)|(%=)|(&=)|(\\|=)|(\\^=)|(\\?\\?)|(\\|\\|)|(&&)|(==)|(!=)|(<=)|(>=)|(<<)|(>>)|(\\*\\*)|(\\+\\+)|(--)|(\\*)|(=)|(-)|(!)|(<)|(>)|(\\|)|(\\^)|(&)|(\\+)|(/)|(%)|(~)", "captures": { "1": { "name": "keyword.operator.assignment.js.jsx" }, "2": { "name": "keyword.operator.assignment.js.jsx" }, "3": { "name": "keyword.operator.assignment.js.jsx" }, "4": { "name": "keyword.operator.assignment.js.jsx" }, "5": { "name": "keyword.operator.assignment.js.jsx" }, "6": { "name": "keyword.operator.assignment.js.jsx" }, "7": { "name": "keyword.operator.assignment.js.jsx" }, "8": { "name": "keyword.operator.comparison.js.jsx" }, "9": { "name": "keyword.operator.comparison.js.jsx" }, "10": { "name": "keyword.operator.bitwise.shift.js.jsx" }, "11": { "name": "keyword.operator.assignment.js.jsx" }, "12": { "name": "keyword.operator.assignment.js.jsx" }, "13": { "name": "keyword.operator.assignment.js.jsx" }, "14": { "name": "keyword.operator.assignment.js.jsx" }, "15": { "name": "keyword.operator.assignment.js.jsx" }, "16": { "name": "keyword.operator.assignment.js.jsx" }, "17": { "name": "keyword.operator.assignment.js.jsx" }, "18": { "name": "keyword.operator.assignment.js.jsx" }, "19": { "name": "keyword.operator.logical.js.jsx" }, "20": { "name": "keyword.operator.logical.js.jsx" }, "21": { "name": "keyword.operator.logical.js.jsx" }, "22": { "name": "keyword.operator.comparison.js.jsx" }, "23": { "name": "keyword.operator.comparison.js.jsx" }, "24": { "name": "keyword.operator.relational.js.jsx" }, "25": { "name": "keyword.operator.relational.js.jsx" }, "26": { "name": "keyword.operator.bitwise.shift.js.jsx" }, "27": { "name": "keyword.operator.bitwise.shift.js.jsx" }, "28": { "name": "keyword.operator.arithmetic.js.jsx" }, "29": { "name": "keyword.operator.increment-decrement.js.jsx" }, "30": { "name": "keyword.operator.increment-decrement.js.jsx" }, "31": { "name": "keyword.operator.arithmetic.js.jsx" }, "32": { "name": "keyword.operator.assignment.js.jsx" }, "33": { "name": "keyword.operator.arithmetic.js.jsx" }, "34": { "name": "keyword.operator.logical.prefix.js.jsx" }, "35": { "name": "keyword.operator.relational.js.jsx" }, "36": { "name": "keyword.operator.relational.js.jsx" }, "37": { "name": "keyword.operator.bitwise.js.jsx" }, "38": { "name": "keyword.operator.bitwise.js.jsx" }, "39": { "name": "keyword.operator.bitwise.js.jsx" }, "40": { "name": "keyword.operator.arithmetic.js.jsx" }, "41": { "name": "keyword.operator.arithmetic.js.jsx" }, "42": { "name": "keyword.operator.arithmetic.js.jsx" }, "43": { "name": "keyword.operator.logical.prefix.js.jsx" } } }, "operators": { "match": "\\.\\.\\.", "name": "keyword.operator.js.jsx" }, "scope-punctuation-bracket-round": { "match": "\\(|\\)", "name": "punctuation.bracket.round.js.jsx" }, "scope-punctuation-bracket-square": { "match": "\\[|\\]", "name": "punctuation.bracket.square.js.jsx" }, "scope-punctuation-accessor-optional": { "match": "\\?\\.", "name": "punctuation.accessor.optional.js.jsx" }, "scope-punctuation-bracket-curly": { "match": "\\{|\\}", "name": "punctuation.bracket.curly.js.jsx" }, "punctuation": { "match": "\\?|:", "name": "punctuation.js.jsx" }, "expr-scope-keyword-control-loop": { "match": "\\b(in)\\b", "name": "keyword.control.loop.js.jsx" }, "expr-scope-keyword-control-flow": { "match": "\\b(yield)\\b", "name": "keyword.control.flow.js.jsx" }, "expr-scope-keyword-other": { "match": "\\b(target|meta)\\b", "name": "keyword.other.js.jsx" }, "expr-scope-storage-modifier": { "match": "\\b(async)\\b", "name": "storage.modifier.js.jsx" }, "expression": { "patterns": [ { "include": "#code-block" }, { "include": "#jsx-self-closing-element-in-expression" }, { "include": "#jsx-element-in-expression" }, { "include": "#jsx-fragment-in-expression" }, { "include": "#shebang" }, { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#regex-literal-prefix-ops" }, { "include": "#regex" }, { "include": "#qstring-double" }, { "include": "#qstring-single" }, { "include": "#template" }, { "include": "#decorator" }, { "include": "#object-method-key" }, { "include": "#arrow-function-params" }, { "include": "#ternary-expression" }, { "include": "#function-declaration" }, { "include": "#function-anon-declaration" }, { "include": "#class-declaration" }, { "include": "#extends-definition" }, { "include": "#import-export-all" }, { "include": "#hexnumber" }, { "include": "#octalnumber" }, { "include": "#binarynumber" }, { "include": "#bigint" }, { "include": "#number" }, { "include": "#scope-keyword-operator-expression" }, { "include": "#expr-scope-keyword-control-loop" }, { "include": "#expr-scope-keyword-control-flow" }, { "include": "#scope-keyword-control-import" }, { "include": "#scope-keyword-control-from-from" }, { "include": "#expr-scope-keyword-other" }, { "include": "#scope-storage-type-class" }, { "include": "#scope-keyword-other-extends" }, { "include": "#expr-scope-storage-modifier" }, { "include": "#scope-storage-type-function" }, { "include": "#scope-storage-type-function-arrow" }, { "include": "#scope-constant-language-boolean-true" }, { "include": "#scope-constant-language-boolean-false" }, { "include": "#scope-constant-language-null" }, { "include": "#this-literal" }, { "include": "#super-literal" }, { "include": "#scope-support-class" }, { "include": "#scope-support-variable" }, { "include": "#method-call" }, { "include": "#known-property-access" }, { "include": "#property-access" }, { "include": "#operator-overrides" }, { "include": "#operators" }, { "include": "#punctuation-accessor" }, { "include": "#scope-punctuation-bracket-round" }, { "include": "#punctuation-comma" }, { "include": "#scope-punctuation-bracket-square" }, { "include": "#scope-punctuation-accessor-optional" }, { "include": "#scope-punctuation-bracket-curly" }, { "include": "#punctuation-semicolon" }, { "include": "#punctuation" }, { "include": "#arrow-parameter" }, { "include": "#function-call" }, { "include": "#ident" }, { "include": "#privatefield" } ] }, "qstring-double": { "name": "string.quoted.double.js.jsx", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.js.jsx" } }, "end": "\"|$", "endCaptures": { "0": { "name": "punctuation.definition.string.end.js.jsx" } }, "patterns": [ { "match": "\\\\(?:[nrtbfv0'\"\\\\]|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\})", "name": "constant.character.escape.js.jsx" } ] }, "qstring-single": { "name": "string.quoted.single.js.jsx", "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.js.jsx" } }, "end": "'|$", "endCaptures": { "0": { "name": "punctuation.definition.string.end.js.jsx" } }, "patterns": [ { "match": "\\\\(?:[nrtbfv0'\"\\\\]|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\})", "name": "constant.character.escape.js.jsx" } ] }, "punctuation-comma": { "match": ",", "name": "punctuation.separator.comma.js.jsx" }, "punctuation-semicolon": { "match": ";", "name": "punctuation.terminator.statement.js.jsx" }, "punctuation-accessor": { "match": "\\.", "name": "punctuation.accessor.js.jsx" }, "regex": { "name": "string.regexp.js.jsx", "begin": "(?:(?<=[=|\\^&<>+\\-*%~(,.\\[?:{;])|(?<=\\binstanceof)|(?<=\\bin)|(?<=\\bextends)|(?<=\\byield)|(?<=\\bget)|(?<=\\bset)|(?<=\\basync)|(?<=\\belse)|(?<=\\bdo)|(?<=\\breturn)|(?<=\\bthrow)|(?<=\\btry)|(?<=\\bfinally)|(?<=\\bcatch)|(?<=\\bof)|(?<=\\bcase)|(?<=\\bexport)|(?<=\\bdefault)|(?<=\\bimport)|(?<=\\bstatic)|(?<=\\btypeof)|(?<=\\bvoid)|(?<=\\bdelete)|(?<=\\bawait)|(?<=^))\\s*(?:((?:/\\*\\*(?!/)[\\s\\S]*?\\*/|/\\*[\\s\\S]*?\\*/)\\s*))?(/)(?![*/])", "beginCaptures": { "1": { "name": "comment.block.js.jsx" }, "2": { "name": "punctuation.definition.string.begin.regexp.js.jsx" } }, "end": "(/)([a-z]*)", "endCaptures": { "1": { "name": "punctuation.definition.string.end.regexp.js.jsx" }, "2": { "name": "keyword.other.regexp.js.jsx" } }, "patterns": [ { "include": "#regexp" } ] }, "parameter-name": { "match": "(?<=[,(])\\s*(\\.\\.\\.)?\\s*((?:[a-zA-Z_$\\p{L}\\p{Nl}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})(?:[a-zA-Z0-9_$\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}]|\\\\u[0-9A-Fa-f]{4}|\\\\u\\{[0-9A-Fa-f]+\\})*)(?=\\s*[,)=])", "captures": { "1": { "name": "keyword.operator.spread.js.jsx" }, "2": { "name": "variable.parameter.js.jsx" } } }, "directives": { "name": "comment.line.triple-slash.js.jsx", "match": "///[ \\t]*<[^\\n]*" }, "this-literal": { "match": "\\b(this)\\b", "name": "variable.language.this.js.jsx" }, "super-literal": { "match": "\\b(super)\\b", "name": "variable.language.super.js.jsx" }, "jsx-entities": { "match": "(&)(#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*)(;)", "captures": { "1": { "name": "punctuation.definition.entity.js.jsx" }, "2": { "name": "constant.character.entity.js.jsx" }, "3": { "name": "punctuation.definition.entity.js.jsx" } } }, "comment": { "patterns": [ { "include": "#jsdoc" }, { "include": "#directives" }, { "include": "#linecomment" }, { "include": "#blockcomment" } ] }, "string": { "patterns": [ { "include": "#qstring-single" }, { "include": "#qstring-double" }, { "include": "#template" } ] }, "boolean-literal": { "patterns": [ { "include": "#scope-constant-language-boolean-true" }, { "include": "#scope-constant-language-boolean-false" } ] }, "numeric-literal": { "patterns": [ { "include": "#hexnumber" }, { "include": "#binarynumber" }, { "include": "#octalnumber" }, { "include": "#number" }, { "include": "#bigint" } ] } } }