346 lines · 6.0 KB · Scheme
RawDownload
; Identifier naming conventions; these "soft conventions" should stay at the top of the file as they're often overridden(identifier) @variable (attribute  attribute: (identifier) @property) ; CamelCase for classes((identifier) @type.class  (#match? @type.class "^_*[A-Z][A-Za-z0-9_]*$")) ; ALL_CAPS for constants:((identifier) @constant  (#match? @constant "^_*[A-Z][A-Z0-9_]*$")) (type  (identifier) @type) (generic_type  (identifier) @type) (comment) @comment (string) @string (escape_sequence) @string.escape ; Type alias(type_alias_statement  "type" @keyword) ; TypeVar with constraints in type parameters(type  (tuple    (identifier) @type)) ; Forward references(type  (string) @type) ; Function calls(call  function: (attribute    attribute: (identifier) @function.method.call)) (call  function: (identifier) @function.call) (decorator  "@" @punctuation.special) (decorator  "@" @punctuation.special  [    (identifier) @function.decorator    (attribute      attribute: (identifier) @function.decorator)    (call      function: (identifier) @function.decorator.call)    (call      (attribute        attribute: (identifier) @function.decorator.call))  ]) ; Function and class definitions(function_definition  name: (identifier) @function.definition) ((call  function: (identifier) @_isinstance  arguments: (argument_list    (_)    (identifier) @type))  (#eq? @_isinstance "isinstance")) ((call  function: (identifier) @_issubclass  arguments: (argument_list    (identifier) @type    (identifier) @type))  (#eq? @_issubclass "issubclass")) ; Function arguments(function_definition  parameters: (parameters    [      (identifier) @variable.parameter ; Simple parameters      (typed_parameter        (identifier) @variable.parameter) ; Typed parameters      (default_parameter        name: (identifier) @variable.parameter) ; Default parameters      (typed_default_parameter        name: (identifier) @variable.parameter) ; Typed default parameters    ])) ; Keyword arguments(call  arguments: (argument_list    (keyword_argument      name: (identifier) @function.kwargs))) ; Class definitions and calling: needs to come after the regex matching above(class_definition  name: (identifier) @type.class.definition) (class_definition  superclasses: (argument_list    (identifier) @type.class.inheritance)) (call  function: (identifier) @type.class.call  (#match? @type.class.call "^_*[A-Z][A-Za-z0-9_]*$")) ; Builtins((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__")) ; Literals[  (true)  (false)] @boolean [  (none)  (ellipsis)] @constant.builtin [  (integer)  (float)] @number ; Self references[  (parameters    (identifier) @variable.special)  (attribute    (identifier) @variable.special)  (#any-of? @variable.special "self" "cls")] [  "."  ","  ":"] @punctuation.delimiter [  "("  ")"  "["  "]"  "{"  "}"] @punctuation.bracket (interpolation  "{" @punctuation.special  "}" @punctuation.special) @embedded ; Docstrings.([  (expression_statement    (assignment))  (type_alias_statement)]  .  (expression_statement    (string) @string.doc)+) (module  .  (expression_statement    (string) @string.doc)+) (class_definition  body: (block    .    (expression_statement      (string) @string.doc)+)) (function_definition  "async"?  "def"  name: (_)  (parameters)?  body: (block    .    (expression_statement      (string) @string.doc)+)) (class_definition  body: (block    .    (comment) @comment*    .    (expression_statement      (string) @string.doc)+)) (module  .  (comment) @comment*  .  (expression_statement    (string) @string.doc)+) (class_definition  body: (block    (expression_statement      (assignment))    .    (expression_statement      (string) @string.doc)+)) (class_definition  body: (block    (function_definition      name: (identifier) @function.method.constructor      (#eq? @function.method.constructor "__init__")      body: (block        (expression_statement          (assignment))        .        (expression_statement          (string) @string.doc)+)))) [  "-"  "-="  "!="  "*"  "**"  "**="  "*="  "/"  "//"  "//="  "/="  "&"  "%"  "%="  "@"  "^"  "+"  "->"  "+="  "<"  "<<"  "<="  "<>"  "="  ":="  "=="  ">"  ">="  ">>"  "|"  "~"  "&="  "<<="  ">>="  "@="  "^="  "|="] @operator [  "and"  "in"  "is"  "not"  "or"  "is not"  "not in"] @keyword.operator [  "as"  "assert"  "async"  "await"  "break"  "class"  "continue"  "def"  "del"  "elif"  "else"  "except"  "exec"  "finally"  "for"  "from"  "global"  "if"  "import"  "lambda"  "nonlocal"  "pass"  "print"  "raise"  "return"  "try"  "while"  "with"  "yield"  "match"  "case"] @keyword ; Definition keywords def, class, async def, lambda[  "async"  "def"  "class"  "lambda"] @keyword.definition (decorator  (identifier) @attribute.builtin  (#any-of? @attribute.builtin "classmethod" "staticmethod" "property")) ; Builtin types as identifiers[  (call    function: (identifier) @type.builtin)  (type    (identifier) @type.builtin)  (generic_type    (identifier) @type.builtin)  ; also check if type binary operator left identifier for union types  (type    (binary_operator      left: (identifier) @type.builtin))  (#any-of? @type.builtin    "bool" "bytearray" "bytes" "complex" "dict" "float" "frozenset" "int" "list" "memoryview"    "object" "range" "set" "slice" "str" "tuple")]