fileTypes jsx name JavaScriptReact patterns include #expression repository access-modifier match \b(public|protected|private)\b name storage.modifier.ts.jsx arithmetic-operator match \*|/|\-\-|\-|\+\+|\+|% name keyword.operator.arithmetic.ts.jsx array-literal begin \[ beginCaptures 0 name meta.brace.square.ts.jsx end \] endCaptures 0 name meta.brace.square.ts.jsx name meta.array.literal.ts.jsx patterns include #expression assignment-operator match <<=|>>=|>>>=|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^= name keyword.operator.assignment.ts.jsx block begin \{ beginCaptures 0 name meta.brace.curly.ts.jsx end \} endCaptures 0 name meta.brace.curly.ts.jsx name meta.block.ts.jsx patterns include #object-member include #expression boolean-literal match \b(false|true)\b name constant.language.boolean.ts.jsx case-clause begin (?<!\.)\b(case|default)\b beginCaptures 1 name keyword.control.ts.jsx end : name case-clause.expr.ts.jsx patterns include #expression comment name comment.ts.jsx patterns include #comment-block-doc include #comment-block include #comment-line comment-block begin /\* end \*/ name comment.block.ts.jsx comment-block-doc begin /\*\*(?!/) end \*/ name comment.block.documentation.ts.jsx comment-line match (//).*$\n? name comment.line.ts.jsx control-statement match (?<!\.)\b(break|catch|continue|debugger|declare|do|else|finally|for|if|return|switch|throw|try|while|with|super|switch|case)\b name keyword.control.ts.jsx decl-block begin \{ beginCaptures 0 name meta.brace.curly.ts.jsx end \} endCaptures 0 name meta.brace.curly.ts.jsx name meta.decl.block.ts.jsx patterns include #expression declaration name meta.declaration.ts.jsx patterns include #function-declaration include #object-declaration include #type-declaration include #enum-declaration enum-declaration captures 1 name storage.modifier.ts.jsx 2 name storage.type.ts.jsx 3 name entity.name.class.ts.jsx match (?:\b(const)\s+)?\b(enum)\s+([a-zA-Z_$][\w$]*) name meta.enum.declaration.ts.jsx expression name meta.expression.ts.jsx patterns include #jsx include #for-in-simple include #string include #regex include #template include #comment include #literal include #paren-expression include #var-expr include #declaration include #new-expr include #switch-statement include #block include #expression-operator include #relational-operator include #arithmetic-operator include #logic-operator include #assignment-operator include #storage-keyword include #function-call include #case-clause include #control-statement expression-operator match =>|\b(delete|export|import|from|in|instanceof|module|namespace|new|typeof|void|as)\b name keyword.operator.ts.jsx field-declaration begin (?<!\()\s*((?:\b[a-zA-Z_$][\w$]*)|(?:\'[^']*\')|(?:\"[^"]*\"))\s*(\?\s*)?(?=(=|:)) beginCaptures 1 name variable.ts.jsx 2 name keyword.operator.ts.jsx end (?=\}|;|,|$)|(?<=\}) name meta.field.declaration.ts.jsx patterns include #expression for-in-simple captures 1 name storage.type.ts.jsx 3 name keyword.operator.ts.jsx match (?<=\()\s*\b(var|let|const)\s+([a-zA-Z_$][\w$]*)\s+(in|of)\b name forin.expr.ts.jsx function-call name functioncall.expr.ts.jsx patterns include #type-parameters include #paren-expression function-declaration begin \b(?:(export)\s+)?(function\b)(?:\s+([a-zA-Z_$][\w$]*))?\s* beginCaptures 1 name storage.modifier.ts.jsx 2 name storage.type.function.ts.jsx 3 name entity.name.function.ts.jsx end (?=;|\})|(?<=\}) name meta.function.ts.jsx patterns include #comment include #type-parameters include #function-type-parameters include #return-type include #function-overload-declaration include #decl-block function-overload-declaration captures 1 name storage.modifier.ts.jsx 2 name storage.type.function.ts.jsx 3 name entity.name.function.ts.jsx match \b(?:(export)\s+)?(function\b)(?:\s+([a-zA-Z_$][\w$]*))?\s* name meta.function.overload.ts.jsx function-type-parameters begin \( beginCaptures 0 name meta.brace.round.ts.jsx end \) endCaptures 0 name meta.brace.round.ts.jsx name meta.function.type.parameter.ts.jsx patterns include #comment include #parameter-name include #type-annotation include #variable-initializer indexer-declaration begin \[ beginCaptures 0 name meta.brace.square.ts.jsx end (\])\s*(\?\s*)?|$ endCaptures 1 name meta.brace.square.ts.jsx 2 name keyword.operator.ts.jsx name meta.indexer.declaration.ts.jsx patterns include #type-annotation include #indexer-parameter include #expression indexer-parameter captures 1 name variable.parameter.ts.jsx match ([a-zA-Z_$][\w$]*)(?=\:) name meta.indexer.parameter.ts.jsx jsx name meta.jsx.ts.jsx patterns include #jsx-tag-without-attributes include #jsx-tag-open include #jsx-tag-close include #jsx-tag-invalid begin (?<=(?:'|"|})>) end (?=</) name meta.jsx.children.ts.jsx patterns include #jsx-children jsx-children patterns include #jsx-tag-without-attributes include #jsx-tag-open include #jsx-tag-close include #jsx-tag-invalid include #jsx-evaluated-code include #jsx-entities jsx-entities patterns captures 1 name punctuation.definition.entity.ts.jsx 3 name punctuation.definition.entity.ts.jsx match (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) name constant.character.entity.ts.jsx match & name invalid.illegal.bad-ampersand.ts.jsx jsx-evaluated-code begin { beginCaptures 0 name punctuation.definition.brace.curly.start.ts.jsx end } endCaptures 0 name punctuation.definition.brace.curly.end.ts.jsx name meta.brace.curly.ts.jsx patterns include #expression jsx-string-double-quoted begin " beginCaptures 0 name punctuation.definition.string.begin.ts.jsx end " endCaptures 0 name punctuation.definition.string.end.ts.jsx name string.quoted.double.ts.jsx patterns include #jsx-entities jsx-string-single-quoted begin ' beginCaptures 0 name punctuation.definition.string.begin.ts.jsx end ' endCaptures 0 name punctuation.definition.string.end.ts.jsx name string.quoted.single.ts.jsx patterns include #jsx-entities jsx-tag-attribute-assignment match =(?=\s*(?:'|"|{|/\*|//|\n)) name keyword.operator.assignment.ts.jsx jsx-tag-attribute-name captures 1 name entity.other.attribute-name.ts.jsx match (?x) \s* ([_$a-zA-Z][-$\w]*) (?=\s|=|/?>|/\*|//) name meta.tag.attribute-name.ts.jsx jsx-tag-attributes patterns include #jsx-tag-attribute-name include #jsx-tag-attribute-assignment include #jsx-string-double-quoted include #jsx-string-single-quoted include #jsx-evaluated-code jsx-tag-attributes-illegal match \S+ name invalid.illegal.attribute.ts.jsx jsx-tag-close begin (</)([_$a-zA-Z][-$\w.]*(?<!\.|-)) beginCaptures 1 name punctuation.definition.tag.begin.ts.jsx 2 name entity.name.tag.ts.jsx end (>) endCaptures 1 name punctuation.definition.tag.end.ts.jsx name tag.close.ts.jsx patterns include #comment jsx-tag-invalid match <\s*> name invalid.illegal.tag.incomplete.ts.jsx jsx-tag-open begin (?x) (<) ([_$a-zA-Z][-$\w.]*(?<!\.|-)) (?=\s+(?!\?)|/?>) beginCaptures 1 name punctuation.definition.tag.begin.ts.jsx 2 name entity.name.tag.ts.jsx end (/?>) endCaptures 1 name punctuation.definition.tag.end.ts.jsx name tag.open.ts.jsx patterns include #comment include #jsx-tag-attributes include #jsx-tag-attributes-illegal jsx-tag-without-attributes begin (<)([_$a-zA-Z][-$\w.]*(?<!\.|-))(>) beginCaptures 1 name punctuation.definition.tag.begin.ts.jsx 2 name entity.name.tag.ts.jsx 3 name punctuation.definition.tag.end.ts.jsx end (</)([_$a-zA-Z][-$\w.]*(?<!\.|-))(>) endCaptures 1 name punctuation.definition.tag.begin.ts.jsx 2 name entity.name.tag.ts.jsx 3 name punctuation.definition.tag.end.ts.jsx name tag.without-attributes.ts.jsx patterns include #jsx-children literal name literal.ts.jsx patterns include #numeric-literal include #boolean-literal include #null-literal include #undefined-literal include #array-literal include #this-literal logic-operator match \!|&|~|\||&&|\|\| name keyword.operator.arithmetic.ts.jsx method-declaration begin \b(?:(abstract)\s+)?\b(?:(public|private|protected)\s+)?(?:(get|set)\s+)?(?:(new)|(?:([a-zA-Z_$][\.\w$]*)\s*(\??)))?\s*(?=\(|\<) beginCaptures 1 name storage.modifier.ts.jsx 2 name storage.modifier.ts.jsx 3 name storage.type.property.ts.jsx 4 name keyword.operator.ts.jsx 5 name entity.name.function.ts.jsx 6 name keyword.operator.ts.jsx end (?=\}|;|,)|(?<=\}) name meta.method.declaration.ts.jsx patterns include #comment include #type-parameters include #function-type-parameters include #type-annotation include #method-overload-declaration include #decl-block method-overload-declaration captures 1 name storage.modifier.ts.jsx 2 name keyword.operator.ts.jsx 3 name entity.name.function.ts.jsx 4 name keyword.operator.ts.jsx match \b(?:(public|private|protected)\s+)?(?:(new)|(?:([a-zA-Z_$][\.\w$]*)\s*(\??)))?\s*(?=\(|\<) name meta.method.overload.declaration.ts.jsx new-expr begin \b(new)\b beginCaptures 1 name keyword.operator.ts.jsx end (?=[(;]|$) name new.expr.ts.jsx patterns include #type null-literal match \b(null)\b name constant.language.null.ts.jsx numeric-literal match \b(?<=[^$])((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?))\b name constant.numeric.ts.jsx object-body begin \{ beginCaptures 0 name meta.brace.curly.ts.jsx end \} endCaptures 0 name meta.brace.curly.ts.jsx name meta.object.body.ts.jsx patterns include #string include #comment include #field-declaration include #method-declaration include #indexer-declaration include #type-annotation include #variable-initializer include #access-modifier include #static-modifier include #property-accessor object-declaration begin \b(?:(export)\s+)?\b(?:(abstract)\s+)?\b(?<!\.)(class|interface)\b beginCaptures 1 name storage.modifier.ts.jsx 2 name storage.modifier.ts.jsx 3 name storage.type.ts.jsx end (?<=\}) endCaptures 1 name brace.curly.ts.jsx name meta.declaration.object.ts.jsx patterns include #comment include #object-heritage include #object-name include #type-parameters include #object-body object-heritage begin (?:\b(extends|implements)) beginCaptures 1 name keyword.other.ts.jsx end (?=\{) endCaptures 1 name brace.curly.ts.jsx name meta.object.heritage.ts.jsx patterns include #comment include #object-heritage include #type-parameters include #object-heritage-parent object-heritage-parent captures 1 name storage.type.ts.jsx match (?:\s*([a-zA-Z_$][\w$]*)) name meta.object.heritage.parent.ts.jsx object-member begin [a-zA-Z_$][\w$]*\s*: end (?=,|\}) name meta.object.member.ts.jsx patterns include #expression object-name captures 0 name entity.name.class.ts.jsx match [a-zA-Z_$][\w$]* name meta.object.name.ts.jsx parameter-name captures 1 name storage.modifier.ts.jsx 2 name keyword.operator.ts.jsx 3 name variable.parameter.ts.jsx 4 name keyword.operator.ts.jsx match (?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*([a-zA-Z_$][\w$]*)\s*(\??) name parameter.name.ts.jsx paren-expression begin \( beginCaptures 0 name meta.brace.paren.ts.jsx end \) endCaptures 0 name meta.brace.paren.ts.jsx patterns include #expression property-accessor match \b(get|set)\b name storage.type.property.ts.jsx qstring-double begin " end "|(?=$) name string.double.ts.jsx patterns include #string-character-escape qstring-single begin ' end '|(?=$) name string.single.ts.jsx patterns include #string-character-escape regex begin (?<=[=(:,\[]|^|return|&&|\|\||!)\s*(/)(?![/*+{}?]) end $|(/)[igm]* name string.regex.ts.jsx patterns match \\. name constant.character.escape.ts.jsx match \[(\\\]|[^\]])*\] name constant.character.class.ts.jsx relational-operator match ===|==|=|!=|!==|<=|>=|<>|<|> name keyword.operator.comparison.ts.jsx return-type begin (?<=\))\s*: end (?=$)|(?=\{|;|//) name meta.return.type.ts.jsx patterns include #type static-modifier match \b(static)\b name keyword.other.ts.jsx storage-keyword match \b(number|boolean|string|any|var|let|function|const)\b name storage.type.ts.jsx string name string.ts.jsx patterns include #qstring-single include #qstring-double string-character-escape match \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$) name constant.character.escape switch-block begin { end (?=\}) name switch-block.expr.ts.jsx patterns include #expression switch-expression begin \b(switch)\b\s*\( beginCaptures 1 name keyword.operator.ts.jsx end \) name switch-expression.expr.ts.jsx patterns include #expression switch-statement begin (?=\bswitch\b\s*\() end } name switch-statement.expr.ts.jsx patterns include #switch-expression include #switch-block template begin ` beginCaptures 0 name string.template.ts.jsx end ` endCaptures 0 name string.template.ts.jsx name meta.template.ts.jsx patterns include #template-substitution-element include #template-string-contents template-string-contents begin .*? end (?=(\$\{|`)) name string.template.ts.jsx patterns include #string-character-escape template-substitution-element begin \$\{ beginCaptures 0 name keyword.operator.ts.jsx end \} endCaptures 0 name keyword.operator.ts.jsx name template.element.ts.jsx patterns include #expression this-literal match \b(this)\b name constant.language.this.ts.jsx type name meta.type.ts.jsx patterns include #type-primitive include #type-parameters include #type-tuple include #type-object include #type-operator include #type-paren-or-function-type-parameters include #type-function-return-type include #type-name type-annotation begin : end (?=$|[,);\}\]]|//)|(?==[^>])|(?<=[\}>\]\)]|[a-zA-Z_$])\s*(?=\{) name meta.type.annotation.ts.jsx patterns include #type include #string include #comment type-declaration begin \b(type)\b\s+([a-zA-Z_$][\w$]*)\s*=\s* beginCaptures 1 name keyword.other.ts.jsx 2 name storage.type.ts.jsx end (?=$|[,);>]|var|type|function|class|interface) name meta.type.declaration.ts.jsx patterns include #type type-function-return-type begin => beginCaptures 0 name keyword.operator.ts.jsx end (?=\s*[,\)\{=;>]|//|$) name meta.type.function.return.ts.jsx patterns include #type type-name captures 1 name entity.name.type.ts.jsx match [a-zA-Z_$][.\w$]* name meta.type.name.ts.jsx type-object begin \{ beginCaptures 0 name meta.brace.curly.ts.jsx end \} endCaptures 0 name meta.brace.curly.ts.jsx name meta.object.type.ts.jsx patterns include #comment include #field-declaration include #method-declaration include #indexer-declaration include #type-annotation type-operator match [.|] name keyword.operator.type.ts.jsx type-parameters begin ([a-zA-Z_$][\w$]*)?(<) beginCaptures 1 name entity.name.type.ts.jsx 2 name meta.brace.angle.ts.jsx end (?=$)|(>) endCaptures 2 name meta.brace.angle.ts.jsx name meta.type.parameters.ts.jsx patterns match \b(extends)\b name keyword.other.ts.jsx include #comment include #type type-paren-or-function-type-parameters begin (?:\b(new)\b)?\s*\( beginCaptures 1 name keyword.control.ts.jsx end \) name meta.type.paren.cover.ts.jsx patterns include #comment include #type include #function-type-parameters type-primitive captures 1 name storage.type.ts.jsx match \b(string|number|boolean|symbol|any|void)\b name meta.type.primitive.ts.jsx type-tuple begin \[ beginCaptures 0 name meta.brace.square.ts.jsx end \] endCaptures 0 name meta.brace.square.ts.jsx name meta.type.tuple.ts.jsx patterns include #type include #comment undefined-literal match \b(undefined)\b name constant.language.ts.jsx var-expr begin (?<!\()\s*\b(var|let|const(?!\s+enum)\b) beginCaptures 1 name storage.type.ts.jsx end (?=$|;) name meta.var.expr.ts.jsx patterns include #var-single-variable include #comment var-single-variable begin \b([a-zA-Z_$][\w$]*)\s*(=?) beginCaptures 1 name variable.ts.jsx end (?=$|[;,]) name meta.var-single-variable.expr.ts.jsx patterns include #type-annotation include #string include #comment include #expression variable-initializer begin (=) beginCaptures 1 name keyword.operator.ts.jsx end (?=$|[,);=]) patterns include #expression scopeName source.jsx uuid 805375ec-d614-41f5-8993-5843fe63ea82