; Variables (identifier) @variable (call_expression function: (member_expression object: (identifier) @type (#any-of? @type "Promise" "Array" "Object" "Map" "Set" "WeakMap" "WeakSet" "Date" "Error" "TypeError" "RangeError" "SyntaxError" "ReferenceError" "EvalError" "URIError" "RegExp" "Function" "Number" "String" "Boolean" "Symbol" "BigInt" "Proxy" "ArrayBuffer" "DataView"))) ; Properties (property_identifier) @property (shorthand_property_identifier) @property (shorthand_property_identifier_pattern) @property (private_property_identifier) @property ; Function and method calls (call_expression function: (identifier) @function) (call_expression function: (member_expression property: [ (property_identifier) (private_property_identifier) ] @function.method)) (new_expression constructor: (identifier) @type) (nested_type_identifier module: (identifier) @type) ; Function and method definitions (function_expression name: (identifier) @function) (function_declaration name: (identifier) @function) (method_definition name: [ (property_identifier) (private_property_identifier) ] @function.method) (method_definition name: (property_identifier) @constructor (#eq? @constructor "constructor")) (pair key: [ (property_identifier) (private_property_identifier) ] @function.method value: [ (function_expression) (arrow_function) ]) (assignment_expression left: (member_expression property: [ (property_identifier) (private_property_identifier) ] @function.method) right: [ (function_expression) (arrow_function) ]) (variable_declarator name: (identifier) @function value: [ (function_expression) (arrow_function) ]) (assignment_expression left: (identifier) @function right: [ (function_expression) (arrow_function) ]) ; Parameters (required_parameter (identifier) @variable.parameter) (required_parameter (_ ([ (identifier) (shorthand_property_identifier_pattern) ]) @variable.parameter)) (optional_parameter (identifier) @variable.parameter) (optional_parameter (_ ([ (identifier) (shorthand_property_identifier_pattern) ]) @variable.parameter)) (catch_clause parameter: (identifier) @variable.parameter) (index_signature name: (identifier) @variable.parameter) (arrow_function parameter: (identifier) @variable.parameter) ; Special identifiers ; (type_identifier) @type (predefined_type) @type.builtin (class_declaration (type_identifier) @type.class) (extends_clause value: (identifier) @type.class) ([ (identifier) (shorthand_property_identifier) (shorthand_property_identifier_pattern) ] @constant (#match? @constant "^_*[A-Z_][A-Z\\d_]*$")) ; Literals (this) @variable.special (super) @variable.special [ (null) (undefined) ] @constant.builtin [ (true) (false) ] @boolean (comment) @comment (hash_bang_line) @comment [ (string) (template_string) ] @string (escape_sequence) @string.escape (regex) @string.regex (regex_flags) @keyword.operator.regex (number) @number ; Tokens [ ";" "?." "." "," ":" ] @punctuation.delimiter [ "-" "--" "-=" "+" "++" "+=" "*" "*=" "**" "**=" "/" "/=" "%" "%=" "<" "<=" "<<" "<<=" "=" "==" "===" "!" "!=" "!==" "=>" ">" ">=" ">>" ">>=" ">>>" ">>>=" "~" "^" "&" "|" "^=" "&=" "|=" "&&" "||" "??" "&&=" "||=" "??=" "..." ] @operator (regex "/" @string.regex) [ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket (ternary_expression [ "?" ":" ] @operator) [ "abstract" "as" "async" "await" "debugger" "declare" "default" "delete" "extends" "get" "implements" "in" "instanceof" "keyof" "module" "namespace" "new" "of" "override" "private" "protected" "public" "readonly" "set" "static" "target" "typeof" "using" "void" "with" ] @keyword [ "const" "let" "var" "function" "class" "enum" "interface" "type" ] @keyword.declaration [ "export" "from" "import" ] @keyword.import [ "break" "case" "catch" "continue" "do" "else" "finally" "for" "if" "return" "switch" "throw" "try" "while" "yield" ] @keyword.control (switch_default "default" @keyword.control) (template_substitution "${" @punctuation.special "}" @punctuation.special) @embedded (type_arguments "<" @punctuation.bracket ">" @punctuation.bracket) (decorator "@" @punctuation.special) ; JSX elements (jsx_opening_element [ (identifier) @type (member_expression object: (identifier) @type property: (property_identifier) @type) ]) (jsx_closing_element [ (identifier) @type (member_expression object: (identifier) @type property: (property_identifier) @type) ]) (jsx_self_closing_element [ (identifier) @type (member_expression object: (identifier) @type property: (property_identifier) @type) ]) (jsx_opening_element (identifier) @tag.jsx (#match? @tag.jsx "^[a-z][^.]*$")) (jsx_closing_element (identifier) @tag.jsx (#match? @tag.jsx "^[a-z][^.]*$")) (jsx_self_closing_element (identifier) @tag.jsx (#match? @tag.jsx "^[a-z][^.]*$")) (jsx_attribute (property_identifier) @attribute.jsx) (jsx_opening_element ([ "<" ">" ]) @punctuation.bracket.jsx) (jsx_closing_element ([ "" ]) @punctuation.bracket.jsx) (jsx_self_closing_element ([ "<" "/>" ]) @punctuation.bracket.jsx) (jsx_attribute "=" @punctuation.delimiter.jsx) (jsx_text) @text.jsx (html_character_reference) @string.special