From 20d77c2e5ba71315dee7dcf47456557413b1481e Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Thu, 17 Jul 2025 22:12:23 -0400 Subject: [PATCH] fix(jinja): assign highlights to all variables and functions The majority of jinja variables aren't assigned any highlights at all. Assign @variable to all identifiers. Jinja filters without parameters are not highlighted as functions: add a query for these. Refine the existing @variable.member to only capture identifiers instead of broader nodes. --- runtime/queries/jinja_inline/highlights.scm | 30 ++++++++++++++++---- tests/query/highlights/jinja/filters.jinja | 19 +++++++++++++ tests/query/highlights/jinja/tests.jinja | 13 +++++++++ tests/query/highlights/jinja/variables.jinja | 21 ++++++++++++++ 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 tests/query/highlights/jinja/filters.jinja create mode 100644 tests/query/highlights/jinja/tests.jinja create mode 100644 tests/query/highlights/jinja/variables.jinja diff --git a/runtime/queries/jinja_inline/highlights.scm b/runtime/queries/jinja_inline/highlights.scm index 69dba77b..3a966047 100644 --- a/runtime/queries/jinja_inline/highlights.scm +++ b/runtime/queries/jinja_inline/highlights.scm @@ -71,11 +71,7 @@ "as" ] @keyword.import -(import_statement - (identifier) @variable) - -(import_as - (identifier) @variable) +(identifier) @variable [ "if" @@ -109,12 +105,34 @@ (expression "." - (expression)+ @variable.member) + (expression + (binary_expression + . + (unary_expression + (primary_expression + (identifier) @variable.member))))) + +(expression + "." + (expression + (binary_expression + (binary_expression + (unary_expression + (primary_expression + (identifier) @variable.member)))))) (assignment_expression "." (identifier)+ @variable.member) +; jinja filters +(binary_expression + (binary_operator + "|") + (unary_expression + (primary_expression + (identifier) @function.call))) + (inline_trans "_" @function.builtin) diff --git a/tests/query/highlights/jinja/filters.jinja b/tests/query/highlights/jinja/filters.jinja new file mode 100644 index 00000000..a084cdc1 --- /dev/null +++ b/tests/query/highlights/jinja/filters.jinja @@ -0,0 +1,19 @@ +{{ name|striptags|title }} +{# ^^^^ @variable #} +{# ^^^^^ @function.call #} +{# ^^^^^ @function.call #} + +{{ listx|join(', ') }} +{# ^^^^^ @variable #} +{# ^^^^ @function.call #} +{# ^^^^ @string #} + +{{ listx|join(str) }} +{# ^^^^^ @variable #} +{# ^^^^ @function.call #} +{# ^^^ @variable.parameter #} + +{{ foo.bar|random }} +{# ^^^ @variable #} +{# ^^^ @variable.member #} +{# ^^^^^^ @function.call #} diff --git a/tests/query/highlights/jinja/tests.jinja b/tests/query/highlights/jinja/tests.jinja new file mode 100644 index 00000000..0a138fb8 --- /dev/null +++ b/tests/query/highlights/jinja/tests.jinja @@ -0,0 +1,13 @@ +{% if loop.index is divisibleby 3 %} +{# ^^^^ @variable #} +{# ^^^^^ @variable.member #} +{# ^^^^^^^^^^ @keyword.operator #} + +{% if loop.index is divisibleby(3) %} +{# ^^^^ @variable #} +{# ^^^^^ @variable.member #} + +{% if foo.bar.baz is divisibleby 3 %} +{# ^^^ @variable #} +{# ^^^ @variable.member #} +{# ^^^ @variable.member #} diff --git a/tests/query/highlights/jinja/variables.jinja b/tests/query/highlights/jinja/variables.jinja new file mode 100644 index 00000000..1ab78c35 --- /dev/null +++ b/tests/query/highlights/jinja/variables.jinja @@ -0,0 +1,21 @@ +{{ foo }} +{# ^^^ @variable #} + +{{ foo.bar }} +{# ^^^ @variable #} +{# ^^^ @variable.member #} + +{{ foo['bar'] }} +{# ^^^ @variable #} +{# ^^^^^ @string #} + +{{ foo.bar.baz }} +{# ^^^ @variable #} +{# ^^^ @variable.member #} +{# ^^^ @variable.member #} + +{{ foo.bar + baz.qux }} +{# ^^^ @variable #} +{# ^^^ @variable.member #} +{# ^^^ @variable #} +{# ^^^ @variable.member #}