; From tree-sitter-python licensed under MIT License ; Copyright (c) 2016 Max Brunsfeld ; Variables (identifier) @variable ; Reset highlighting in f-string interpolations (interpolation) @none ; Identifier naming conventions ((identifier) @type (#lua-match? @type "^[A-Z].*[a-z]")) ((identifier) @constant (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) ((identifier) @constant.builtin (#lua-match? @constant.builtin "^__[a-zA-Z0-9_]*__$")) ((identifier) @constant.builtin (#any-of? @constant.builtin ; https://docs.python.org/3/library/constants.html "NotImplemented" "Ellipsis" "quit" "exit" "copyright" "credits" "license")) "_" @constant.builtin ; match wildcard ((attribute attribute: (identifier) @variable.member) (#lua-match? @variable.member "^[%l_].*$")) ((assignment left: (identifier) @type.definition (type (identifier) @_annotation)) (#eq? @_annotation "TypeAlias")) ((assignment left: (identifier) @type.definition right: (call function: (identifier) @_func)) (#any-of? @_func "TypeVar" "NewType")) ; Function calls (call function: (identifier) @function.call) (call function: (attribute attribute: (identifier) @function.method.call)) ((call function: (identifier) @constructor) (#lua-match? @constructor "^%u")) ((call function: (attribute attribute: (identifier) @constructor)) (#lua-match? @constructor "^%u")) ; Decorators ((decorator "@" @attribute) (#set! "priority" 101)) (decorator (identifier) @attribute) (decorator (attribute attribute: (identifier) @attribute)) (decorator (call (identifier) @attribute)) (decorator (call (attribute attribute: (identifier) @attribute))) ((decorator (identifier) @attribute.builtin) (#any-of? @attribute.builtin "classmethod" "property" "staticmethod")) ; Builtin functions ((call function: (identifier) @function.builtin) (#any-of? @function.builtin "abs" "all" "any" "ascii" "bin" "bool" "breakpoint" "bytearray" "bytes" "callable" "chr" "classmethod" "compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "exec" "filter" "float" "format" "frozenset" "getattr" "globals" "hasattr" "hash" "help" "hex" "id" "input" "int" "isinstance" "issubclass" "iter" "len" "list" "locals" "map" "max" "memoryview" "min" "next" "object" "oct" "open" "ord" "pow" "print" "property" "range" "repr" "reversed" "round" "set" "setattr" "slice" "sorted" "staticmethod" "str" "sum" "super" "tuple" "type" "vars" "zip" "__import__")) ; Function definitions (function_definition name: (identifier) @function) (type (identifier) @type) (type (subscript (identifier) @type)) ; type subscript: Tuple[int] ((call function: (identifier) @_isinstance arguments: (argument_list (_) (identifier) @type)) (#eq? @_isinstance "isinstance")) ; Normal parameters (parameters (identifier) @variable.parameter) ; Lambda parameters (lambda_parameters (identifier) @variable.parameter) (lambda_parameters (tuple_pattern (identifier) @variable.parameter)) ; Default parameters (keyword_argument name: (identifier) @variable.parameter) ; Naming parameters on call-site (default_parameter name: (identifier) @variable.parameter) (typed_parameter (identifier) @variable.parameter) (typed_default_parameter name: (identifier) @variable.parameter) ; Variadic parameters *args, **kwargs (parameters (list_splat_pattern ; *args (identifier) @variable.parameter)) (parameters (dictionary_splat_pattern ; **kwargs (identifier) @variable.parameter)) ; Typed variadic parameters (parameters (typed_parameter (list_splat_pattern ; *args: type (identifier) @variable.parameter))) (parameters (typed_parameter (dictionary_splat_pattern ; *kwargs: type (identifier) @variable.parameter))) ; Lambda parameters (lambda_parameters (list_splat_pattern (identifier) @variable.parameter)) (lambda_parameters (dictionary_splat_pattern (identifier) @variable.parameter)) ; Literals (none) @constant.builtin [ (true) (false) ] @boolean ((identifier) @variable.builtin (#eq? @variable.builtin "self")) ((identifier) @variable.builtin (#eq? @variable.builtin "cls")) (integer) @number (float) @number.float (comment) @comment @spell ((module . (comment) @keyword.directive) (#lua-match? @keyword.directive "^#!/")) (string) @string [ (escape_sequence) (escape_interpolation) ] @string.escape ; doc-strings (module . (comment)* . (expression_statement (string) @string.documentation @spell)) (class_definition body: (block . (expression_statement (string) @string.documentation @spell))) (function_definition body: (block . (expression_statement (string) @string.documentation @spell))) ; Tokens [ "-" "-=" ":=" "!=" "*" "**" "**=" "*=" "/" "//" "//=" "/=" "&" "&=" "%" "%=" "^" "^=" "+" "+=" "<" "<<" "<<=" "<=" "<>" "=" "==" ">" ">=" ">>" ">>=" "@" "@=" "|" "|=" "~" "->" ] @operator ; Keywords [ "and" "in" "is" "not" "or" "is not" "not in" "del" ] @keyword.operator [ "def" "lambda" ] @keyword.function [ "assert" "class" "exec" "global" "nonlocal" "pass" "print" "with" "as" "type" ] @keyword [ "async" "await" ] @keyword.coroutine [ "return" "yield" ] @keyword.return (yield "from" @keyword.return) (future_import_statement "from" @keyword.import "__future__" @constant.builtin) (import_from_statement "from" @keyword.import) "import" @keyword.import (aliased_import "as" @keyword.import) [ "if" "elif" "else" "match" "case" ] @keyword.conditional [ "for" "while" "break" "continue" ] @keyword.repeat [ "try" "except" "except*" "raise" "finally" ] @keyword.exception (raise_statement "from" @keyword.exception) (try_statement (else_clause "else" @keyword.exception)) [ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket (interpolation "{" @punctuation.special "}" @punctuation.special) (type_conversion) @function.macro [ "," "." ":" ";" (ellipsis) ] @punctuation.delimiter ; Class definitions (class_definition name: (identifier) @type) (class_definition body: (block (function_definition name: (identifier) @function.method))) (class_definition superclasses: (argument_list (identifier) @type)) ((class_definition body: (block (expression_statement (assignment left: (identifier) @variable.member)))) (#lua-match? @variable.member "^[%l_].*$")) ((class_definition body: (block (expression_statement (assignment left: (_ (identifier) @variable.member))))) (#lua-match? @variable.member "^[%l_].*$")) ((class_definition (block (function_definition name: (identifier) @constructor))) (#any-of? @constructor "__new__" "__init__")) ((identifier) @type.builtin (#any-of? @type.builtin ; https://docs.python.org/3/library/exceptions.html "BaseException" "Exception" "ArithmeticError" "BufferError" "LookupError" "AssertionError" "AttributeError" "EOFError" "FloatingPointError" "GeneratorExit" "ImportError" "ModuleNotFoundError" "IndexError" "KeyError" "KeyboardInterrupt" "MemoryError" "NameError" "NotImplementedError" "OSError" "OverflowError" "RecursionError" "ReferenceError" "RuntimeError" "StopIteration" "StopAsyncIteration" "SyntaxError" "IndentationError" "TabError" "SystemError" "SystemExit" "TypeError" "UnboundLocalError" "UnicodeError" "UnicodeEncodeError" "UnicodeDecodeError" "UnicodeTranslateError" "ValueError" "ZeroDivisionError" "EnvironmentError" "IOError" "WindowsError" "BlockingIOError" "ChildProcessError" "ConnectionError" "BrokenPipeError" "ConnectionAbortedError" "ConnectionRefusedError" "ConnectionResetError" "FileExistsError" "FileNotFoundError" "InterruptedError" "IsADirectoryError" "NotADirectoryError" "PermissionError" "ProcessLookupError" "TimeoutError" "Warning" "UserWarning" "DeprecationWarning" "PendingDeprecationWarning" "SyntaxWarning" "RuntimeWarning" "FutureWarning" "ImportWarning" "UnicodeWarning" "BytesWarning" "ResourceWarning" ; https://docs.python.org/3/library/stdtypes.html "bool" "int" "float" "complex" "list" "tuple" "range" "str" "bytes" "bytearray" "memoryview" "set" "frozenset" "dict" "type" "object")) ; Regex from the `re` module (call function: (attribute object: (identifier) @_re) arguments: (argument_list . (string (string_content) @string.regexp)) (#eq? @_re "re"))