diff --git a/src/djlint/formatter/compress_html.py b/src/djlint/formatter/compress_html.py index 3403749..dceef14 100644 --- a/src/djlint/formatter/compress_html.py +++ b/src/djlint/formatter/compress_html.py @@ -127,5 +127,5 @@ def compress_html(html): html, re.IGNORECASE | re.MULTILINE, ) - print(html) + return html diff --git a/src/djlint/formatter/indent_html.py b/src/djlint/formatter/indent_html.py index 8d4664d..8197cdb 100644 --- a/src/djlint/formatter/indent_html.py +++ b/src/djlint/formatter/indent_html.py @@ -121,9 +121,10 @@ def indent_html(rawcode): else: tmp = (indent * indent_level) + item + "\n" - # we can try to fix django tags - tmp = re.sub(r"({[{|%])(\w[^}].+?)([}|%]})", r"\1 \2\3", tmp) - tmp = re.sub(r"({[{|%])([^}].+?[^ ])([}|%]})", r"\1\2 \3", tmp) + # we can try to fix template tags + tmp = re.sub(r"({[{|%]\-?)(\w[^}].+?)([}|%]})", r"\1 \2\3", tmp) + tmp = re.sub(r"({[{|%])([^}].+?[^(?: |\-)])([}|%]})", r"\1\2 \3", tmp) + tmp = re.sub(r"({[{|%])([^}].+?[^ ])(\-[}|%]})", r"\1\2 \3", tmp) # handlebars templates tmp = re.sub(r"({{#(?:each|if).+?[^ ])(}})", r"\1 \2", tmp) diff --git a/src/djlint/rules.yaml b/src/djlint/rules.yaml index 80758db..64e6869 100644 --- a/src/djlint/rules.yaml +++ b/src/djlint/rules.yaml @@ -5,13 +5,15 @@ patterns: # open - '{{[^\s#/@^]+' - - '{%[^\s]+' + - '{%-[^\s]+' + - '{%[^\s|\-]+' # handlebars - '[^{]{#[^\s]+|^{#[^\s]+' - '[^{]{\/[^\s]+|^{\/[^\s]+' - '[^{]{\@[^\s]+|^{\@[^\s]+' # close - - '[^(\s|^)]+[}|%|#]}' + - '[^(\s|^|\-)]+[}|%|#]}' + - '[^(\s|^)]+\-[}|%|#]}' - \s{2,}[}|%|#]} - '{[{|%|#]\s{2,}' - rule: diff --git a/tests/test_djlint.py b/tests/test_djlint.py index ff7a8e1..9389fbd 100644 --- a/tests/test_djlint.py +++ b/tests/test_djlint.py @@ -90,6 +90,20 @@ def test_E001(runner, tmp_file): assert "E001 1:" in result.output assert "E001 2:" in result.output + write_to_file(tmp_file.name, b"{%- test-%}") + result = runner.invoke(djlint, [tmp_file.name]) + assert result.exit_code == 1 + assert "E001 1:" in result.output + + write_to_file(tmp_file.name, b"{%-test -%}") + result = runner.invoke(djlint, [tmp_file.name]) + assert result.exit_code == 1 + assert "E001 1:" in result.output + + write_to_file(tmp_file.name, b"{%- test -%}") + result = runner.invoke(djlint, [tmp_file.name]) + assert result.exit_code == 0 + def test_E002(runner, tmp_file): write_to_file(tmp_file.name, b"{% extends 'this' %}") @@ -367,3 +381,24 @@ def test_dj_comments_tag(runner, tmp_file): open(tmp_file.name).read() == """{# comment #}\n{% if this %}
{% endif %}\n""" ) + + +def test_template_tags(runner, tmp_file): + # njk tag + write_to_file( + tmp_file.name, + b"""{%- set posts = collections.docs -%}""", + ) + runner.invoke(djlint, [tmp_file.name, "--reformat"]) + assert open(tmp_file.name).read() == """{%- set posts = collections.docs -%}\n""" + + # ensure spaces are added + write_to_file( + tmp_file.name, + b"""{%-set posts = collections.docs-%}\n{%asdf%}""", + ) + runner.invoke(djlint, [tmp_file.name, "--reformat"]) + assert ( + open(tmp_file.name).read() + == """{%- set posts = collections.docs -%}\n{% asdf %}\n""" + )