djlint 1.30.0 → 1.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/.coveragerc +0 -9
- package/.editorconfig +0 -21
- package/.flake8 +0 -0
- package/.github/FUNDING.yml +0 -2
- package/.github/ISSUE_TEMPLATE/config.yml +0 -6
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- package/.github/ISSUE_TEMPLATE/formatter_but_report.md +0 -30
- package/.github/ISSUE_TEMPLATE/linter_bug_report.md +0 -34
- package/.github/ISSUE_TEMPLATE/translation.md +0 -14
- package/.github/config.yml +0 -4
- package/.github/pull_request_template.md +0 -10
- package/.github/workflows/cancel.yml +0 -17
- package/.github/workflows/demo.yml +0 -98
- package/.github/workflows/issues.yml +0 -23
- package/.github/workflows/linkcheck.yaml +0 -21
- package/.github/workflows/lint.yml +0 -25
- package/.github/workflows/release.yml +0 -57
- package/.github/workflows/test.yml +0 -85
- package/.pre-commit-config.yaml +0 -45
- package/.pre-commit-hooks.yaml +0 -71
- package/.prettierignore +0 -7
- package/.prettierrc +0 -11
- package/.releaserc +0 -16
- package/CHANGELOG.md +0 -13
- package/MANIFEST.in +0 -2
- package/build_demo.sh +0 -17
- package/docs/.eleventy.js +0 -425
- package/docs/.eleventyignore +0 -2
- package/docs/.prettierignore +0 -3
- package/docs/.prettierrc +0 -11
- package/docs/package.json +0 -73
- package/docs/readme.md +0 -17
- package/docs/src/_data/configuration.json +0 -646
- package/docs/src/_data/eleventyComputed.js +0 -22
- package/docs/src/_data/i18n/index.js +0 -159
- package/docs/src/_data/js.js +0 -7
- package/docs/src/_data/locales.js +0 -17
- package/docs/src/_data/site.json +0 -8
- package/docs/src/_includes/demo.njk +0 -157
- package/docs/src/_includes/docs_layout.njk +0 -34
- package/docs/src/_includes/foot.njk +0 -26
- package/docs/src/_includes/index.njk +0 -187
- package/docs/src/_includes/languages_layout.njk +0 -11
- package/docs/src/_includes/layout.njk +0 -111
- package/docs/src/_includes/nav.njk +0 -85
- package/docs/src/_utils/minify-html.js +0 -14
- package/docs/src/_utils/rollupper.js +0 -91
- package/docs/src/_utils/scripts.11ty.js +0 -27
- package/docs/src/demo.njk +0 -4
- package/docs/src/docs/best-practices.md +0 -78
- package/docs/src/docs/changelog.md +0 -452
- package/docs/src/docs/configuration.md +0 -145
- package/docs/src/docs/docs.json +0 -4
- package/docs/src/docs/formatter.md +0 -82
- package/docs/src/docs/getting-started.md +0 -126
- package/docs/src/docs/ignoring-code.md +0 -75
- package/docs/src/docs/integrations.md +0 -120
- package/docs/src/docs/languages/angular.md +0 -31
- package/docs/src/docs/languages/django.md +0 -40
- package/docs/src/docs/languages/golang.md +0 -31
- package/docs/src/docs/languages/handlebars.md +0 -31
- package/docs/src/docs/languages/jinja.md +0 -39
- package/docs/src/docs/languages/languages.json +0 -3
- package/docs/src/docs/languages/mustache.md +0 -31
- package/docs/src/docs/languages/nunjucks.md +0 -39
- package/docs/src/docs/languages/twig.md +0 -41
- package/docs/src/docs/linter.md +0 -199
- package/docs/src/fr/demo.njk +0 -4
- package/docs/src/fr/docs/best-practices.md +0 -78
- package/docs/src/fr/docs/changelog.md +0 -452
- package/docs/src/fr/docs/configuration.md +0 -144
- package/docs/src/fr/docs/docs.json +0 -3
- package/docs/src/fr/docs/formatter.md +0 -83
- package/docs/src/fr/docs/getting-started.md +0 -127
- package/docs/src/fr/docs/ignoring-code.md +0 -75
- package/docs/src/fr/docs/integrations.md +0 -100
- package/docs/src/fr/docs/languages/angular.md +0 -31
- package/docs/src/fr/docs/languages/django.md +0 -31
- package/docs/src/fr/docs/languages/golang.md +0 -31
- package/docs/src/fr/docs/languages/handlebars.md +0 -31
- package/docs/src/fr/docs/languages/jinja.md +0 -31
- package/docs/src/fr/docs/languages/languages.json +0 -3
- package/docs/src/fr/docs/languages/mustache.md +0 -31
- package/docs/src/fr/docs/languages/nunjucks.md +0 -31
- package/docs/src/fr/docs/languages/twig.md +0 -31
- package/docs/src/fr/docs/linter.md +0 -207
- package/docs/src/fr/fr.json +0 -4
- package/docs/src/fr/index.njk +0 -4
- package/docs/src/index.njk +0 -4
- package/docs/src/lib/generate-content-hash.js +0 -13
- package/docs/src/robots.txt +0 -4
- package/docs/src/ru/demo.njk +0 -4
- package/docs/src/ru/docs/best-practices.md +0 -78
- package/docs/src/ru/docs/changelog.md +0 -453
- package/docs/src/ru/docs/configuration.md +0 -142
- package/docs/src/ru/docs/docs.json +0 -3
- package/docs/src/ru/docs/formatter.md +0 -82
- package/docs/src/ru/docs/getting-started.md +0 -127
- package/docs/src/ru/docs/ignoring-code.md +0 -75
- package/docs/src/ru/docs/integrations.md +0 -100
- package/docs/src/ru/docs/languages/angular.md +0 -31
- package/docs/src/ru/docs/languages/django.md +0 -31
- package/docs/src/ru/docs/languages/golang.md +0 -31
- package/docs/src/ru/docs/languages/handlebars.md +0 -31
- package/docs/src/ru/docs/languages/jinja.md +0 -31
- package/docs/src/ru/docs/languages/languages.json +0 -3
- package/docs/src/ru/docs/languages/mustache.md +0 -31
- package/docs/src/ru/docs/languages/nunjucks.md +0 -31
- package/docs/src/ru/docs/languages/twig.md +0 -31
- package/docs/src/ru/docs/linter.md +0 -126
- package/docs/src/ru/index.njk +0 -4
- package/docs/src/ru/ru.json +0 -4
- package/docs/src/sitemap.njk +0 -16
- package/docs/src/static/css/site.scss +0 -467
- package/docs/src/static/font/fontawesome/stylesheet.scss +0 -78
- package/docs/src/static/img/apple-touch-icon.png +0 -0
- package/docs/src/static/img/demo-min.gif +0 -0
- package/docs/src/static/img/demo.gif +0 -0
- package/docs/src/static/img/demo.webm +0 -0
- package/docs/src/static/img/favicon-16x16.png +0 -0
- package/docs/src/static/img/favicon-32x32.png +0 -0
- package/docs/src/static/img/favicon.ico +0 -0
- package/docs/src/static/img/icon-square.indd +0 -0
- package/docs/src/static/img/icon-square.png +0 -0
- package/docs/src/static/img/icon.png +0 -0
- package/docs/src/static/img/logo-192x192.png +0 -0
- package/docs/src/static/img/logo-512x512.png +0 -0
- package/docs/src/static/img/logos/angular.png +0 -0
- package/docs/src/static/img/logos/django.png +0 -0
- package/docs/src/static/img/logos/golang.png +0 -0
- package/docs/src/static/img/logos/handlebars.png +0 -0
- package/docs/src/static/img/logos/jinja.png +0 -0
- package/docs/src/static/img/logos/mustache.png +0 -0
- package/docs/src/static/img/logos/nunjucks.png +0 -0
- package/docs/src/static/img/logos/twig.png +0 -0
- package/docs/src/static/img/old_demo.gif +0 -0
- package/docs/src/static/img/style.css +0 -122
- package/docs/src/static/js/animate.js +0 -69
- package/docs/src/static/js/editor.js +0 -171
- package/docs/src/static/js/hamburger.js +0 -19
- package/docs/src/static/js/modal.js +0 -47
- package/docs/src/static/js/worker.js +0 -142
- package/docs/src/static/py/EditorConfig-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/PyYAML-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/click-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/colorama-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/cssbeautifier-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/djlint-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/html_tag_names-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/html_void_elements-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/jsbeautifier-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/json5-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/pathspec-99-py3-none-any.whl +0 -0
- package/docs/src/static/py/regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +0 -0
- package/docs/src/static/py/six-1.16.0-py2.py3-none-any.whl +0 -0
- package/docs/src/static/py/tomli-2.0.1-py3-none-any.whl +0 -0
- package/docs/src/static/py/tqdm-4.65.0-py3-none-any.whl +0 -0
- package/icon.xcf +0 -0
- package/poetry.lock +0 -835
- package/pyproject.toml +0 -100
- package/renovate.json +0 -44
- package/scripts/updateVersion.js +0 -16
- package/src/djlint/__init__.py +0 -451
- package/src/djlint/__main__.py +0 -4
- package/src/djlint/formatter/__init__.py +0 -1
- package/src/djlint/formatter/attributes.py +0 -212
- package/src/djlint/formatter/compress.py +0 -64
- package/src/djlint/formatter/condense.py +0 -221
- package/src/djlint/formatter/css.py +0 -60
- package/src/djlint/formatter/expand.py +0 -111
- package/src/djlint/formatter/indent.py +0 -418
- package/src/djlint/formatter/js.py +0 -58
- package/src/djlint/helpers.py +0 -321
- package/src/djlint/lint.py +0 -128
- package/src/djlint/output.py +0 -220
- package/src/djlint/reformat.py +0 -63
- package/src/djlint/rules/H025.py +0 -65
- package/src/djlint/rules.yaml +0 -279
- package/src/djlint/settings.py +0 -969
- package/src/djlint/src.py +0 -91
- package/tests/__init__.py +0 -0
- package/tests/conftest.py +0 -239
- package/tests/test_cli.py +0 -71
- package/tests/test_config/__init__.py +0 -0
- package/tests/test_config/test_blank_line_after_tag.py +0 -135
- package/tests/test_config/test_blank_line_before_tag.py +0 -141
- package/tests/test_config/test_close_void_tags.py +0 -31
- package/tests/test_config/test_custom_blocks.py +0 -56
- package/tests/test_config/test_custom_html.py +0 -45
- package/tests/test_config/test_djlintrc/.djlintrc +0 -38
- package/tests/test_config/test_djlintrc/__init__.py +0 -0
- package/tests/test_config/test_djlintrc/test_config.py +0 -44
- package/tests/test_config/test_djlintrc_custom/.djlint-cust +0 -38
- package/tests/test_config/test_djlintrc_custom/.djlintrc +0 -2
- package/tests/test_config/test_djlintrc_custom/__init__.py +0 -0
- package/tests/test_config/test_djlintrc_custom/test_config.py +0 -48
- package/tests/test_config/test_excludes/__init__.py +0 -0
- package/tests/test_config/test_excludes/excluded.html +0 -1
- package/tests/test_config/test_excludes/foo/excluded.html +0 -1
- package/tests/test_config/test_excludes/html.html +0 -1
- package/tests/test_config/test_excludes/pyproject.toml +0 -3
- package/tests/test_config/test_excludes/test_config.py +0 -30
- package/tests/test_config/test_extension/__init__.py +0 -0
- package/tests/test_config/test_extension/html.test +0 -1
- package/tests/test_config/test_extension/pyproject.toml +0 -3
- package/tests/test_config/test_extension/test_config.py +0 -27
- package/tests/test_config/test_files/.djlintrc_global +0 -9
- package/tests/test_config/test_files/test.html +0 -3
- package/tests/test_config/test_files/test_config.py +0 -123
- package/tests/test_config/test_files/test_two.html +0 -1
- package/tests/test_config/test_format_attribute_template_tags.py +0 -280
- package/tests/test_config/test_format_css.py +0 -197
- package/tests/test_config/test_format_js.py +0 -220
- package/tests/test_config/test_gitignore/__init__.py +0 -0
- package/tests/test_config/test_gitignore/html_one.html +0 -1
- package/tests/test_config/test_gitignore/html_two.html +0 -1
- package/tests/test_config/test_gitignore/test_config.py +0 -142
- package/tests/test_config/test_ignore/__init__.py +0 -0
- package/tests/test_config/test_ignore/html.html +0 -1
- package/tests/test_config/test_ignore/html_two.html +0 -12
- package/tests/test_config/test_ignore/pyproject.toml +0 -3
- package/tests/test_config/test_ignore/test_config.py +0 -32
- package/tests/test_config/test_ignore_blocks.py +0 -45
- package/tests/test_config/test_ignore_case.py +0 -39
- package/tests/test_config/test_indent.py +0 -63
- package/tests/test_config/test_linter_output_format/__init__.py +0 -0
- package/tests/test_config/test_linter_output_format/html-one.html +0 -1
- package/tests/test_config/test_linter_output_format/html-two.html +0 -1
- package/tests/test_config/test_linter_output_format/pyproject.toml +0 -3
- package/tests/test_config/test_linter_output_format/test_config.py +0 -34
- package/tests/test_config/test_max_attribute_length.py +0 -100
- package/tests/test_config/test_max_line_length.py +0 -94
- package/tests/test_config/test_per_file_ignores/__init__.py +0 -0
- package/tests/test_config/test_per_file_ignores/html.html +0 -2
- package/tests/test_config/test_per_file_ignores/pyproject.toml +0 -2
- package/tests/test_config/test_per_file_ignores/test_config.py +0 -25
- package/tests/test_config/test_pragmas/__init__.py +0 -0
- package/tests/test_config/test_pragmas/html_five.html +0 -2
- package/tests/test_config/test_pragmas/html_four.html +0 -5
- package/tests/test_config/test_pragmas/html_one.html +0 -1
- package/tests/test_config/test_pragmas/html_six.html +0 -2
- package/tests/test_config/test_pragmas/html_three.html +0 -4
- package/tests/test_config/test_pragmas/html_two.html +0 -2
- package/tests/test_config/test_pragmas/pyproject.toml +0 -3
- package/tests/test_config/test_pragmas/test_config.py +0 -142
- package/tests/test_config/test_preserve_blank_lines.py +0 -109
- package/tests/test_config/test_preserve_leading_space.py +0 -159
- package/tests/test_config/test_profile/__init__.py +0 -0
- package/tests/test_config/test_profile/html.html +0 -2
- package/tests/test_config/test_profile/pyproject.toml +0 -3
- package/tests/test_config/test_profile/test_config.py +0 -64
- package/tests/test_config/test_pyproject/__init__.py +0 -0
- package/tests/test_config/test_pyproject/blank.html +0 -0
- package/tests/test_config/test_pyproject/pyproject.toml +0 -36
- package/tests/test_config/test_pyproject/test_config.py +0 -44
- package/tests/test_django/__init__.py +0 -0
- package/tests/test_django/test_asset.py +0 -32
- package/tests/test_django/test_autoescape.py +0 -25
- package/tests/test_django/test_block.py +0 -29
- package/tests/test_django/test_blocktrans.py +0 -236
- package/tests/test_django/test_blocktrans_trimmed.py +0 -283
- package/tests/test_django/test_comments.py +0 -164
- package/tests/test_django/test_filter.py +0 -30
- package/tests/test_django/test_for.py +0 -34
- package/tests/test_django/test_if.py +0 -34
- package/tests/test_django/test_ifchanged.py +0 -37
- package/tests/test_django/test_include.py +0 -24
- package/tests/test_django/test_load.py +0 -24
- package/tests/test_django/test_quoted.py +0 -34
- package/tests/test_django/test_spaceless.py +0 -30
- package/tests/test_django/test_tag_spaces.py +0 -35
- package/tests/test_django/test_templatetag.py +0 -40
- package/tests/test_django/test_verbatim.py +0 -24
- package/tests/test_django/test_with.py +0 -32
- package/tests/test_djlint/-.html +0 -1
- package/tests/test_djlint/__init__.py +0 -0
- package/tests/test_djlint/bad.html +0 -6
- package/tests/test_djlint/bad.html.dj +0 -23
- package/tests/test_djlint/bad.html.dj2 +0 -2
- package/tests/test_djlint/multiple_files/a/a.html +0 -1
- package/tests/test_djlint/multiple_files/b/b1.html +0 -1
- package/tests/test_djlint/multiple_files/b/b2.html +0 -1
- package/tests/test_djlint/test_djlint.py +0 -242
- package/tests/test_golang/__init__.py +0 -0
- package/tests/test_golang/test_if.py +0 -24
- package/tests/test_golang/test_range.py +0 -24
- package/tests/test_handlebars/__init__.py +0 -0
- package/tests/test_handlebars/test_each.py +0 -34
- package/tests/test_handlebars/test_else.py +0 -24
- package/tests/test_handlebars/test_with.py +0 -24
- package/tests/test_html/__init__.py +0 -0
- package/tests/test_html/test_alpinejs.py +0 -65
- package/tests/test_html/test_attributes.py +0 -935
- package/tests/test_html/test_aurelia.py +0 -24
- package/tests/test_html/test_basics.py +0 -905
- package/tests/test_html/test_bracket_same_line.py +0 -177
- package/tests/test_html/test_case.py +0 -81
- package/tests/test_html/test_cdata.py +0 -34
- package/tests/test_html/test_comments.py +0 -333
- package/tests/test_html/test_css.py +0 -193
- package/tests/test_html/test_doctype_declarations.py +0 -202
- package/tests/test_html/test_ignored.py +0 -193
- package/tests/test_html/test_interpolation.py +0 -56
- package/tests/test_html/test_line_break_after_multiline_tag.py +0 -95
- package/tests/test_html/test_next_line_empty.py +0 -53
- package/tests/test_html/test_selfclosing.py +0 -55
- package/tests/test_html/test_single_attribute_per_line.py +0 -87
- package/tests/test_html/test_srcset.py +0 -43
- package/tests/test_html/test_svg.py +0 -104
- package/tests/test_html/test_symbol_entities.py +0 -34
- package/tests/test_html/test_tag_code.py +0 -24
- package/tests/test_html/test_tag_dd.py +0 -24
- package/tests/test_html/test_tag_details_summary.py +0 -24
- package/tests/test_html/test_tag_dt.py +0 -24
- package/tests/test_html/test_tag_fig_caption.py +0 -29
- package/tests/test_html/test_tag_hr.py +0 -29
- package/tests/test_html/test_tag_picture.py +0 -32
- package/tests/test_html/test_tag_pre.py +0 -45
- package/tests/test_html/test_tag_script.py +0 -516
- package/tests/test_html/test_tag_small.py +0 -24
- package/tests/test_html/test_tag_span.py +0 -119
- package/tests/test_html/test_tag_textarea.py +0 -82
- package/tests/test_html/test_tags.py +0 -842
- package/tests/test_html/test_text.py +0 -34
- package/tests/test_html/test_whitespace.py +0 -477
- package/tests/test_html/test_yaml.py +0 -156
- package/tests/test_jinja/__init__.py +0 -0
- package/tests/test_jinja/test_call.py +0 -34
- package/tests/test_jinja/test_parenthesis.py +0 -24
- package/tests/test_linter/__init__.py +0 -0
- package/tests/test_linter/test_custom_rules/.djlint_rules.yaml +0 -6
- package/tests/test_linter/test_custom_rules/__init__.py +0 -0
- package/tests/test_linter/test_custom_rules/html.html +0 -1
- package/tests/test_linter/test_custom_rules/pyproject.toml +0 -1
- package/tests/test_linter/test_custom_rules/test_linter.py +0 -29
- package/tests/test_linter/test_custom_rules_bad/.djlint_rules.yaml +0 -24
- package/tests/test_linter/test_custom_rules_bad/__init__.py +0 -0
- package/tests/test_linter/test_custom_rules_bad/html.html +0 -1
- package/tests/test_linter/test_custom_rules_bad/pyproject.toml +0 -1
- package/tests/test_linter/test_custom_rules_bad/test_linter.py +0 -29
- package/tests/test_linter/test_django_linter.py +0 -476
- package/tests/test_linter/test_h005.py +0 -45
- package/tests/test_linter/test_h006.py +0 -81
- package/tests/test_linter/test_h007.py +0 -45
- package/tests/test_linter/test_h008.py +0 -60
- package/tests/test_linter/test_h009.py +0 -45
- package/tests/test_linter/test_h010.py +0 -44
- package/tests/test_linter/test_h037.py +0 -150
- package/tests/test_linter/test_ignore_rules.py +0 -45
- package/tests/test_linter/test_jinja_linter.py +0 -227
- package/tests/test_linter/test_linter.py +0 -691
- package/tests/test_linter/test_nunjucks_linter.py +0 -59
- package/tests/test_linter/test_python_module_rules/.djlint_rules.yaml +0 -4
- package/tests/test_linter/test_python_module_rules/__init__.py +0 -0
- package/tests/test_linter/test_python_module_rules/html_bad.html +0 -3
- package/tests/test_linter/test_python_module_rules/html_ok.html +0 -3
- package/tests/test_linter/test_python_module_rules/my_module.py +0 -32
- package/tests/test_linter/test_python_module_rules/pyproject.toml +0 -1
- package/tests/test_linter/test_python_module_rules/test_linter.py +0 -26
- package/tests/test_nunjucks/__init__.py +0 -0
- package/tests/test_nunjucks/test_functions.py +0 -94
- package/tests/test_nunjucks/test_macros.py +0 -41
- package/tests/test_nunjucks/test_set.py +0 -206
- package/tests/test_nunjucks/test_spaceless.py +0 -24
- package/tests/test_twig/__init__.py +0 -0
- package/tests/test_twig/test_comments.py +0 -51
- package/tox.ini +0 -48
package/docs/src/docs/linter.md
DELETED
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: djLint HTML Template linter includes over 30 rules! Find the definitions here. Easily expand with include custom rules!
|
|
3
|
-
title: Linter Rules
|
|
4
|
-
keywords: template linter, template formatter, djLint, HTML, templates, formatter, linter, rules
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Linter Usage
|
|
8
|
-
|
|
9
|
-
djLint includes many rules to check the style and validity of your templates. Take full advantage of the linter by configuring it to use a preset profile for the template language of your choice.
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
djlint /path/to/templates --lint
|
|
13
|
-
|
|
14
|
-
# with custom extensions
|
|
15
|
-
djlint /path/to/templates -e html.dj --profile=django
|
|
16
|
-
|
|
17
|
-
# or to file
|
|
18
|
-
djlint /path/to/this.html.j2 --profile=jinja
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
<div class="box notification is-info is-light">
|
|
22
|
-
<span class="icon is-large"><i class="fas fa-2x fa-circle-arrow-right"></i></span><div class="my-auto ml-3 is-inline-block"><a href="/docs/configuration/">Check out the configuration guide for all the options!</a></div>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
## Enabling or Disabling Rules
|
|
26
|
-
|
|
27
|
-
Most rules are enabled by default. Rules can be disabled in the command line with the `--ignore` flag. Rules can be enabled with the `--include` flag.
|
|
28
|
-
|
|
29
|
-
For example:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
djlint . --lint --include=H017,H035 --ignore=H013,H015
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
This can also be done through the [{{ "configuration" | i18n }}]({{ "lang_code_url" | i18n }}/docs/configuration) file.
|
|
36
|
-
|
|
37
|
-
## Rules
|
|
38
|
-
|
|
39
|
-
| Code | Meaning | Default |
|
|
40
|
-
| ---- | -------------------------------------------------------------------------------------------- | ------- |
|
|
41
|
-
| D004 | (Django) Static urls should follow {% raw %}`{% static path/to/file %}`{% endraw %} pattern. | ✔️ |
|
|
42
|
-
| D018 | (Django) Internal links should use the {% raw %}`{% url ... %}`{% endraw %} pattern. | ✔️ |
|
|
43
|
-
| H005 | Html tag should have `lang` attribute. | ✔️ |
|
|
44
|
-
| H006 | `img` tag should have `height` and `width` attributes. | ✔️ |
|
|
45
|
-
| H007 | `<!DOCTYPE ... >` should be present before the html tag. | ✔️ |
|
|
46
|
-
| H008 | Attributes should be double quoted. | ✔️ |
|
|
47
|
-
| H009 | Tag names should be lowercase. | ✔️ |
|
|
48
|
-
| H010 | Attribute names should be lowercase. | ✔️ |
|
|
49
|
-
| H011 | Attribute values should be quoted. | ✔️ |
|
|
50
|
-
| H012 | There should be no spaces around attribute `=`. | ✔️ |
|
|
51
|
-
| H013 | `img` tag should have alt attributes. | ✔️ |
|
|
52
|
-
| H014 | More than 2 blank lines. | ✔️ |
|
|
53
|
-
| H015 | Follow `h` tags with a line break. | ✔️ |
|
|
54
|
-
| H016 | Missing `title` tag in html. | ✔️ |
|
|
55
|
-
| H017 | Void tags should be self closing. | - |
|
|
56
|
-
| H019 | Replace `javascript:abc()` with `on_` event and real url. | ✔️ |
|
|
57
|
-
| H020 | Empty tag pair found. Consider removing. | ✔️ |
|
|
58
|
-
| H021 | Inline styles should be avoided. | ✔️ |
|
|
59
|
-
| H022 | Use HTTPS for external links. | ✔️ |
|
|
60
|
-
| H023 | Do not use entity references. | ✔️ |
|
|
61
|
-
| H024 | Omit type on scripts and styles. | ✔️ |
|
|
62
|
-
| H025 | Tag seems to be an orphan. | ✔️ |
|
|
63
|
-
| H026 | Empty id and class tags can be removed. | ✔️ |
|
|
64
|
-
| H029 | Consider using lowercase form method values. | ✔️ |
|
|
65
|
-
| H030 | Consider adding a meta description. | ✔️ |
|
|
66
|
-
| H031 | Consider adding meta keywords. | ✔️ |
|
|
67
|
-
| H033 | Extra whitespace found in form action. | ✔️ |
|
|
68
|
-
| J004 | (Jinja) Static urls should follow {% raw %}`{{ url_for('static'..) }}`{% endraw %} pattern. | ✔️ |
|
|
69
|
-
| J018 | (Jinja) Internal links should use the {% raw %}`{% url ... %}`{% endraw %} pattern. | ✔️ |
|
|
70
|
-
| T001 | Variables should be wrapped in a single whitespace. Ex: {% raw %}`{{ this }}`{% endraw %} | ✔️ |
|
|
71
|
-
| T002 | Double quotes should be used in tags. Ex {% raw %}`{% extends "this.html" %}`{% endraw %} | ✔️ |
|
|
72
|
-
| T003 | Endblock should have name. Ex: {% raw %}`{% endblock body %}`{% endraw %}. | ✔️ |
|
|
73
|
-
| T027 | Unclosed string found in template syntax. | ✔️ |
|
|
74
|
-
| T028 | Consider using spaceless tags inside attribute values. {% raw %}`{%- if/for -%}`{% endraw %} | ✔️ |
|
|
75
|
-
| T032 | Extra whitespace found in template tags. | ✔️ |
|
|
76
|
-
| T034 | Did you intend to use {% raw %}{% ... %} instead of {% ... }%? {% endraw %} | ✔️ |
|
|
77
|
-
| H035 | Meta tags should be self closing. | - |
|
|
78
|
-
| H036 | Avoid use of <br> tags. | - |
|
|
79
|
-
| H037 | Duplicate attribute found. | ✔️ |
|
|
80
|
-
|
|
81
|
-
### Code Patterns
|
|
82
|
-
|
|
83
|
-
The first letter of a code follows the pattern:
|
|
84
|
-
|
|
85
|
-
::: content
|
|
86
|
-
|
|
87
|
-
- D: applies specifically to Django
|
|
88
|
-
- H: applies to html
|
|
89
|
-
- J: applies specifically to Jinja
|
|
90
|
-
- M: applies specifically to Handlebars
|
|
91
|
-
- N: applies specifically to Nunjucks
|
|
92
|
-
- T: applies generally to templates
|
|
93
|
-
:::
|
|
94
|
-
|
|
95
|
-
### Adding Rules
|
|
96
|
-
|
|
97
|
-
We welcome pull requests with new rules!
|
|
98
|
-
|
|
99
|
-
A good rule consists of
|
|
100
|
-
|
|
101
|
-
::: content
|
|
102
|
-
|
|
103
|
-
- Name
|
|
104
|
-
- Code
|
|
105
|
-
- Message - Message to display when error is found.
|
|
106
|
-
- Flags - Regex flags. Defaults to re.DOTALL. ex: re.I|re.M
|
|
107
|
-
- Patterns - regex expressions that will find the error.
|
|
108
|
-
- Exclude - Optional list of profiles to exclude rule from.
|
|
109
|
-
:::
|
|
110
|
-
|
|
111
|
-
Please include a test to validate the rule.
|
|
112
|
-
|
|
113
|
-
## Custom Rules
|
|
114
|
-
|
|
115
|
-
You can add custom rules just for your project by creating a `.djlint_rules.yaml` alongside
|
|
116
|
-
your `pyproject.toml`. Rules can be added to this files and djLint will pick them up.
|
|
117
|
-
|
|
118
|
-
### Pattern Rules
|
|
119
|
-
|
|
120
|
-
You can add rules that fails if one of the regex pattern has a match:
|
|
121
|
-
|
|
122
|
-
```yaml
|
|
123
|
-
- rule:
|
|
124
|
-
name: T001
|
|
125
|
-
message: Find Trichotillomania
|
|
126
|
-
flags: re.DOTALL|re.I
|
|
127
|
-
patterns:
|
|
128
|
-
- Trichotillomania
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Python module Rules
|
|
132
|
-
|
|
133
|
-
You can add rules that import and execute a custom python function:
|
|
134
|
-
|
|
135
|
-
```yaml
|
|
136
|
-
- rule:
|
|
137
|
-
name: T001
|
|
138
|
-
message: Found the 'bad' word
|
|
139
|
-
python_module: your_package.your_module
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
The specified `python_module` must contain a `run()` function that will be executed on
|
|
143
|
-
every checked file. It must accept the following arguments:
|
|
144
|
-
|
|
145
|
-
::: content
|
|
146
|
-
|
|
147
|
-
- `rule`: The dict that represent your rule in `.djlint_rules.yaml`. You will typically
|
|
148
|
-
use this variable to access the rule name and message.
|
|
149
|
-
- `config`: The DJLint configuration object.
|
|
150
|
-
- `html`: The full html content of the file.
|
|
151
|
-
- `filepath`: Path to the file that we are currently checking.
|
|
152
|
-
- `line_ends`: List of line `start` and `end` character position that you can use with
|
|
153
|
-
`djlint.lint.get_line()` to get line numbers from a character position. See the exemple.
|
|
154
|
-
- `*args, **kwargs`: We might add other arguments in the future, so you should include
|
|
155
|
-
those two arguments to reduce the risk of failure on djLint upgrade.
|
|
156
|
-
:::
|
|
157
|
-
|
|
158
|
-
It must return a list of dict, one for each errors, with the following keys:
|
|
159
|
-
|
|
160
|
-
::: content
|
|
161
|
-
|
|
162
|
-
- `code`: Code name of the rule that report the error (typically `rule['name']`)
|
|
163
|
-
- `line`: Line number and character number on this line, separated by a ':' as a string.
|
|
164
|
-
For example `"2:3"` means that the error has been found on line 2, character 3
|
|
165
|
-
- `match`: The part of the content that contains the error
|
|
166
|
-
- `message`: The message that will be printed to signal the error (typically `rule['message']`)
|
|
167
|
-
:::
|
|
168
|
-
|
|
169
|
-
```python
|
|
170
|
-
from typing import Any, Dict, List
|
|
171
|
-
from djlint.settings import Config
|
|
172
|
-
from djlint.lint import get_line
|
|
173
|
-
import re
|
|
174
|
-
|
|
175
|
-
def run(
|
|
176
|
-
rule: Dict[str, Any],
|
|
177
|
-
config: djlint.settings.Config,
|
|
178
|
-
html: str,
|
|
179
|
-
filepath: str,
|
|
180
|
-
line_ends: List[Dict[str, int]],
|
|
181
|
-
*args: Any,
|
|
182
|
-
**kwargs: Any,
|
|
183
|
-
) -> List[Dict[str, str]]:
|
|
184
|
-
"""
|
|
185
|
-
Rule that fails if if the html file contains 'bad'. This is just an exemple, in
|
|
186
|
-
reality it's much simpler to do that with "pattern rule".
|
|
187
|
-
"""
|
|
188
|
-
errors: List[Dict[str, str]] = []
|
|
189
|
-
for match in re.finditer(r"bad", html):
|
|
190
|
-
errors.append(
|
|
191
|
-
{
|
|
192
|
-
"code": rule["name"],
|
|
193
|
-
"line": get_line(match.start(), line_ends),
|
|
194
|
-
"match": match.group().strip()[:20],
|
|
195
|
-
"message": rule["message"],
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
return errors
|
|
199
|
-
```
|
package/docs/src/fr/demo.njk
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Meilleures pratiques pour l'utilisation de djLint pour formater les modèles HTML.
|
|
3
|
-
title: Meilleures Pratiques
|
|
4
|
-
keywords: template linter, template formatter, djLint, HTML, templates, formatter, linter, meilleures pratiques
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# {{ "best_practices" | i18n }}
|
|
8
|
-
|
|
9
|
-
## Espaces autour des attributs conditionnels
|
|
10
|
-
|
|
11
|
-
Parfois, les conditions sont utilisées pour ajouter des classes à une balise. djLint supprime les espaces à l'intérieur des déclarations conditionnelles.
|
|
12
|
-
|
|
13
|
-
Ce modèle est recommandé :
|
|
14
|
-
|
|
15
|
-
{% raw %}
|
|
16
|
-
|
|
17
|
-
```html
|
|
18
|
-
<div class="class1 {% if condition -%}class2{%- endif %}">contenu</div>
|
|
19
|
-
^ espace ici
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
{% endraw %}
|
|
23
|
-
|
|
24
|
-
Ce modèle n'est pas recommandé :
|
|
25
|
-
|
|
26
|
-
{% raw %}
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<div class="class1{% if condition -%} class2{%- endif %}">contenu</div>
|
|
30
|
-
^ espace ici
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
{% endraw %}
|
|
34
|
-
|
|
35
|
-
## `format_attribute_template_tags` et des attributs conditionnels non spatiaux
|
|
36
|
-
|
|
37
|
-
Si l'option `format_attribute_template_tags` est activée, les attributs conditionnels devraient utiliser des balises sans espace, par exemple {% raw %}`{% if a -%}`{% endraw %} dans nunjuck et jinja, pour supprimer les espaces à l'intérieur des.
|
|
38
|
-
|
|
39
|
-
djLint formatera les attributs longs sur plusieurs lignes, et l'espacement conservé à l'intérieur des attributs pourrait casser votre code.
|
|
40
|
-
|
|
41
|
-
Ce modèle est recommandé :
|
|
42
|
-
|
|
43
|
-
{% raw %}
|
|
44
|
-
|
|
45
|
-
```html
|
|
46
|
-
<input
|
|
47
|
-
value="{% if database -%}{{ database.name }}{%- else -%}blah{%- endif %}"
|
|
48
|
-
/>
|
|
49
|
-
^ ^ ^ ^ -- tags sans espace
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
{% endraw %}
|
|
53
|
-
|
|
54
|
-
Ce modèle n'est pas recommandé :
|
|
55
|
-
|
|
56
|
-
{% raw %}
|
|
57
|
-
|
|
58
|
-
```html
|
|
59
|
-
<input value="{% if database %}{{ database.name }}{% else %}blah{% endif %}" />
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
{% endraw %}
|
|
63
|
-
|
|
64
|
-
Après le formatage, cela pourrait ressembler à ceci :
|
|
65
|
-
|
|
66
|
-
{% raw %}
|
|
67
|
-
|
|
68
|
-
```html
|
|
69
|
-
<input
|
|
70
|
-
value="{% if database %}
|
|
71
|
-
{{ database.name }}
|
|
72
|
-
{% else %}
|
|
73
|
-
blah
|
|
74
|
-
{% endif %}"
|
|
75
|
-
/>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
{% endraw %}
|