From a7c0c1764b0b583d0597108dd7d48bc5c0f98c81 Mon Sep 17 00:00:00 2001 From: "Alexandre A. Muller" Date: Sat, 8 Jan 2022 01:26:33 +0000 Subject: [PATCH] Add ninja parser (#2217) * Add ninja parser * Add branch main * No need for ftdetect --- README.md | 1 + lua/nvim-treesitter/parsers.lua | 9 +++ queries/ninja/folds.scm | 1 + queries/ninja/highlights.scm | 98 +++++++++++++++++++++++++++++++++ queries/ninja/indents.scm | 6 ++ 5 files changed, 115 insertions(+) create mode 100644 queries/ninja/folds.scm create mode 100644 queries/ninja/highlights.scm create mode 100644 queries/ninja/indents.scm diff --git a/README.md b/README.md index a524a30d9..ddc42caea 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,7 @@ We are looking for maintainers to add more parsers and to write query files for - [x] [lua](https://github.com/nvim-treesitter/tree-sitter-lua) (maintained by @vigoux) - [x] [make](https://github.com/alemuller/tree-sitter-make) (maintained by @lewis6991) - [ ] [markdown](https://github.com/MDeiml/tree-sitter-markdown) +- [x] [ninja](https://github.com/alemuller/tree-sitter-ninja) (maintained by @alemuller) - [x] [nix](https://github.com/cstrahan/tree-sitter-nix) (maintained by @leo60228) - [x] [ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu) - [x] [ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu) diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 9299874f2..d71655f6c 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -532,6 +532,15 @@ list.yang = { filetype = "yang", } +list.ninja = { + install_info = { + url = "https://github.com/alemuller/tree-sitter-ninja", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@alemuller" }, +} + list.nix = { install_info = { url = "https://github.com/cstrahan/tree-sitter-nix", diff --git a/queries/ninja/folds.scm b/queries/ninja/folds.scm new file mode 100644 index 000000000..341a8b8c1 --- /dev/null +++ b/queries/ninja/folds.scm @@ -0,0 +1 @@ +(body) @fold diff --git a/queries/ninja/highlights.scm b/queries/ninja/highlights.scm new file mode 100644 index 000000000..1b31b560c --- /dev/null +++ b/queries/ninja/highlights.scm @@ -0,0 +1,98 @@ +[ + "default" + "pool" + "rule" + "build" +] @keyword + +[ + "include" + "subninja" +] @include + +[ + ":" +] @punctuation.delimiter + +[ + "=" + "|" + "||" + "|@" +] @operator + +[ + "$" + "{" + "}" +] @punctuation.special + +;; +;; Names +;; ===== +(pool name: (identifier) @type) +(rule name: (identifier) @function) +(let name: (identifier) @constant) +(expansion (identifier) @constant) +(build rule: (identifier) @function) + +;; +;; Paths and Text +;; ============== +(path) @string.special +(text) @string + +;; +;; Builtins +;; ======== +(pool name: (identifier) @type.builtin + (#any-of? @type.builtin "console")) +(build rule: (identifier) @function.builtin + (#any-of? @function.builtin "phony" "dyndep")) + +;; Top level bindings +;; ------------------ +(manifest + (let name: ((identifier) @constant.builtin + (#any-of? @constant.builtin "builddir" + "ninja_required_version")))) + +;; Rules bindings +;; ----------------- +(rule + (body + (let name: (identifier) @constant.builtin + (#not-any-of? @constant.builtin "command" + "depfile" + "deps" + "msvc_deps_prefix" + "description" + "dyndep" + "generator" + "in" + "in_newline" + "out" + "restat" + "rspfile" + "rspfile_content" + "pool")))) + +;; +;; Expansion +;; --------- +(expansion + (identifier) @constant.macro + (#any-of? @constant.macro "in" "out")) + +;; +;; Escape sequences +;; ================ +(quote) @string.escape + +;; +;; Others +;; ====== +[ + (split) + (comment) +] @comment diff --git a/queries/ninja/indents.scm b/queries/ninja/indents.scm new file mode 100644 index 000000000..088dec2cd --- /dev/null +++ b/queries/ninja/indents.scm @@ -0,0 +1,6 @@ +[ + (pool) + (rule) + (build) +] @indent +