Notepad++ plugin
dbt & Jinja
dbt-modellen zijn geen pure SQL — ze zitten vol Jinja-templating: {{ ref('orders') }}, {{ var('lookback_days') }}, {# uitlegcommentaar #} en {% if/for %}-blokken. De formatter herkent deze constructies als een eigen categorie tokens en formatteert eromheen, zonder ooit een accolade, quote of macro-argument te breken.
{{ ref(...) }} en {{ var(...) }} blijven intact
Een model dat naar andere modellen verwijst via ref() of source(), of een instelbare variabele via var(), wordt geformatteerd als een gewone SELECT — maar de Jinja-expressie zelf wordt letterlijk overgenomen, inclusief de exacte spacing binnen de dubbele accolades die dbt zelf verwacht.
Voor
select order_id, customer_id, amount from {{ ref('stg_orders') }} where amount > {{ var('min_amount') }}Na
select order_id
, customer_id
, amount
from {{ ref('stg_orders') }}
where amount > {{ var('min_amount') }}Comments, control-flow en een noodrem: @formatter:off
{# ... #} Jinja-comments en {% ... %} control-flow-tags ({% if %}, {% for %}, {% set %}) worden net zo herkend als de {{ ... }}-expressies en blijven ongewijzigd. Wil je toch een blok volledig aan de formatter onttrekken — bijvoorbeeld een macro-aanroep met ongewone opmaak die je bewust zo hebt laten staan — wrap het dan in -- @formatter:off en -- @formatter:on.
Voor
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 %}Na
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 %}Veelgestelde vragen
Werkt dit ook met geneste macro's en meerdere ref()-aanroepen in één regel?
Ja — elke {{ ... }}-expressie wordt los herkend, ook als er meerdere in dezelfde SELECT-regel staan of als ref()/var() genest is in een grotere expressie.
Moet ik iets speciaals instellen om dbt-bestanden te herkennen?
Nee, de Jinja-herkenning staat altijd aan en werkt op elk bestand — er is geen apart 'dbt-modus'-schakelaartje nodig.