From 597ec69378c230bd7b4d3f55d552eb51f4f2afcd Mon Sep 17 00:00:00 2001 From: Himujjal Date: Tue, 23 Mar 2021 06:18:43 +0530 Subject: Added Zig grammar --- README.md | 1 + lockfile.json | 3 + lua/nvim-treesitter/parsers.lua | 9 ++ queries/zig/folds.scm | 15 ++++ queries/zig/highlights.scm | 183 ++++++++++++++++++++++++++++++++++++++++ queries/zig/indents.scm | 30 +++++++ queries/zig/locals.scm | 25 ++++++ 7 files changed, 266 insertions(+) create mode 100644 queries/zig/folds.scm create mode 100644 queries/zig/highlights.scm create mode 100644 queries/zig/indents.scm create mode 100644 queries/zig/locals.scm diff --git a/README.md b/README.md index dfe6b3ebc..f4c731268 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,7 @@ We are looking for maintainers to add more parsers and to write query files for - [x] [verilog](https://github.com/tree-sitter/tree-sitter-verilog) (maintained by @zegervdv) - [x] [vue](https://github.com/ikatyang/tree-sitter-vue) (maintained by @WhyNotHugo) - [ ] [yaml](https://github.com/ikatyang/tree-sitter-yaml) +- [ ] [zig](https://github.com/Himujjal/tree-sitter-zig) diff --git a/lockfile.json b/lockfile.json index 7f66f3af0..8b324eab2 100644 --- a/lockfile.json +++ b/lockfile.json @@ -166,5 +166,8 @@ }, "yaml": { "revision": "59bf31b8a2138408de3f06d2f89fe86b8cfc302b" + }, + "zig": { + "revision": "da6d85db0e66f3b76d70ff5c2b119803ae206d02" } } diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index e581eb089..efbe1f879 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -524,6 +524,15 @@ list.bibtex = { filetype = 'bib', } +list.zig = { + install_info = { + url = "https://github.com/Himujjal/tree-sitter-zig", + files = { "src/parser.c" } + }, + filetype = "zig", + maintainers = { "@Himujjal" } +} + local M = { list = list } diff --git a/queries/zig/folds.scm b/queries/zig/folds.scm new file mode 100644 index 000000000..2781c0f2a --- /dev/null +++ b/queries/zig/folds.scm @@ -0,0 +1,15 @@ +[ + (block) + (comptime_block) + (defer_block) + (suspend_block) + (resume_block) + (if_expression) + (switch_block) + (for_expression) + (test_expression) + (struct_expression) + (anonymous_struct_enum) + (union_expression) + (enum_expression) +] @fold diff --git a/queries/zig/highlights.scm b/queries/zig/highlights.scm new file mode 100644 index 000000000..b9d3b25ad --- /dev/null +++ b/queries/zig/highlights.scm @@ -0,0 +1,183 @@ +;; Assume all-caps names are constants + +; (identifier) @variable + +(parameter (identifier) @variable) + +; ((identifier) @constant +; (#vim-match? @constant "^[A-Z][A-Z\\d_]+$'")) + +; function definition +(function_signature + (identifier) @function +) + +(function_declaration (identifier) @function) + +; Function calls +(call_expression + function: (identifier) @function) + +(build_in_call_expr + function: (identifier) @attribute) + +;; other identifiers +(type_identifier) @type +(primitive_type) @type.builtin +(field_identifier) @property + +(line_comment) @comment +(doc_comment) @comment + +(char_literal) @number +(integer_literal) @number +(float_literal) @number + +(boolean_literal) @constant.builtin +(undefined_literal) @constant.builtin +(null_literal) @constant.builtin + +(string_literal) @string +(multiline_string_literal) @string + +(escape_sequence) @constant.builtin + + + +[ + "align" + "allowzero" + ; "and" + ; "anyframe" + ; "anytype" + ;"asm" + ; "async" + "await" + "break" + ; "callconv" + ; "catch" + "comptime" + "const" + "continue" + "defer" + "else" + "enum" + "errdefer" + "error" + "export" + "extern" + "false" + ; "fn" + "for" + "if" + "inline" + ; "noalias" + ; "nosuspend" + ; "noinline" + "null" + ; "opaque" + ; "or" + ; "orelse" + ; "packed" + "pub" + "resume" + "return" + ; "linksection" + "struct" + "suspend" + "switch" + "test" + ; "threadlocal" + "true" + "try" + ; "undefined" + "union" + ;"unreachable" + "usingnamespace" + "var" + "volatile" + "while" +] @keyword + +"fn" @keyword.function + +[ + "continue" + "else" + "if" + "switch" +] @conditional + +[ + "for" + "while" +] @repeat + +(assignment_modifier) @attribute + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "&" + "&=" + "*" + "*=" + ;"*%" + "*%=" + ;"^" + "^=" + ":" + "," + "." + ".." + "..." + ".*" + ".?" + "=" + ;"==" + "=>" + "!" + ;"!=" + ;"<" + ;"<<" + "<<=" + ;"<=" + "-" + "-=" + "-%" + "-%=" + ;"->" + ;"%" + "%=" + "|" + ;"||" + "|=" + ;"+" + ;"++" + "+=" + ;"+%" + "+%=" + "c\"" + "?" + ;">" + ;">>" + ">>=" + ;">=" + ;"/" + "/=" + "~" +] @operator + +[ + ";" + "." + "," +] @punctuation.delimiter + diff --git a/queries/zig/indents.scm b/queries/zig/indents.scm new file mode 100644 index 000000000..0502fdcaa --- /dev/null +++ b/queries/zig/indents.scm @@ -0,0 +1,30 @@ +[ + (block) + (comptime_block) + (defer_block) + (suspend_block) + (resume_block) + (if_expression) + (while_expression) + (for_expression) + (test_expression) + (struct_expression) + (struct_construction) + (anonymous_struct_enum) + (enum_expression) + (union_expression) +] @indent + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @branch + +[ + (line_comment) + (multiline_string_literal) +] @ignore diff --git a/queries/zig/locals.scm b/queries/zig/locals.scm new file mode 100644 index 000000000..7767686af --- /dev/null +++ b/queries/zig/locals.scm @@ -0,0 +1,25 @@ +(function_declaration + name: (identifier) @definition.function +) + +((type_identifier) @reference + (set! reference.kind "type")) + +(assignment_statement + name: (identifier) @definition.var +) + +(identifier) @reference + +; Scopes +[ + (block) + (comptime_block) + (defer_block) + (suspend_block) + (resume_block) + (if_expression) + (while_expression) + (for_expression) + (test_expression) +] @scope -- cgit v1.2.3-70-g09d2