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.
This commit is contained in:
Robert Muir
2025-07-17 22:12:23 -04:00
committed by Christian Clason
parent 1e3b7562c2
commit 20d77c2e5b
4 changed files with 77 additions and 6 deletions

View File

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

View File

@@ -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 #}

View File

@@ -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 #}

View File

@@ -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 #}