From cbd48fac13d2286dd10d08e1d6d83e6de7f13600 Mon Sep 17 00:00:00 2001 From: "loongtao.zhang" Date: Sat, 8 Feb 2025 17:38:50 +0800 Subject: [PATCH] feat(jinja): add parser and queries (#7573) Signed-off-by: loongtao.zhang Co-authored-by: Riley Bruins --- lockfile.json | 3 + lua/nvim-treesitter/parsers.lua | 18 ++++ queries/jinja/highlights.scm | 19 ++++ queries/jinja/injections.scm | 5 + queries/jinja_inline/highlights.scm | 157 ++++++++++++++++++++++++++++ queries/jinja_inline/injections.scm | 2 + 6 files changed, 204 insertions(+) create mode 100644 queries/jinja/highlights.scm create mode 100644 queries/jinja/injections.scm create mode 100644 queries/jinja_inline/highlights.scm create mode 100644 queries/jinja_inline/injections.scm diff --git a/lockfile.json b/lockfile.json index cb2729700..7ae51320e 100644 --- a/lockfile.json +++ b/lockfile.json @@ -380,6 +380,9 @@ "javascript": { "revision": "6fbef40512dcd9f0a61ce03a4c9ae7597b36ab5c" }, + "jinja": { + "revision": "cea7dd379d343e84a6e42793d9055a807957f40f" + }, "jq": { "revision": "13990f530e8e6709b7978503da9bc8701d366791" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 2af97904b..fb8b7e575 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1127,6 +1127,24 @@ list.javascript = { maintainers = { "@steelsojka" }, } +list.jinja = { + install_info = { + url = "https://github.com/cathaysia/tree-sitter-jinja", + location = "tree-sitter-jinja", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@cathaysia" }, +} + +list.jinja_inline = { + install_info = { + url = "https://github.com/cathaysia/tree-sitter-jinja", + location = "tree-sitter-jinja_inline", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@cathaysia" }, +} + list.jq = { install_info = { url = "https://github.com/flurie/tree-sitter-jq", diff --git a/queries/jinja/highlights.scm b/queries/jinja/highlights.scm new file mode 100644 index 000000000..cb6f9ff41 --- /dev/null +++ b/queries/jinja/highlights.scm @@ -0,0 +1,19 @@ +; inherits: jinja_inline + +[ + "{{" + "{{-" + "{{+" + "+}}" + "-}}" + "}}" + "{%" + "{%-" + "{%+" + "+%}" + "-%}" + "%}" +] @keyword.directive + +; TODO: only match raw +(raw_start) @keyword diff --git a/queries/jinja/injections.scm b/queries/jinja/injections.scm new file mode 100644 index 000000000..162db3aee --- /dev/null +++ b/queries/jinja/injections.scm @@ -0,0 +1,5 @@ +((inline) @injection.content + (#set! injection.language "jinja_inline")) + +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/queries/jinja_inline/highlights.scm b/queries/jinja_inline/highlights.scm new file mode 100644 index 000000000..69dba77b3 --- /dev/null +++ b/queries/jinja_inline/highlights.scm @@ -0,0 +1,157 @@ +"#" @keyword.directive + +(string_literal) @string + +(number_literal) @number + +(float_literal) @number.float + +(boolean_literal) @boolean + +(null_literal) @constant + +"defined" @constant + +(comment) @comment @spell + +[ + "," + "." + ":" +] @punctuation.delimiter + +[ + (attribute_ignore) + (attribute_context) + "recursive" +] @attribute.builtin + +[ + "(" + ")" + "[" + "]" + "<" + ">" +] @punctuation.bracket + +(binary_operator) @operator + +[ + "block" + "with" + "filter" + "macro" + "set" + "trans" + "pluralize" + "autoescape" +] @keyword + +[ + "endtrans" + "endblock" + "endwith" + "endfilter" + "endmacro" + "endcall" + "endset" + "endtrans" + "endautoescape" +] @keyword + +(do_statement + "do" @keyword) + +[ + "include" + "import" + "from" + "extends" + "as" +] @keyword.import + +(import_statement + (identifier) @variable) + +(import_as + (identifier) @variable) + +[ + "if" + "else" + "endif" + "elif" +] @keyword.conditional + +[ + "for" + "in" + "continue" + "break" + "endfor" +] @keyword.repeat + +"call" @function.call + +(function_call + (identifier) @function.call) + +(arg + (identifier) @variable.parameter) + +(arg + (expression + (binary_expression + (unary_expression + (primary_expression + (identifier) @variable.parameter))))) + +(expression + "." + (expression)+ @variable.member) + +(assignment_expression + "." + (identifier)+ @variable.member) + +(inline_trans + "_" @function.builtin) + +"debug" @function.builtin + +(raw_end) @keyword + +(raw_body) @markup.raw.block @nospell + +(builtin_test + [ + "boolean" + "even" + "in" + "mapping" + "sequence" + "callable" + "integer" + "ne" + "string" + "defined" + "filter" + "iterable" + "none" + "test" + "divisibleby" + "float" + "le" + "number" + "eq" + "ge" + "lower" + "odd" + "undefined" + "escaped" + "gt" + "lt" + "sameas" + "upper" + ] @keyword.operator) diff --git a/queries/jinja_inline/injections.scm b/queries/jinja_inline/injections.scm new file mode 100644 index 000000000..2f0e58eb6 --- /dev/null +++ b/queries/jinja_inline/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment"))