Notepad++ plugin
dbt & Jinja
dbt-Modelle sind kein reines SQL — sie stecken voller Jinja-Templating: {{ ref('orders') }}, {{ var('lookback_days') }}, {# erklärende Kommentare #} und {% if/for %}-Blöcke. Der Formatter erkennt diese Konstrukte als eigene Token-Kategorie und formatiert um sie herum, ohne jemals eine Klammer, ein Anführungszeichen oder ein Makro-Argument zu zerbrechen.
{{ ref(...) }} und {{ var(...) }} bleiben unverändert
Ein Modell, das über ref() oder source() auf andere Modelle verweist, oder eine konfigurierbare Variable über var(), wird wie ein gewöhnliches SELECT formatiert — der Jinja-Ausdruck selbst wird jedoch wörtlich übernommen, einschließlich des exakten Abstands innerhalb der doppelten geschweiften Klammern, den dbt selbst erwartet.
Vorher
select order_id, customer_id, amount from {{ ref('stg_orders') }} where amount > {{ var('min_amount') }}Nachher
select order_id
, customer_id
, amount
from {{ ref('stg_orders') }}
where amount > {{ var('min_amount') }}Kommentare, Kontrollfluss und ein Notausgang: @formatter:off
{# ... #} Jinja-Kommentare und {% ... %} Kontrollfluss-Tags ({% if %}, {% for %}, {% set %}) werden genau wie {{ ... }}-Ausdrücke erkannt und bleiben unverändert. Möchten Sie einen Block ganz vom Formatter ausnehmen — z. B. einen Makroaufruf mit ungewöhnlicher Formatierung, die Sie bewusst so gelassen haben — umschließen Sie ihn mit -- @formatter:off und -- @formatter:on.
Vorher
select
{{ ref('orders') }}.order_id
-- @formatter:off
from weird_legacy_table x
-- @formatter:on
{% if is_incremental() %}
where order_id > (select max(order_id) from {{ this }})
{% endif %}Nachher
select {{ ref('orders') }}.order_id
-- @formatter:off
from weird_legacy_table x
-- @formatter:on
{% if is_incremental() %}
where order_id > (select max(order_id) from {{ this }})
{% endif %}Häufig gestellte Fragen
Funktioniert das auch mit verschachtelten Makros und mehreren ref()-Aufrufen in einer Zeile?
Ja — jeder {{ ... }}-Ausdruck wird einzeln erkannt, auch wenn mehrere in derselben SELECT-Zeile stehen oder ref()/var() in einen größeren Ausdruck eingebettet ist.
Muss ich etwas Besonderes einstellen, um dbt-Dateien zu erkennen?
Nein, die Jinja-Erkennung ist immer aktiv und funktioniert bei jeder Datei — es ist kein separater 'dbt-Modus'-Schalter nötig.