feat(jinja): add parser and queries (#7573)

Signed-off-by: loongtao.zhang <loongtao.zhang@outlook.com>
Co-authored-by: Riley Bruins <ribru17@hotmail.com>
This commit is contained in:
loongtao.zhang 2025-02-08 17:38:50 +08:00 committed by GitHub
parent e8ccc339a3
commit cbd48fac13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 204 additions and 0 deletions

View file

@ -380,6 +380,9 @@
"javascript": {
"revision": "6fbef40512dcd9f0a61ce03a4c9ae7597b36ab5c"
},
"jinja": {
"revision": "cea7dd379d343e84a6e42793d9055a807957f40f"
},
"jq": {
"revision": "13990f530e8e6709b7978503da9bc8701d366791"
},

View file

@ -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",

View file

@ -0,0 +1,19 @@
; inherits: jinja_inline
[
"{{"
"{{-"
"{{+"
"+}}"
"-}}"
"}}"
"{%"
"{%-"
"{%+"
"+%}"
"-%}"
"%}"
] @keyword.directive
; TODO: only match raw
(raw_start) @keyword

View file

@ -0,0 +1,5 @@
((inline) @injection.content
(#set! injection.language "jinja_inline"))
((comment) @injection.content
(#set! injection.language "comment"))

View file

@ -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)

View file

@ -0,0 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))