From ea766722a54509799433438002b1f6c0c8b18e41 Mon Sep 17 00:00:00 2001 From: Christopher Pickering Date: Wed, 24 Aug 2022 08:30:30 -0500 Subject: [PATCH 1/5] fix(t001): fixed false positive on multiline template tags closes #350 --- src/djlint/rules.yaml | 4 ++-- tests/test_linter/test_linter.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/djlint/rules.yaml b/src/djlint/rules.yaml index 42fac5e..1660adf 100644 --- a/src/djlint/rules.yaml +++ b/src/djlint/rules.yaml @@ -18,8 +18,8 @@ # close - '[^(\s|^|\-)]+[}|%|#]}' - '[^(\s|^)]+\-[}|%|#]}' - - \s{2,}[}|%|#]} - - '{[{|%|#]-?\s{2,}' + - '[^\s][ ]{2,}[}|%|#]}' + - '{[{|%|#]-?[ ]{2,}' - rule: name: T002 message: Double quotes should be used in tags. diff --git a/tests/test_linter/test_linter.py b/tests/test_linter/test_linter.py index bab55b9..a22537c 100644 --- a/tests/test_linter/test_linter.py +++ b/tests/test_linter/test_linter.py @@ -50,6 +50,18 @@ def test_T001(runner: CliRunner, tmp_file: TextIO) -> None: result = runner.invoke(djlint, [tmp_file.name, "--profile", "jinja"]) assert result.exit_code == 0 + # test line break around tag + write_to_file( + tmp_file.name, + b"""
+ {% + ("SashaNose", "1"), + %} +
""", + ) + result = runner.invoke(djlint, [tmp_file.name, "--profile", "jinja"]) + assert "T001" not in result.output + def test_T002(runner: CliRunner, tmp_file: TextIO) -> None: write_to_file(tmp_file.name, b"{% extends 'this' %}") From f1a39ed289a623438e462564e84d2c65cd33bf35 Mon Sep 17 00:00:00 2001 From: Christopher Pickering Date: Wed, 24 Aug 2022 08:39:11 -0500 Subject: [PATCH 2/5] feat(h021): allow inline styles that contain template syntax closes #351 --- src/djlint/rules.yaml | 2 +- tests/test_linter/test_linter.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/djlint/rules.yaml b/src/djlint/rules.yaml index 1660adf..21d7932 100644 --- a/src/djlint/rules.yaml +++ b/src/djlint/rules.yaml @@ -161,7 +161,7 @@ message: Inline styles should be avoided. flags: re.I patterns: - - <\w+\s(?:[^>]*\s)?style=(?=[^>]*>) + - <\w+\s(?:[^>]*\s)?style=(?=((?!>|{{|{%).)*>) - rule: name: H022 message: Use HTTPS for external links. diff --git a/tests/test_linter/test_linter.py b/tests/test_linter/test_linter.py index a22537c..785388f 100644 --- a/tests/test_linter/test_linter.py +++ b/tests/test_linter/test_linter.py @@ -405,6 +405,11 @@ def test_H021(runner: CliRunner, tmp_file: TextIO) -> None: assert result.exit_code == 0 assert "H021" not in result.output + # allow template syntax inside styles + write_to_file(tmp_file.name, b'
') + result = runner.invoke(djlint, [tmp_file.name]) + assert "H021" not in result.output + def test_H022(runner: CliRunner, tmp_file: TextIO) -> None: write_to_file(tmp_file.name, b'') From a5d96e7a2de2d25544770110e4c81952a10d642f Mon Sep 17 00:00:00 2001 From: Christopher Pickering Date: Wed, 24 Aug 2022 08:50:56 -0500 Subject: [PATCH 3/5] feat(t002): allow variables names to be used in the {% extends tag closes #349 --- src/djlint/rules.yaml | 2 +- tests/test_linter/test_linter.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/djlint/rules.yaml b/src/djlint/rules.yaml index 21d7932..0b75f3e 100644 --- a/src/djlint/rules.yaml +++ b/src/djlint/rules.yaml @@ -25,7 +25,7 @@ message: Double quotes should be used in tags. flags: re.DOTALL patterns: - - '{%.?extends\s+?[^\"]\w+' + - "{%[ \t]*?extends[ \t]+?'[^']*'" - rule: name: T003 message: 'Endblock should have name. Ex: {% endblock body %}.' diff --git a/tests/test_linter/test_linter.py b/tests/test_linter/test_linter.py index 785388f..ef5f4cf 100644 --- a/tests/test_linter/test_linter.py +++ b/tests/test_linter/test_linter.py @@ -69,6 +69,11 @@ def test_T002(runner: CliRunner, tmp_file: TextIO) -> None: assert result.exit_code == 1 assert "T002 1:" in result.output + # allow variable names (unquoted) + write_to_file(tmp_file.name, b"{% extends this %}") + result = runner.invoke(djlint, [tmp_file.name, "--profile", "django"]) + assert "T002" not in result.output + def test_T003(runner: CliRunner, tmp_file: TextIO) -> None: write_to_file(tmp_file.name, b"{% endblock %}") From 4480cff832cb86206e46ba66970aa445529a24e7 Mon Sep 17 00:00:00 2001 From: Christopher Pickering Date: Wed, 24 Aug 2022 09:01:13 -0500 Subject: [PATCH 4/5] fix(h012): prevent H012 from matching the contents of tags or attributes closes #348 --- src/djlint/rules.yaml | 4 ++-- tests/test_linter/test_linter.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/djlint/rules.yaml b/src/djlint/rules.yaml index 0b75f3e..e240884 100644 --- a/src/djlint/rules.yaml +++ b/src/djlint/rules.yaml @@ -96,8 +96,8 @@ message: There should be no spaces around attribute =. flags: re.DOTALL patterns: - - <\w+?(?:(?!\{[%|{|#])[^\n|>])*\s+= - - <\w+?(?:(?!\{[%|{|#])[^\n|>])*=\s + - <\w+?(\"[^\"]*\"|'[^']*'|{[^}]*}|[^'\">{}])*\s+= + - <\w+?(\"[^\"]*\"|'[^']*'|{[^}]*}|[^'\">{}])*=\s - rule: name: H013 message: Img tag should have an alt attribute. diff --git a/tests/test_linter/test_linter.py b/tests/test_linter/test_linter.py index ef5f4cf..92579d5 100644 --- a/tests/test_linter/test_linter.py +++ b/tests/test_linter/test_linter.py @@ -219,6 +219,16 @@ def test_H012(runner: CliRunner, tmp_file: TextIO) -> None: assert result.exit_code == 0 assert "H012 1:" not in result.output + # space allowed inside attributes. + write_to_file( + tmp_file.name, + b"""