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.
Files changed (368) hide show
  1. package/package.json +3 -2
  2. package/.coveragerc +0 -9
  3. package/.editorconfig +0 -21
  4. package/.flake8 +0 -0
  5. package/.github/FUNDING.yml +0 -2
  6. package/.github/ISSUE_TEMPLATE/config.yml +0 -6
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  8. package/.github/ISSUE_TEMPLATE/formatter_but_report.md +0 -30
  9. package/.github/ISSUE_TEMPLATE/linter_bug_report.md +0 -34
  10. package/.github/ISSUE_TEMPLATE/translation.md +0 -14
  11. package/.github/config.yml +0 -4
  12. package/.github/pull_request_template.md +0 -10
  13. package/.github/workflows/cancel.yml +0 -17
  14. package/.github/workflows/demo.yml +0 -98
  15. package/.github/workflows/issues.yml +0 -23
  16. package/.github/workflows/linkcheck.yaml +0 -21
  17. package/.github/workflows/lint.yml +0 -25
  18. package/.github/workflows/release.yml +0 -57
  19. package/.github/workflows/test.yml +0 -85
  20. package/.pre-commit-config.yaml +0 -45
  21. package/.pre-commit-hooks.yaml +0 -71
  22. package/.prettierignore +0 -7
  23. package/.prettierrc +0 -11
  24. package/.releaserc +0 -16
  25. package/CHANGELOG.md +0 -13
  26. package/MANIFEST.in +0 -2
  27. package/build_demo.sh +0 -17
  28. package/docs/.eleventy.js +0 -425
  29. package/docs/.eleventyignore +0 -2
  30. package/docs/.prettierignore +0 -3
  31. package/docs/.prettierrc +0 -11
  32. package/docs/package.json +0 -73
  33. package/docs/readme.md +0 -17
  34. package/docs/src/_data/configuration.json +0 -646
  35. package/docs/src/_data/eleventyComputed.js +0 -22
  36. package/docs/src/_data/i18n/index.js +0 -159
  37. package/docs/src/_data/js.js +0 -7
  38. package/docs/src/_data/locales.js +0 -17
  39. package/docs/src/_data/site.json +0 -8
  40. package/docs/src/_includes/demo.njk +0 -157
  41. package/docs/src/_includes/docs_layout.njk +0 -34
  42. package/docs/src/_includes/foot.njk +0 -26
  43. package/docs/src/_includes/index.njk +0 -187
  44. package/docs/src/_includes/languages_layout.njk +0 -11
  45. package/docs/src/_includes/layout.njk +0 -111
  46. package/docs/src/_includes/nav.njk +0 -85
  47. package/docs/src/_utils/minify-html.js +0 -14
  48. package/docs/src/_utils/rollupper.js +0 -91
  49. package/docs/src/_utils/scripts.11ty.js +0 -27
  50. package/docs/src/demo.njk +0 -4
  51. package/docs/src/docs/best-practices.md +0 -78
  52. package/docs/src/docs/changelog.md +0 -452
  53. package/docs/src/docs/configuration.md +0 -145
  54. package/docs/src/docs/docs.json +0 -4
  55. package/docs/src/docs/formatter.md +0 -82
  56. package/docs/src/docs/getting-started.md +0 -126
  57. package/docs/src/docs/ignoring-code.md +0 -75
  58. package/docs/src/docs/integrations.md +0 -120
  59. package/docs/src/docs/languages/angular.md +0 -31
  60. package/docs/src/docs/languages/django.md +0 -40
  61. package/docs/src/docs/languages/golang.md +0 -31
  62. package/docs/src/docs/languages/handlebars.md +0 -31
  63. package/docs/src/docs/languages/jinja.md +0 -39
  64. package/docs/src/docs/languages/languages.json +0 -3
  65. package/docs/src/docs/languages/mustache.md +0 -31
  66. package/docs/src/docs/languages/nunjucks.md +0 -39
  67. package/docs/src/docs/languages/twig.md +0 -41
  68. package/docs/src/docs/linter.md +0 -199
  69. package/docs/src/fr/demo.njk +0 -4
  70. package/docs/src/fr/docs/best-practices.md +0 -78
  71. package/docs/src/fr/docs/changelog.md +0 -452
  72. package/docs/src/fr/docs/configuration.md +0 -144
  73. package/docs/src/fr/docs/docs.json +0 -3
  74. package/docs/src/fr/docs/formatter.md +0 -83
  75. package/docs/src/fr/docs/getting-started.md +0 -127
  76. package/docs/src/fr/docs/ignoring-code.md +0 -75
  77. package/docs/src/fr/docs/integrations.md +0 -100
  78. package/docs/src/fr/docs/languages/angular.md +0 -31
  79. package/docs/src/fr/docs/languages/django.md +0 -31
  80. package/docs/src/fr/docs/languages/golang.md +0 -31
  81. package/docs/src/fr/docs/languages/handlebars.md +0 -31
  82. package/docs/src/fr/docs/languages/jinja.md +0 -31
  83. package/docs/src/fr/docs/languages/languages.json +0 -3
  84. package/docs/src/fr/docs/languages/mustache.md +0 -31
  85. package/docs/src/fr/docs/languages/nunjucks.md +0 -31
  86. package/docs/src/fr/docs/languages/twig.md +0 -31
  87. package/docs/src/fr/docs/linter.md +0 -207
  88. package/docs/src/fr/fr.json +0 -4
  89. package/docs/src/fr/index.njk +0 -4
  90. package/docs/src/index.njk +0 -4
  91. package/docs/src/lib/generate-content-hash.js +0 -13
  92. package/docs/src/robots.txt +0 -4
  93. package/docs/src/ru/demo.njk +0 -4
  94. package/docs/src/ru/docs/best-practices.md +0 -78
  95. package/docs/src/ru/docs/changelog.md +0 -453
  96. package/docs/src/ru/docs/configuration.md +0 -142
  97. package/docs/src/ru/docs/docs.json +0 -3
  98. package/docs/src/ru/docs/formatter.md +0 -82
  99. package/docs/src/ru/docs/getting-started.md +0 -127
  100. package/docs/src/ru/docs/ignoring-code.md +0 -75
  101. package/docs/src/ru/docs/integrations.md +0 -100
  102. package/docs/src/ru/docs/languages/angular.md +0 -31
  103. package/docs/src/ru/docs/languages/django.md +0 -31
  104. package/docs/src/ru/docs/languages/golang.md +0 -31
  105. package/docs/src/ru/docs/languages/handlebars.md +0 -31
  106. package/docs/src/ru/docs/languages/jinja.md +0 -31
  107. package/docs/src/ru/docs/languages/languages.json +0 -3
  108. package/docs/src/ru/docs/languages/mustache.md +0 -31
  109. package/docs/src/ru/docs/languages/nunjucks.md +0 -31
  110. package/docs/src/ru/docs/languages/twig.md +0 -31
  111. package/docs/src/ru/docs/linter.md +0 -126
  112. package/docs/src/ru/index.njk +0 -4
  113. package/docs/src/ru/ru.json +0 -4
  114. package/docs/src/sitemap.njk +0 -16
  115. package/docs/src/static/css/site.scss +0 -467
  116. package/docs/src/static/font/fontawesome/stylesheet.scss +0 -78
  117. package/docs/src/static/img/apple-touch-icon.png +0 -0
  118. package/docs/src/static/img/demo-min.gif +0 -0
  119. package/docs/src/static/img/demo.gif +0 -0
  120. package/docs/src/static/img/demo.webm +0 -0
  121. package/docs/src/static/img/favicon-16x16.png +0 -0
  122. package/docs/src/static/img/favicon-32x32.png +0 -0
  123. package/docs/src/static/img/favicon.ico +0 -0
  124. package/docs/src/static/img/icon-square.indd +0 -0
  125. package/docs/src/static/img/icon-square.png +0 -0
  126. package/docs/src/static/img/icon.png +0 -0
  127. package/docs/src/static/img/logo-192x192.png +0 -0
  128. package/docs/src/static/img/logo-512x512.png +0 -0
  129. package/docs/src/static/img/logos/angular.png +0 -0
  130. package/docs/src/static/img/logos/django.png +0 -0
  131. package/docs/src/static/img/logos/golang.png +0 -0
  132. package/docs/src/static/img/logos/handlebars.png +0 -0
  133. package/docs/src/static/img/logos/jinja.png +0 -0
  134. package/docs/src/static/img/logos/mustache.png +0 -0
  135. package/docs/src/static/img/logos/nunjucks.png +0 -0
  136. package/docs/src/static/img/logos/twig.png +0 -0
  137. package/docs/src/static/img/old_demo.gif +0 -0
  138. package/docs/src/static/img/style.css +0 -122
  139. package/docs/src/static/js/animate.js +0 -69
  140. package/docs/src/static/js/editor.js +0 -171
  141. package/docs/src/static/js/hamburger.js +0 -19
  142. package/docs/src/static/js/modal.js +0 -47
  143. package/docs/src/static/js/worker.js +0 -142
  144. package/docs/src/static/py/EditorConfig-99-py3-none-any.whl +0 -0
  145. package/docs/src/static/py/PyYAML-99-py3-none-any.whl +0 -0
  146. package/docs/src/static/py/click-99-py3-none-any.whl +0 -0
  147. package/docs/src/static/py/colorama-99-py3-none-any.whl +0 -0
  148. package/docs/src/static/py/cssbeautifier-99-py3-none-any.whl +0 -0
  149. package/docs/src/static/py/djlint-99-py3-none-any.whl +0 -0
  150. package/docs/src/static/py/html_tag_names-99-py3-none-any.whl +0 -0
  151. package/docs/src/static/py/html_void_elements-99-py3-none-any.whl +0 -0
  152. package/docs/src/static/py/jsbeautifier-99-py3-none-any.whl +0 -0
  153. package/docs/src/static/py/json5-99-py3-none-any.whl +0 -0
  154. package/docs/src/static/py/pathspec-99-py3-none-any.whl +0 -0
  155. package/docs/src/static/py/regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +0 -0
  156. package/docs/src/static/py/six-1.16.0-py2.py3-none-any.whl +0 -0
  157. package/docs/src/static/py/tomli-2.0.1-py3-none-any.whl +0 -0
  158. package/docs/src/static/py/tqdm-4.65.0-py3-none-any.whl +0 -0
  159. package/icon.xcf +0 -0
  160. package/poetry.lock +0 -835
  161. package/pyproject.toml +0 -100
  162. package/renovate.json +0 -44
  163. package/scripts/updateVersion.js +0 -16
  164. package/src/djlint/__init__.py +0 -451
  165. package/src/djlint/__main__.py +0 -4
  166. package/src/djlint/formatter/__init__.py +0 -1
  167. package/src/djlint/formatter/attributes.py +0 -212
  168. package/src/djlint/formatter/compress.py +0 -64
  169. package/src/djlint/formatter/condense.py +0 -221
  170. package/src/djlint/formatter/css.py +0 -60
  171. package/src/djlint/formatter/expand.py +0 -111
  172. package/src/djlint/formatter/indent.py +0 -418
  173. package/src/djlint/formatter/js.py +0 -58
  174. package/src/djlint/helpers.py +0 -321
  175. package/src/djlint/lint.py +0 -128
  176. package/src/djlint/output.py +0 -220
  177. package/src/djlint/reformat.py +0 -63
  178. package/src/djlint/rules/H025.py +0 -65
  179. package/src/djlint/rules.yaml +0 -279
  180. package/src/djlint/settings.py +0 -969
  181. package/src/djlint/src.py +0 -91
  182. package/tests/__init__.py +0 -0
  183. package/tests/conftest.py +0 -239
  184. package/tests/test_cli.py +0 -71
  185. package/tests/test_config/__init__.py +0 -0
  186. package/tests/test_config/test_blank_line_after_tag.py +0 -135
  187. package/tests/test_config/test_blank_line_before_tag.py +0 -141
  188. package/tests/test_config/test_close_void_tags.py +0 -31
  189. package/tests/test_config/test_custom_blocks.py +0 -56
  190. package/tests/test_config/test_custom_html.py +0 -45
  191. package/tests/test_config/test_djlintrc/.djlintrc +0 -38
  192. package/tests/test_config/test_djlintrc/__init__.py +0 -0
  193. package/tests/test_config/test_djlintrc/test_config.py +0 -44
  194. package/tests/test_config/test_djlintrc_custom/.djlint-cust +0 -38
  195. package/tests/test_config/test_djlintrc_custom/.djlintrc +0 -2
  196. package/tests/test_config/test_djlintrc_custom/__init__.py +0 -0
  197. package/tests/test_config/test_djlintrc_custom/test_config.py +0 -48
  198. package/tests/test_config/test_excludes/__init__.py +0 -0
  199. package/tests/test_config/test_excludes/excluded.html +0 -1
  200. package/tests/test_config/test_excludes/foo/excluded.html +0 -1
  201. package/tests/test_config/test_excludes/html.html +0 -1
  202. package/tests/test_config/test_excludes/pyproject.toml +0 -3
  203. package/tests/test_config/test_excludes/test_config.py +0 -30
  204. package/tests/test_config/test_extension/__init__.py +0 -0
  205. package/tests/test_config/test_extension/html.test +0 -1
  206. package/tests/test_config/test_extension/pyproject.toml +0 -3
  207. package/tests/test_config/test_extension/test_config.py +0 -27
  208. package/tests/test_config/test_files/.djlintrc_global +0 -9
  209. package/tests/test_config/test_files/test.html +0 -3
  210. package/tests/test_config/test_files/test_config.py +0 -123
  211. package/tests/test_config/test_files/test_two.html +0 -1
  212. package/tests/test_config/test_format_attribute_template_tags.py +0 -280
  213. package/tests/test_config/test_format_css.py +0 -197
  214. package/tests/test_config/test_format_js.py +0 -220
  215. package/tests/test_config/test_gitignore/__init__.py +0 -0
  216. package/tests/test_config/test_gitignore/html_one.html +0 -1
  217. package/tests/test_config/test_gitignore/html_two.html +0 -1
  218. package/tests/test_config/test_gitignore/test_config.py +0 -142
  219. package/tests/test_config/test_ignore/__init__.py +0 -0
  220. package/tests/test_config/test_ignore/html.html +0 -1
  221. package/tests/test_config/test_ignore/html_two.html +0 -12
  222. package/tests/test_config/test_ignore/pyproject.toml +0 -3
  223. package/tests/test_config/test_ignore/test_config.py +0 -32
  224. package/tests/test_config/test_ignore_blocks.py +0 -45
  225. package/tests/test_config/test_ignore_case.py +0 -39
  226. package/tests/test_config/test_indent.py +0 -63
  227. package/tests/test_config/test_linter_output_format/__init__.py +0 -0
  228. package/tests/test_config/test_linter_output_format/html-one.html +0 -1
  229. package/tests/test_config/test_linter_output_format/html-two.html +0 -1
  230. package/tests/test_config/test_linter_output_format/pyproject.toml +0 -3
  231. package/tests/test_config/test_linter_output_format/test_config.py +0 -34
  232. package/tests/test_config/test_max_attribute_length.py +0 -100
  233. package/tests/test_config/test_max_line_length.py +0 -94
  234. package/tests/test_config/test_per_file_ignores/__init__.py +0 -0
  235. package/tests/test_config/test_per_file_ignores/html.html +0 -2
  236. package/tests/test_config/test_per_file_ignores/pyproject.toml +0 -2
  237. package/tests/test_config/test_per_file_ignores/test_config.py +0 -25
  238. package/tests/test_config/test_pragmas/__init__.py +0 -0
  239. package/tests/test_config/test_pragmas/html_five.html +0 -2
  240. package/tests/test_config/test_pragmas/html_four.html +0 -5
  241. package/tests/test_config/test_pragmas/html_one.html +0 -1
  242. package/tests/test_config/test_pragmas/html_six.html +0 -2
  243. package/tests/test_config/test_pragmas/html_three.html +0 -4
  244. package/tests/test_config/test_pragmas/html_two.html +0 -2
  245. package/tests/test_config/test_pragmas/pyproject.toml +0 -3
  246. package/tests/test_config/test_pragmas/test_config.py +0 -142
  247. package/tests/test_config/test_preserve_blank_lines.py +0 -109
  248. package/tests/test_config/test_preserve_leading_space.py +0 -159
  249. package/tests/test_config/test_profile/__init__.py +0 -0
  250. package/tests/test_config/test_profile/html.html +0 -2
  251. package/tests/test_config/test_profile/pyproject.toml +0 -3
  252. package/tests/test_config/test_profile/test_config.py +0 -64
  253. package/tests/test_config/test_pyproject/__init__.py +0 -0
  254. package/tests/test_config/test_pyproject/blank.html +0 -0
  255. package/tests/test_config/test_pyproject/pyproject.toml +0 -36
  256. package/tests/test_config/test_pyproject/test_config.py +0 -44
  257. package/tests/test_django/__init__.py +0 -0
  258. package/tests/test_django/test_asset.py +0 -32
  259. package/tests/test_django/test_autoescape.py +0 -25
  260. package/tests/test_django/test_block.py +0 -29
  261. package/tests/test_django/test_blocktrans.py +0 -236
  262. package/tests/test_django/test_blocktrans_trimmed.py +0 -283
  263. package/tests/test_django/test_comments.py +0 -164
  264. package/tests/test_django/test_filter.py +0 -30
  265. package/tests/test_django/test_for.py +0 -34
  266. package/tests/test_django/test_if.py +0 -34
  267. package/tests/test_django/test_ifchanged.py +0 -37
  268. package/tests/test_django/test_include.py +0 -24
  269. package/tests/test_django/test_load.py +0 -24
  270. package/tests/test_django/test_quoted.py +0 -34
  271. package/tests/test_django/test_spaceless.py +0 -30
  272. package/tests/test_django/test_tag_spaces.py +0 -35
  273. package/tests/test_django/test_templatetag.py +0 -40
  274. package/tests/test_django/test_verbatim.py +0 -24
  275. package/tests/test_django/test_with.py +0 -32
  276. package/tests/test_djlint/-.html +0 -1
  277. package/tests/test_djlint/__init__.py +0 -0
  278. package/tests/test_djlint/bad.html +0 -6
  279. package/tests/test_djlint/bad.html.dj +0 -23
  280. package/tests/test_djlint/bad.html.dj2 +0 -2
  281. package/tests/test_djlint/multiple_files/a/a.html +0 -1
  282. package/tests/test_djlint/multiple_files/b/b1.html +0 -1
  283. package/tests/test_djlint/multiple_files/b/b2.html +0 -1
  284. package/tests/test_djlint/test_djlint.py +0 -242
  285. package/tests/test_golang/__init__.py +0 -0
  286. package/tests/test_golang/test_if.py +0 -24
  287. package/tests/test_golang/test_range.py +0 -24
  288. package/tests/test_handlebars/__init__.py +0 -0
  289. package/tests/test_handlebars/test_each.py +0 -34
  290. package/tests/test_handlebars/test_else.py +0 -24
  291. package/tests/test_handlebars/test_with.py +0 -24
  292. package/tests/test_html/__init__.py +0 -0
  293. package/tests/test_html/test_alpinejs.py +0 -65
  294. package/tests/test_html/test_attributes.py +0 -935
  295. package/tests/test_html/test_aurelia.py +0 -24
  296. package/tests/test_html/test_basics.py +0 -905
  297. package/tests/test_html/test_bracket_same_line.py +0 -177
  298. package/tests/test_html/test_case.py +0 -81
  299. package/tests/test_html/test_cdata.py +0 -34
  300. package/tests/test_html/test_comments.py +0 -333
  301. package/tests/test_html/test_css.py +0 -193
  302. package/tests/test_html/test_doctype_declarations.py +0 -202
  303. package/tests/test_html/test_ignored.py +0 -193
  304. package/tests/test_html/test_interpolation.py +0 -56
  305. package/tests/test_html/test_line_break_after_multiline_tag.py +0 -95
  306. package/tests/test_html/test_next_line_empty.py +0 -53
  307. package/tests/test_html/test_selfclosing.py +0 -55
  308. package/tests/test_html/test_single_attribute_per_line.py +0 -87
  309. package/tests/test_html/test_srcset.py +0 -43
  310. package/tests/test_html/test_svg.py +0 -104
  311. package/tests/test_html/test_symbol_entities.py +0 -34
  312. package/tests/test_html/test_tag_code.py +0 -24
  313. package/tests/test_html/test_tag_dd.py +0 -24
  314. package/tests/test_html/test_tag_details_summary.py +0 -24
  315. package/tests/test_html/test_tag_dt.py +0 -24
  316. package/tests/test_html/test_tag_fig_caption.py +0 -29
  317. package/tests/test_html/test_tag_hr.py +0 -29
  318. package/tests/test_html/test_tag_picture.py +0 -32
  319. package/tests/test_html/test_tag_pre.py +0 -45
  320. package/tests/test_html/test_tag_script.py +0 -516
  321. package/tests/test_html/test_tag_small.py +0 -24
  322. package/tests/test_html/test_tag_span.py +0 -119
  323. package/tests/test_html/test_tag_textarea.py +0 -82
  324. package/tests/test_html/test_tags.py +0 -842
  325. package/tests/test_html/test_text.py +0 -34
  326. package/tests/test_html/test_whitespace.py +0 -477
  327. package/tests/test_html/test_yaml.py +0 -156
  328. package/tests/test_jinja/__init__.py +0 -0
  329. package/tests/test_jinja/test_call.py +0 -34
  330. package/tests/test_jinja/test_parenthesis.py +0 -24
  331. package/tests/test_linter/__init__.py +0 -0
  332. package/tests/test_linter/test_custom_rules/.djlint_rules.yaml +0 -6
  333. package/tests/test_linter/test_custom_rules/__init__.py +0 -0
  334. package/tests/test_linter/test_custom_rules/html.html +0 -1
  335. package/tests/test_linter/test_custom_rules/pyproject.toml +0 -1
  336. package/tests/test_linter/test_custom_rules/test_linter.py +0 -29
  337. package/tests/test_linter/test_custom_rules_bad/.djlint_rules.yaml +0 -24
  338. package/tests/test_linter/test_custom_rules_bad/__init__.py +0 -0
  339. package/tests/test_linter/test_custom_rules_bad/html.html +0 -1
  340. package/tests/test_linter/test_custom_rules_bad/pyproject.toml +0 -1
  341. package/tests/test_linter/test_custom_rules_bad/test_linter.py +0 -29
  342. package/tests/test_linter/test_django_linter.py +0 -476
  343. package/tests/test_linter/test_h005.py +0 -45
  344. package/tests/test_linter/test_h006.py +0 -81
  345. package/tests/test_linter/test_h007.py +0 -45
  346. package/tests/test_linter/test_h008.py +0 -60
  347. package/tests/test_linter/test_h009.py +0 -45
  348. package/tests/test_linter/test_h010.py +0 -44
  349. package/tests/test_linter/test_h037.py +0 -150
  350. package/tests/test_linter/test_ignore_rules.py +0 -45
  351. package/tests/test_linter/test_jinja_linter.py +0 -227
  352. package/tests/test_linter/test_linter.py +0 -691
  353. package/tests/test_linter/test_nunjucks_linter.py +0 -59
  354. package/tests/test_linter/test_python_module_rules/.djlint_rules.yaml +0 -4
  355. package/tests/test_linter/test_python_module_rules/__init__.py +0 -0
  356. package/tests/test_linter/test_python_module_rules/html_bad.html +0 -3
  357. package/tests/test_linter/test_python_module_rules/html_ok.html +0 -3
  358. package/tests/test_linter/test_python_module_rules/my_module.py +0 -32
  359. package/tests/test_linter/test_python_module_rules/pyproject.toml +0 -1
  360. package/tests/test_linter/test_python_module_rules/test_linter.py +0 -26
  361. package/tests/test_nunjucks/__init__.py +0 -0
  362. package/tests/test_nunjucks/test_functions.py +0 -94
  363. package/tests/test_nunjucks/test_macros.py +0 -41
  364. package/tests/test_nunjucks/test_set.py +0 -206
  365. package/tests/test_nunjucks/test_spaceless.py +0 -24
  366. package/tests/test_twig/__init__.py +0 -0
  367. package/tests/test_twig/test_comments.py +0 -51
  368. package/tox.ini +0 -48
