1Coding Standards
2================
3
4When writing Twig templates, we recommend you to follow these official coding
5standards:
6
7* Put one (and only one) space after the start of a delimiter (``{{``, ``{%``,
8  and ``{#``) and before the end of a delimiter (``}}``, ``%}``, and ``#}``):
9
10  .. code-block:: jinja
11
12    {{ foo }}
13    {# comment #}
14    {% if foo %}{% endif %}
15
16  When using the whitespace control character, do not put any spaces between
17  it and the delimiter:
18
19  .. code-block:: jinja
20
21    {{- foo -}}
22    {#- comment -#}
23    {%- if foo -%}{%- endif -%}
24
25* Put one (and only one) space before and after the following operators:
26  comparison operators (``==``, ``!=``, ``<``, ``>``, ``>=``, ``<=``), math
27  operators (``+``, ``-``, ``/``, ``*``, ``%``, ``//``, ``**``), logic
28  operators (``not``, ``and``, ``or``), ``~``, ``is``, ``in``, and the ternary
29  operator (``?:``):
30
31  .. code-block:: jinja
32
33     {{ 1 + 2 }}
34     {{ foo ~ bar }}
35     {{ true ? true : false }}
36
37* Put one (and only one) space after the ``:`` sign in hashes and ``,`` in
38  arrays and hashes:
39
40  .. code-block:: jinja
41
42     {{ [1, 2, 3] }}
43     {{ {'foo': 'bar'} }}
44
45* Do not put any spaces after an opening parenthesis and before a closing
46  parenthesis in expressions:
47
48  .. code-block:: jinja
49
50    {{ 1 + (2 * 3) }}
51
52* Do not put any spaces before and after string delimiters:
53
54  .. code-block:: jinja
55
56    {{ 'foo' }}
57    {{ "foo" }}
58
59* Do not put any spaces before and after the following operators: ``|``,
60  ``.``, ``..``, ``[]``:
61
62  .. code-block:: jinja
63
64    {{ foo|upper|lower }}
65    {{ user.name }}
66    {{ user[name] }}
67    {% for i in 1..12 %}{% endfor %}
68
69* Do not put any spaces before and after the parenthesis used for filter and
70  function calls:
71
72  .. code-block:: jinja
73
74     {{ foo|default('foo') }}
75     {{ range(1..10) }}
76
77* Do not put any spaces before and after the opening and the closing of arrays
78  and hashes:
79
80  .. code-block:: jinja
81
82     {{ [1, 2, 3] }}
83     {{ {'foo': 'bar'} }}
84
85* Use lower cased and underscored variable names:
86
87  .. code-block:: jinja
88
89     {% set foo = 'foo' %}
90     {% set foo_bar = 'foo' %}
91
92* Indent your code inside tags (use the same indentation as the one used for
93  the target language of the rendered template):
94
95  .. code-block:: jinja
96
97     {% block foo %}
98         {% if true %}
99             true
100         {% endif %}
101     {% endblock %}
102