blob: a85383a7f2df81295c4637187c3b3157e632d2af (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
; Zig highlights, from tree-sitter-grammars/tree-sitter-zig v1.1.2
; queries/highlights.scm (MIT). Reordered for later-patterns-win, capture names
; mapped onto zed syntax keys — upstream's keyword.* split collapses to
; @keyword, which zed themes colour as one — and the #lua-match? identifier
; heuristics rewritten as #match?, which this engine evaluates.
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
(payload "|" @punctuation.bracket)
[";" "," "." ":" "=>" "->"] @punctuation.delimiter
["=" "==" "!=" "<" ">" "<=" ">=" "+" "+%" "+|" "-" "-%" "-|" "*" "*%" "*|"
"**" "/" "%" "&" "|" "^" "~" "!" "||" "<<" "<<|" ">>" ".." ".*" ".?" "?"
"+=" "+%=" "+|=" "-=" "-%=" "-|=" "*=" "*%=" "*|=" "/=" "%=" "&=" "|=" "^="
"<<=" "<<|=" ">>="] @operator
["addrspace" "align" "allowzero" "and" "asm" "async" "await" "break"
"callconv" "catch" "comptime" "const" "continue" "defer" "else" "enum"
"errdefer" "error" "export" "extern" "fn" "for" "if" "inline" "linksection"
"noalias" "noinline" "nosuspend" "opaque" "or" "orelse" "packed" "pub"
"resume" "return" "struct" "suspend" "switch" "test" "threadlocal" "try"
"union" "usingnamespace" "var" "volatile" "while"] @keyword
(builtin_type) @type
["anyframe" "anytype"] @type
(parameter type: (identifier) @type)
(variable_declaration (identifier) @type "="
[(struct_declaration) (enum_declaration) (union_declaration)
(opaque_declaration)])
["null" "undefined" "unreachable"] @constant
(boolean) @constant
; an enum literal — .ok — is a member with nothing to its left
(field_expression . member: (identifier) @constant)
(enum_declaration (container_field type: (identifier) @constant))
(container_field name: (identifier) @property)
(field_initializer . (identifier) @property)
(field_expression (_) member: (identifier) @property)
; .x = 1 inside a Point{...} is a field, not the enum literal above
(initializer_list
(assignment_expression
left: (field_expression . member: (identifier) @property)))
(parameter name: (identifier) @variable.parameter)
(block_label (identifier) @label)
(break_label (identifier) @label)
(function_declaration name: (identifier) @function)
(call_expression function: (identifier) @function)
(call_expression function: (field_expression member: (identifier) @function.method))
(builtin_identifier) @function.builtin
; Zig has no type-identifier node, only the TitleCase convention, and these
; land after the call patterns so that the convention wins the way upstream's
; first-pattern-wins order has it: std.ArrayList(u8) is a type, not a call.
((identifier) @type
(#match? @type "^[A-Z][a-zA-Z0-9_]*$"))
((identifier) @constant
(#match? @constant "^[A-Z][A-Z0-9_]+$"))
[(integer) (float)] @number
[(string) (multiline_string) (character)] @string
(escape_sequence) @string.escape
(comment) @comment
((comment) @comment.doc
(#match? @comment.doc "^//[/!]"))
|