Coding Standards ================ .. note:: The `Twig CS fixer tool `_ uses the coding standards described in this document to automatically fix your templates. When writing Twig templates, we recommend you to follow these official coding standards: * Put exactly one space after the start of a delimiter (``{{``, ``{%``, and ``{#``) and before the end of a delimiter (``}}``, ``%}``, and ``#}``) if the content is non empty: .. code-block:: twig {{ user }} {# comment #} {##} {% if user %}{% endif %} When using the whitespace control character, do not put any spaces between it and the delimiter: .. code-block:: twig {{- user -}} {#- comment -#} {#--#} {%- if user -%}{%- endif -%} * Put exactly one space before and after the following operators: comparison operators (``==``, ``!=``, ``<``, ``>``, ``>=``, ``<=``), math operators (``+``, ``-``, ``/``, ``*``, ``%``, ``//``, ``**``), logic operators (``not``, ``and``, ``or``), ``~``, ``is``, ``in``, and the ternary operator (``?:``): .. code-block:: twig {{ 1 + 2 }} {{ first_name ~ ' ' ~ last_name }} {{ is_correct ? true : false }} * Put exactly one space after the ``:`` sign in mappings and ``,`` in sequences and mappings: .. code-block:: twig [1, 2, 3] {'name': 'Fabien'} * Do not put any spaces after an opening parenthesis and before a closing parenthesis in expressions: .. code-block:: twig {{ 1 + (2 * 3) }} * Do not put any spaces before and after string delimiters: .. code-block:: twig {{ 'Twig' }} {{ "Twig" }} * Do not put any spaces before and after the following operators: ``|``, ``.``, ``..``, ``[]``: .. code-block:: twig {{ name|upper|lower }} {{ user.name }} {{ user[name] }} {% for i in 1..12 %}{% endfor %} * Do not put any spaces before and after the parenthesis used for filter and function calls: .. code-block:: twig {{ name|default('Fabien') }} {{ range(1..10) }} * Do not put any spaces before and after the opening and the closing of sequences and mappings: .. code-block:: twig [1, 2, 3] {'name': 'Fabien'} * Put exactly one space before and after ``=`` in macro argument declarations: .. code-block:: twig {% macro html_input(class = "input") %} * Put exactly one space after the ``:`` sign when using named arguments: .. code-block:: twig {{ html_input(class: "input") }} * Use snake case for all variable names (provided by the application and created in templates), function/filter/test names, argument names and named arguments: .. code-block:: twig {% set name = 'Fabien' %} {% set first_name = 'Fabien' %} {{ 'Fabien Potencier'|to_lower_case }} {{ generate_random_number() }} {% macro html_input(class_name) %} {{ html_input(class_name: 'pwd') }} * Indent your code inside tags (use the same indentation as the one used for the target language of the rendered template): .. code-block:: twig {% block content %} {% if true %} true {% endif %} {% endblock %} * Use ``:`` instead of ``=`` to separate argument names and values: .. code-block:: twig {{ data|convert_encoding(from: 'iso-2022-jp', to: 'UTF-8') }}