@@ -1,59 +0,0 @@
1
- """Djlint linter rule tests for nunjucks.
2
-
3
- poetry run pytest tests/test_linter/test_nunjucks_linter.py
4
-
5
- """
6
- import pytest
7
-
8
- from src.djlint.lint import linter
9
- from tests.conftest import lint_printer
10
-
11
- test_data = [
12
- pytest.param(
13
- ("{%- test-%}"),
14
- (
15
- [
16
- {
17
- "code": "T001",
18
- "line": "1:4",
19
- "match": "test-%}",
20
- "message": "Variables should be wrapped in a single whitespace.",
21
- }
22
- ]
23
- ),
24
- id="T001",
25
- ),
26
- pytest.param(
27
- ("{%-test -%}"),
28
- (
29
- [
30
- {
31
- "code": "T001",
32
- "line": "1:0",
33
- "match": "{%-test",
34
- "message": "Variables should be wrapped in a single whitespace.",
35
- }
36
- ]
37
- ),
38
- id="T001_2",
39
- ),
40
- pytest.param(
41
- ("{%- test -%}"),
42
- ([]),
43
- id="T001_3",
44
- ),
45
- ]
46
-
47
-
48
- @pytest.mark.parametrize(("source", "expected"), test_data)
49
- def test_base(source, expected, nunjucks_config):
50
- filename = "test.html"
51
- output = linter(nunjucks_config, source, filename, filename)
52
-
53
- lint_printer(source, expected, output[filename])
54
-
55
- mismatch = list(filter(lambda x: x not in expected, output[filename])) + list(
56
- filter(lambda x: x not in output[filename], expected)
57
- )
58
-
59
- assert len(mismatch) == 0
@@ -1,4 +0,0 @@
1
- - rule:
2
- name: T001
3
- message: Found the 'bad' word
4
- python_module: tests.test_linter.test_python_module_rules.my_module
@@ -1,3 +0,0 @@
1
- Random content
2
- I'm bad
3
- Random content
@@ -1,3 +0,0 @@
1
- Random content
2
- I'm ok
3
- Random content
@@ -1,32 +0,0 @@
1
- """Test module for custom rules."""
2
- import re
3
- from typing import Any, Dict, List
4
-
5
- from djlint.lint import get_line
6
- from djlint.settings import Config
7
-
8
-
9
- def run(
10
- rule: Dict[str, Any],
11
- config: Config,
12
- html: str,
13
- filepath: str,
14
- line_ends: List[Dict[str, int]],
15
- *args: Any,
16
- **kwargs: Any,
17
- ) -> List[Dict[str, str]]:
18
- """Rule that fails if if the html file contains 'bad'.
19
-
20
- In the real world, this should be done with a simple regex rule.
21
- """
22
- errors: List[Dict[str, str]] = []
23
- for match in re.finditer(r"bad", html):
24
- errors.append(
25
- {
26
- "code": rule["name"],
27
- "line": get_line(match.start(), line_ends),
28
- "match": match.group().strip()[:20],
29
- "message": rule["message"],
30
- }
31
- )
32
- return errors
@@ -1,26 +0,0 @@
1
- """Djlint tests specific to pyproject.toml configuration.
2
-
3
- run::
4
-
5
- pytest tests/test_linter/test_python_module_rules/test_linter.py --cov=src/djlint --cov-branch \
6
- --cov-report xml:coverage.xml --cov-report term-missing
7
-
8
- """
9
-
10
-
11
- from click.testing import CliRunner
12
-
13
- from src.djlint import main as djlint
14
-
15
-
16
- def test_custom_rules(runner: CliRunner) -> None:
17
- """Test that our python_module is properly loaded and run."""
18
- result = runner.invoke(
19
- djlint, ["tests/test_linter/test_python_module_rules/", "--profile", "django"]
20
- )
21
- print(result.output)
22
- assert """Linting""" in result.output
23
- assert """2/2""" in result.output
24
- assert """T001 2:4""" in result.output
25
- assert """Linted 2 files, found 1 error.""" in result.output
26
- assert result.exit_code == 1
File without changes
@@ -1,94 +0,0 @@
1
- """Test nunjucks functions.
2
-
3
- poetry run pytest tests/test_nunjucks/test_functions.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import config_builder, printer
9
-
10
- test_data = [
11
- pytest.param(
12
- (
13
- "{{ myfunc({\n"
14
- " bar: {\n"
15
- " baz: {\n"
16
- " cux: 1\n"
17
- " }\n"
18
- " }\n"
19
- "})}}"
20
- ),
21
- ("{{ myfunc({bar: {baz: {cux: 1}}}) }}\n"),
22
- ({}),
23
- id="long line",
24
- ),
25
- pytest.param(
26
- (
27
- "{{ myfunc({\n"
28
- " bar: {\n"
29
- " baz: {\n"
30
- " cux: 1\n"
31
- " }\n"
32
- " }\n"
33
- "})}}"
34
- ),
35
- (
36
- "{{ myfunc({\n"
37
- " bar: {\n"
38
- " baz: {\n"
39
- " cux: 1\n"
40
- " }\n"
41
- " }\n"
42
- "}) }}\n"
43
- ),
44
- ({"max_line_length": 1}),
45
- id="short line",
46
- ),
47
- pytest.param(
48
- (
49
- "<div>{{ myfunc({\n"
50
- " bar: {\n"
51
- " baz: {\n"
52
- " cux: 1\n"
53
- " }\n"
54
- " }\n"
55
- "})}}</div>"
56
- ),
57
- (
58
- "<div>\n"
59
- " {{ myfunc({\n"
60
- " bar: {\n"
61
- " baz: {\n"
62
- " cux: 1\n"
63
- " }\n"
64
- " }\n"
65
- " }) }}\n"
66
- "</div>\n"
67
- ),
68
- ({"max_line_length": 1}),
69
- id="nested",
70
- ),
71
- pytest.param(
72
- (
73
- "{{ myfunc({\n"
74
- " bar: {\n"
75
- " baz: {\n"
76
- " cux: 1\n"
77
- " }\n"
78
- " }\n"
79
- "})}"
80
- ),
81
- ("{{ myfunc({\n" "bar: {\n" "baz: {\n" "cux: 1\n" "}\n" "}\n" "})}\n"),
82
- ({}),
83
- id="broken",
84
- ),
85
- ]
86
-
87
-
88
- @pytest.mark.parametrize(("source", "expected", "args"), test_data)
89
- def test_base(source, expected, args, nunjucks_config):
90
- args["profile"] = "nunjucks"
91
- output = formatter(config_builder(args), source)
92
-
93
- printer(expected, source, output)
94
- assert expected == output
@@ -1,41 +0,0 @@
1
- """Test nunjucks macro tag.
2
-
3
- poetry run pytest tests/test_nunjucks/test_macros.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import printer
9
-
10
- test_data = [
11
- pytest.param(
12
- ("{% macro 'cool' %}<div>some html</div>{% endmacro %}"),
13
- ("{% macro 'cool' %}\n" " <div>some html</div>\n" "{% endmacro %}\n"),
14
- id="macro_tag",
15
- ),
16
- pytest.param(
17
- (
18
- "<ul>\n"
19
- " {# djlint:off #}\n"
20
- " <li>{{foo(1)}}</li>\n"
21
- " {# djlint:on #}\n"
22
- "</ul>"
23
- ),
24
- (
25
- "<ul>\n"
26
- " {# djlint:off #}\n"
27
- " <li>{{foo(1)}}</li>\n"
28
- " {# djlint:on #}\n"
29
- "</ul>\n"
30
- ),
31
- id="ignored code should not be touched",
32
- ),
33
- ]
34
-
35
-
36
- @pytest.mark.parametrize(("source", "expected"), test_data)
37
- def test_base(source, expected, nunjucks_config):
38
- output = formatter(nunjucks_config, source)
39
-
40
- printer(expected, source, output)
41
- assert expected == output
@@ -1,206 +0,0 @@
1
- """Test nunjucks set tags.
2
-
3
- poetry run pytest tests/test_nunjucks/test_set.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import config_builder, printer
9
-
10
- test_data = [
11
- pytest.param(
12
- ("{%- set posts = collections.docs -%}"),
13
- ("{%- set posts = collections.docs -%}\n"),
14
- ({}),
15
- id="set",
16
- ),
17
- pytest.param(
18
- ("{%-set posts = collections.docs-%}\n{%asdf%}"),
19
- ("{%- set posts = collections.docs -%}\n" "{% asdf %}\n"),
20
- ({}),
21
- id="set_with_sibling",
22
- ),
23
- pytest.param(
24
- ('<title>{% set_title "My Title" %}</title>'),
25
- ('<title>{% set_title "My Title" %}</title>\n'),
26
- ({}),
27
- id="don't break underscore stuff",
28
- ),
29
- pytest.param(
30
- (
31
- "{% set schema=[\n"
32
- "{\n"
33
- '"name":"id",\n'
34
- '"type": "integer",\n'
35
- '"primary": true,\n'
36
- "id:1\n"
37
- "},\n"
38
- "{\n"
39
- '"name": "name",\n'
40
- '"type": "string"\n'
41
- "}\n"
42
- "] %}"
43
- ),
44
- (
45
- "{% set schema = [\n"
46
- " {\n"
47
- ' name: "id",\n'
48
- ' type: "integer",\n'
49
- " primary: true,\n"
50
- " id: 1\n"
51
- " },\n"
52
- " {\n"
53
- ' name: "name",\n'
54
- ' type: "string"\n'
55
- " }\n"
56
- "] %}\n"
57
- ),
58
- ({"max_line_length": 10}),
59
- id="indent multiilne",
60
- ),
61
- pytest.param(
62
- (
63
- "<div>{% set schema=[\n"
64
- "{\n"
65
- '"name":"id",\n'
66
- '"type": "integer",\n'
67
- '"primary": true,\n'
68
- "id:1\n"
69
- "},\n"
70
- "{\n"
71
- '"name": "name",\n'
72
- '"type": "string"\n'
73
- "}\n"
74
- "] %}</div>"
75
- ),
76
- (
77
- "<div>\n"
78
- " {% set schema = [\n"
79
- " {\n"
80
- ' name: "id",\n'
81
- ' type: "integer",\n'
82
- " primary: true,\n"
83
- " id: 1\n"
84
- " },\n"
85
- " {\n"
86
- ' name: "name",\n'
87
- ' type: "string"\n'
88
- " }\n"
89
- " ] %}\n"
90
- "</div>\n"
91
- ),
92
- ({"max_line_length": 10}),
93
- id="nestedindent multiilne",
94
- ),
95
- pytest.param(
96
- (
97
- '{% set schema=[{"name": "id",\n'
98
- '"type": "integer",\n'
99
- '"primary": true\n'
100
- "},] %}"
101
- ),
102
- ('{% set schema = [{name: "id", type: "integer", primary: true}] %}\n'),
103
- ({}),
104
- id="indent invalid json",
105
- ),
106
- pytest.param(
107
- (
108
- '{% set schema=[{name: "id",\n'
109
- "'type': \"1\",\n"
110
- '"primary+1": true\n'
111
- "}] %}"
112
- ),
113
- ('{% set schema = [{name: "id", type: "1", "primary+1": true}] %}\n'),
114
- ({}),
115
- id="indent valid json",
116
- ),
117
- pytest.param(
118
- (
119
- '{% set table_keys = [ ( "date_started", "Start date"), ( "name", "Name" )] %}'
120
- ),
121
- ("{% set table_keys = [('date_started', 'Start date'), ('name', 'Name')] %}\n"),
122
- ({}),
123
- id="indent py style list",
124
- ),
125
- pytest.param(
126
- (
127
- '{% set cta %}{% include "partials/cta.njk" %}<div></div>{% endset %}\n'
128
- "{%-set posts = collections.docs-%}\n"
129
- "{%asdf%}"
130
- ),
131
- (
132
- "{% set cta %}\n"
133
- ' {% include "partials/cta.njk" %}\n'
134
- " <div></div>\n"
135
- "{% endset %}\n"
136
- "{%- set posts = collections.docs -%}\n"
137
- "{% asdf %}\n"
138
- ),
139
- ({}),
140
- id="set block",
141
- ),
142
- pytest.param(
143
- (
144
- "<ul>\n"
145
- " {# djlint:off #}\n"
146
- " <li>{%set a=[{'x':1}]%}</li>\n"
147
- " {# djlint:on #}\n"
148
- "</ul>"
149
- ),
150
- (
151
- "<ul>\n"
152
- " {# djlint:off #}\n"
153
- " <li>{%set a=[{'x':1}]%}</li>\n"
154
- " {# djlint:on #}\n"
155
- "</ul>\n"
156
- ),
157
- ({"max_line_length": 1}),
158
- id="ignored code should not be touched",
159
- ),
160
- pytest.param(
161
- ('{%- set posts = "¿Spécial çhärs 👻?" -%}'),
162
- ('{%- set posts = "¿Spécial çhärs 👻?" -%}\n'),
163
- ({}),
164
- id="set",
165
- ),
166
- pytest.param(
167
- ("<li>{{ foo(1,2) }}</li>"),
168
- ("<li>{{ foo(1, 2) }}</li>\n"),
169
- ({}),
170
- id="don't add parenth to lists",
171
- ),
172
- pytest.param(
173
- ('{{- foo("bar") -}}'),
174
- ('{{- foo("bar") -}}\n'),
175
- ({}),
176
- id="don't break spaceless tags #667",
177
- ),
178
- pytest.param(
179
- (
180
- "{% for tag in collections.all | getAllTags | filterTagList | sort %}\n"
181
- " {% set tagUrl %}\n"
182
- " /tags/{{ tag | slugify }}/{% endset %}\n"
183
- ' <a href="{{ tagUrl }}" class="post-tag">{{ tag }} ({{ collections[tag].length }})</a>\n'
184
- " {% endfor %}\n"
185
- ),
186
- (
187
- "{% for tag in collections.all | getAllTags | filterTagList | sort %}\n"
188
- " {% set tagUrl %}\n"
189
- " /tags/{{ tag | slugify }}/\n"
190
- " {% endset %}\n"
191
- ' <a href="{{ tagUrl }}" class="post-tag">{{ tag }} ({{ collections[tag].length }})</a>\n'
192
- "{% endfor %}\n"
193
- ),
194
- ({}),
195
- id="check dedent on nested block",
196
- ),
197
- ]
198
-
199
-
200
- @pytest.mark.parametrize(("source", "expected", "args"), test_data)
201
- def test_base(source, expected, args, nunjucks_config):
202
- args["profile"] = "nunjucks"
203
- output = formatter(config_builder(args), source)
204
-
205
- printer(expected, source, output)
206
- assert expected == output
@@ -1,24 +0,0 @@
1
- """Test nunjucks spaceless tag.
2
-
3
- poetry run pytest tests/test_nunjucks/test_spaceless.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import printer
9
-
10
- test_data = [
11
- pytest.param(
12
- ("{%- if entry.children.length -%}<strong>{%- endif -%}"),
13
- ("{%- if entry.children.length -%}<strong>{%- endif -%}\n"),
14
- id="spaceless_tag",
15
- ),
16
- ]
17
-
18
-
19
- @pytest.mark.parametrize(("source", "expected"), test_data)
20
- def test_base(source, expected, nunjucks_config):
21
- output = formatter(nunjucks_config, source)
22
-
23
- printer(expected, source, output)
24
- assert expected == output
File without changes
@@ -1,51 +0,0 @@
1
- """Test twig comment tags.
2
-
3
- poetry run pytest tests/test_twig/test_comments.py
4
- """
5
- import pytest
6
-
7
- from src.djlint.reformat import formatter
8
- from tests.conftest import printer
9
-
10
- test_data = [
11
- pytest.param(
12
- ("{% if %}\n" " {#\n" " line\n" " #}\n" "{% endif %}"),
13
- ("{% if %}\n" " {#\n" " line\n" " #}\n" "{% endif %}\n"),
14
- id="comments",
15
- ),
16
- pytest.param(
17
- (
18
- "<div>\n"
19
- " {#\n"
20
- " multi\n"
21
- " line\n"
22
- " comment\n"
23
- " #}\n"
24
- "</div>\n"
25
- "<div>\n"
26
- " <p></p>\n"
27
- "</div>\n"
28
- ),
29
- (
30
- "<div>\n"
31
- " {#\n"
32
- " multi\n"
33
- " line\n"
34
- " comment\n"
35
- " #}\n"
36
- "</div>\n"
37
- "<div>\n"
38
- " <p></p>\n"
39
- "</div>\n"
40
- ),
41
- id="comments",
42
- ),
43
- ]
44
-
45
-
46
- @pytest.mark.parametrize(("source", "expected"), test_data)
47
- def test_base(source, expected, nunjucks_config):
48
- output = formatter(nunjucks_config, source)
49
-
50
- printer(expected, source, output)
51
- assert expected == output
package/tox.ini DELETED
@@ -1,48 +0,0 @@
1
- [tox]
2
- envlist = test
3
- skip_missing_interpreters = True
4
- isolated_build = True
5
- setenv =
6
- PYTHONDONTWRITEBYTECODE=1
7
-
8
- [testenv:isort]
9
- commands =
10
- isort src/djlint
11
- isort tests
12
- skip_install = True
13
- allowlist_externals = isort
14
-
15
- [testenv:black]
16
- commands =
17
- black src/djlint
18
- black tests
19
- skip_install = True
20
- allowlist_externals = black
21
-
22
- [testenv:lint]
23
- commands =
24
- ruff src/djlint
25
- black --fast --check src/djlint
26
- mypy src/djlint
27
- ruff tests
28
- black --fast --check tests
29
- mypy tests
30
- skip_install = true
31
- allowlist_externals =
32
- black
33
- mypy
34
- ruff
35
-
36
- [testenv]
37
- commands =
38
- pytest --cov=src/djlint --cov-branch --cov-report xml:coverage.xml --cov-report term-missing {posargs:} -n auto --dist loadgroup
39
- ; need to install so that we can test python calls
40
- skip_install = false
41
- allowlist_externals = pytest
42
-
43
- [testenv:test-fast]
44
- commands =
45
- pytest -n 7
46
- ; need to install so that we can test python calls
47
- skip_install = false
48
- allowlist_externals = pytest