;; 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")) ((attribute attribute: (identifier) @field) (#match? @field "^([A-Z])@!.*$")) ((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")) ; Function calls (decorator) @function ((decorator (attribute (identifier) @function)) (#match? @function "^([A-Z])@!.*$")) (decorator) @function ((decorator (identifier) @function) (#match? @function "^([A-Z])@!.*$")) (call function: (identifier) @function) (call function: (attribute attribute: (identifier) @method)) ((call function: (identifier) @constructor) (#lua-match? @constructor "^[A-Z]")) ((call function: (attribute attribute: (identifier) @constructor)) (#lua-match? @constructor "^[A-Z]")) ;; 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) @parameter) ;; Lambda parameters (lambda_parameters (identifier) @parameter) (lambda_parameters (tuple_pattern (identifier) @parameter)) ; Default parameters (keyword_argument name: (identifier) @parameter) ; Naming parameters on call-site (default_parameter name: (identifier) @parameter) (typed_parameter (identifier) @parameter) (typed_default_parameter (identifier) @parameter) ; Variadic parameters *args, **kwargs (parameters (list_splat_pattern ; *args (identifier) @parameter)) (parameters (dictionary_splat_pattern ; **kwargs (identifier) @parameter)) ;; Literals (none) @constant.builtin [(true) (false)] @boolean ((identifier) @variable.builtin (#eq? @variable.builtin "self")) (integer) @number (float) @float (comment) @comment (string) @string [ (escape_sequence) "{{" "}}" ] @string.escape ; Tokens [ "-" "-=" ":=" "!=" "*" "**" "**=" "*=" "/" "//" "//=" "/=" "&" "&=" "%" "%=" "^" "^=" "+" "+=" "<" "<<" "<<=" "<=" "<>" "=" "==" ">" ">=" ">>" ">>=" "@" "@=" "|" "|=" "~" "->" ] @operator ; Keywords [ "and" "in" "is" "not" "or" "del" ] @keyword.operator [ "def" "lambda" ] @keyword.function [ "assert" "async" "await" "class" "exec" "global" "nonlocal" "pass" "print" "with" "as" ] @keyword [ "return" "yield" ] @keyword.return (yield "from" @keyword.return) (import_from_statement "from" @include) "import" @include (aliased_import "as" @include) ["if" "elif" "else" "match" "case"] @conditional ["for" "while" "break" "continue"] @repeat [ "try" "except" "raise" "finally" ] @exception (try_statement (else_clause "else" @exception)) ["(" ")" "[" "]" "{" "}"] @punctuation.bracket (interpolation "{" @punctuation.special "}" @punctuation.special) ["," "." ":" ";" (ellipsis)] @punctuation.delimiter ;; Class definitions (class_definition name: (identifier) @type) (class_definition body: (block (function_definition name: (identifier) @method))) (class_definition superclasses: (argument_list (identifier) @type)) ((class_definition body: (block (expression_statement (assignment left: (identifier) @field)))) (#match? @field "^([A-Z])@!.*$")) ((class_definition body: (block (expression_statement (assignment left: (_ (identifier) @field))))) (#match? @field "^([A-Z])@!.*$")) ((class_definition (block (function_definition name: (identifier) @constructor))) (#any-of? @constructor "__new__" "__init__")) ; First parameter of a classmethod is cls. ((class_definition body: (block (decorated_definition (decorator (identifier) @_decorator) definition: (function_definition parameters: (parameters . (identifier) @variable.builtin))))) (#eq? @variable.builtin "cls") (#eq? @_decorator "classmethod")) ;; Error (ERROR) @error