aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules4
m---------helix-syntax/languages/tree-sitter-zig0
-rw-r--r--languages.toml12
-rw-r--r--runtime/queries/zig/highlights.scm198
-rw-r--r--runtime/queries/zig/indents.toml12
5 files changed, 226 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules
index e750198a..0e015658 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -102,3 +102,7 @@
path = helix-syntax/languages/tree-sitter-protobuf
url = https://github.com/yusdacra/tree-sitter-protobuf.git
shallow = true
+[submodule "helix-syntax/languages/tree-sitter-zig"]
+ path = helix-syntax/languages/tree-sitter-zig
+ url = https://github.com/maxxnino/tree-sitter-zig
+ shallow = true
diff --git a/helix-syntax/languages/tree-sitter-zig b/helix-syntax/languages/tree-sitter-zig
new file mode 160000
+Subproject 049162bea8a44e1a4acd01b06e1c8672d9231a8
diff --git a/languages.toml b/languages.toml
index 47155523..1ca40377 100644
--- a/languages.toml
+++ b/languages.toml
@@ -233,3 +233,15 @@ indent = { tab-width = 4, unit = " " }
# comment-token = "--"
#
# indent = { tab-width = 2, unit = " " }
+
+[[language]]
+name = "zig"
+scope = "source.zig"
+injection-regex = "zig"
+file-types = ["zig"]
+roots = ["build.zig"]
+auto-format = true
+comment-token = "//"
+
+language-server = { command = "zls" }
+indent = { tab-width = 4, unit = " " }
diff --git a/runtime/queries/zig/highlights.scm b/runtime/queries/zig/highlights.scm
new file mode 100644
index 00000000..5a3d62dc
--- /dev/null
+++ b/runtime/queries/zig/highlights.scm
@@ -0,0 +1,198 @@
+[
+ (container_doc_comment)
+ (doc_comment)
+ (line_comment)
+] @comment
+
+; field in top level decl, and in struct, union...
+(ContainerField
+ (IDENTIFIER) @property
+ (SuffixExpr (IDENTIFIER) @type)?
+)
+
+; error.OutOfMemory;
+(SuffixExpr
+ "error"
+ "."
+ (IDENTIFIER) @constant
+)
+
+; var x: IDENTIFIER
+type: (SuffixExpr (IDENTIFIER) @type)
+
+; IDENTIFIER{}
+constructor: (SuffixExpr (IDENTIFIER) @constructor)
+
+; fields
+(FieldInit (IDENTIFIER) @property)
+
+; foo.bar.baz.function() calls
+(
+ (SuffixOp
+ (IDENTIFIER) @function
+ )
+ .
+ (FnCallArguments)
+)
+
+; function() calls
+(
+ (
+ (IDENTIFIER) @function
+ )
+ .
+ (FnCallArguments)
+)
+
+; functionn decl
+(FnProto
+ (IDENTIFIER) @function
+ (SuffixExpr (IDENTIFIER) @type)?
+ ("!")? @function.macro
+)
+
+; function parameters and types
+(ParamDecl
+ (IDENTIFIER) @variable.parameter
+ ":"
+ [
+ (ParamType (SuffixExpr (IDENTIFIER) @type))
+ (ParamType)
+ ]
+)
+
+; switch
+(SwitchItem
+ (SuffixExpr
+ "."
+ .
+ (IDENTIFIER) @constant
+ )
+)
+
+(INTEGER) @number
+
+(FLOAT) @number
+
+[
+ (STRINGLITERAL)
+ (STRINGLITERALSINGLE)
+] @string
+
+(CHAR_LITERAL) @string
+
+[
+ "allowzero"
+ "volatile"
+ "anytype"
+ "anyframe"
+ (BuildinTypeExpr)
+] @type.builtin
+
+(BreakLabel (IDENTIFIER) @label)
+(BlockLabel (IDENTIFIER) @label)
+
+[
+ "true"
+ "false"
+ "undefined"
+ "unreachable"
+ "null"
+] @constant.builtin
+
+[
+ "else"
+ "if"
+ "switch"
+ "for"
+ "while"
+ "return"
+ "break"
+ "continue"
+ "defer"
+ "errdefer"
+ "async"
+ "nosuspend"
+ "await"
+ "suspend"
+ "resume"
+ "try"
+ "catch"
+] @keyword.control
+
+[
+ "struct"
+ "enum"
+ "union"
+ "error"
+ "packed"
+ "opaque"
+ "test"
+ "usingnamespace"
+ "export"
+ "extern"
+ "const"
+ "var"
+ "comptime"
+ "threadlocal"
+] @keyword
+
+[
+ "pub"
+ "fn"
+] @keyword.function
+
+; PrecProc
+[
+ "inline"
+ "noinline"
+ "asm"
+ "callconv"
+ "noalias"
+] @attribute
+
+[
+ (BUILTINIDENTIFIER)
+ "linksection"
+ "align"
+] @function.builtin
+
+[
+ (CompareOp)
+ (BitwiseOp)
+ (BitShiftOp)
+ (AdditionOp)
+ (MultiplyOp)
+ (PrefixOp)
+ "or"
+ "and"
+ "orelse"
+ "*"
+ "**"
+ "->"
+ "=>"
+ ".?"
+ ".*"
+ "="
+] @operator
+
+[
+ ";"
+ "."
+ ","
+ ":"
+] @punctuation.delimiter
+
+[
+ ".."
+ "..."
+ "["
+ "]"
+ "("
+ ")"
+ "{"
+ "}"
+ (Payload "|")
+ (PtrPayload "|")
+ (PtrIndexPayload "|")
+] @punctuation
diff --git a/runtime/queries/zig/indents.toml b/runtime/queries/zig/indents.toml
new file mode 100644
index 00000000..e119078b
--- /dev/null
+++ b/runtime/queries/zig/indents.toml
@@ -0,0 +1,12 @@
+indent = [
+ "block",
+ "match_block",
+ "arguments",
+ "parameters"
+]
+
+outdent = [
+ "}",
+ "]",
+ ")"
+]