nvim-treesitter/queries/python/highlights.scm

283 lines
6.5 KiB
Scheme
Raw Permalink Normal View History

;; From tree-sitter-python licensed under MIT License
; Copyright (c) 2016 Max Brunsfeld
; Variables
(identifier) @variable
; Reset highlighing in f-string interpolations
(interpolation) @none
;; Identifier naming conventions
((identifier) @type
(#match? @type "^[A-Z].*[a-z]"))
((identifier) @constant
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
((identifier) @constant.builtin
(#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)
(#match? @constructor "^[A-Z]"))
((call
function: (attribute
attribute: (identifier) @constructor))
(#match? @constructor "^[A-Z]"))
;; Builtin functions
((call
function: (identifier) @function.builtin)
2021-05-15 12:29:55 +02:00
(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
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
2020-12-18 12:49:56 -05:00
(#match? @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"] @conditional
["for" "while" "break" "continue"] @repeat
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
(interpolation
"{" @punctuation.special
"}" @punctuation.special)
["," "." ":" (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
left: (_
(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 method is self or cls.
((class_definition
body: (block
(function_definition
parameters: (parameters . (identifier) @variable.builtin))))
2021-05-15 12:29:55 +02:00
(#any-of? @variable.builtin "self" "obj" "class"))
;; Error
(ERROR) @error