nvim-treesitter/queries/python/highlights.scm

290 lines
6.6 KiB
Scheme
Raw Normal View History

;; From tree-sitter-python licensed under MIT License
; Copyright (c) 2016 Max Brunsfeld
; Variables
(identifier) @variable
2021-11-01 22:35:31 +01:00
; 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
2021-05-15 12:29:55 +02:00
(#any-of? @constant.builtin
;; https://docs.python.org/3/library/constants.html
"NotImplemented"
"Ellipsis"
"quit"
"exit"
"copyright"
"credits"
"license"))
((attribute
attribute: (identifier) @field)
2021-07-11 15:06:52 -05:00
(#match? @field "^([A-Z])@!.*$"))
((identifier) @type.builtin
2021-05-15 12:29:55 +02:00
(#any-of? @type.builtin
;; https://docs.python.org/3/library/exceptions.html
2021-05-15 12:29:55 +02:00
"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))
2021-07-11 15:06:52 -05:00
(#match? @function "^([A-Z])@!.*$"))
(decorator) @function
((decorator (identifier) @function)
2021-07-11 15:06:52 -05:00
(#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
2021-05-15 12:29:55 +02:00
"abs" "all" "any" "ascii" "bin" "bool" "breakpoint" "bytearray" "bytes" "callable" "chr" "classmethod"
"compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "exec" "filter" "float" "format"
2021-05-15 12:29:55 +02:00
"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
2020-09-07 18:14:54 +02:00
function: (identifier) @_isinstance
arguments: (argument_list
(_)
(identifier) @type))
2020-09-07 18:14:54 +02:00
(#eq? @_isinstance "isinstance"))
2020-11-03 18:50:26 +01:00
;; Normal parameters
(parameters
(identifier) @parameter)
2020-11-03 18:50:26 +01:00
;; Lambda parameters
(lambda_parameters
(identifier) @parameter)
(lambda_parameters
2020-11-03 18:50:26 +01:00
(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
2020-11-03 18:50:26 +01:00
(list_splat_pattern ; *args
(identifier) @parameter))
(parameters
2020-11-03 18:50:26 +01:00
(dictionary_splat_pattern ; **kwargs
(identifier) @parameter))
2020-11-03 18:50:26 +01:00
;; 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
[
"-"
"-="
2020-06-24 16:42:55 +02:00
":="
"!="
"*"
"**"
"**="
"*="
"/"
"//"
"//="
"/="
"&"
"&="
"%"
"%="
"^"
"^="
"+"
"+="
"<"
"<<"
"<<="
"<="
"<>"
"="
"=="
">"
">="
">>"
">>="
"@"
"@="
"|"
"|="
"~"
"->"
] @operator
; Keywords
[
"and"
"in"
"is"
"not"
"or"
"del"
] @keyword.operator
[
"def"
"lambda"
] @keyword.function
[
"assert"
2020-06-30 08:14:47 +02:00
"async"
"await"
"class"
"except"
"exec"
"finally"
"global"
"nonlocal"
"pass"
"print"
"raise"
"try"
"with"
"as"
] @keyword
[
"return"
"yield"
] @keyword.return
["from" "import"] @include
(aliased_import "as" @include)
["if" "elif" "else" "match" "case"] @conditional
["for" "while" "break" "continue"] @repeat
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
(interpolation
"{" @punctuation.special
"}" @punctuation.special)
2021-11-12 13:26:38 -05:00
["," "." ":" ";" (ellipsis)] @punctuation.delimiter
;; Class definitions
2021-07-11 15:06:52 -05:00
(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
2020-11-28 22:25:27 +01:00
left: (identifier) @field))))
2021-07-11 15:06:52 -05:00
(#match? @field "^([A-Z])@!.*$"))
2020-11-28 22:25:27 +01:00
((class_definition
body: (block
(expression_statement
(assignment
2021-11-01 10:46:24 -05:00
left: (_
2020-11-28 22:25:27 +01:00
(identifier) @field)))))
2021-07-11 15:06:52 -05:00
(#match? @field "^([A-Z])@!.*$"))
((class_definition
(block
(function_definition
name: (identifier) @constructor)))
2021-05-15 12:29:55 +02:00
(#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