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
package/pyproject.toml DELETED
@@ -1,100 +0,0 @@
1
- [build-system]
2
- requires = ["poetry_core>=1.0.0"]
3
- build-backend = "poetry.core.masonry.api"
4
-
5
-
6
- [tool]
7
-
8
- [tool.poetry]
9
- name="djlint"
10
- version="1.30.0"
11
- description="HTML Template Linter and Formatter"
12
- license="GPL-3.0-or-later"
13
- authors=["Christopher Pickering <cpickering@rhc.net>"]
14
- maintainers=["Christopher Pickering <cpickering@rhc.net>"]
15
- readme="README.md"
16
- repository="https://github.com/Riverside-Healthcare/djlint"
17
- documentation="https://djlint.com"
18
- classifiers=[
19
- "Programming Language :: Python :: 3",
20
- "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
21
- "Operating System :: OS Independent",
22
- ]
23
- packages = [
24
- { include = "djlint", from = "src" },
25
- ]
26
- include = ["rules.yaml"]
27
-
28
- [tool.poetry.dependencies]
29
- python = "^3.8.0,<4.0"
30
- click = "^8.0.1"
31
- PyYAML = "^6.0"
32
- colorama = "^0.4.4"
33
- regex = "^2023.0.0"
34
- tqdm = "^4.62.2"
35
- tomli = { version = "^2.0.1", python = "<3.11" }
36
- pathspec = "^0.11.0"
37
- html-void-elements = "^0.1.0"
38
- html-tag-names = "^0.1.2"
39
- jsbeautifier = "^1.14.4"
40
- cssbeautifier = "^1.14.4"
41
- json5 = "^0.9.11"
42
-
43
- [tool.poetry.scripts]
44
- djlint = "djlint:main"
45
-
46
-
47
- [tool.poetry.group.dev.dependencies]
48
- black = "^23.1.0"
49
- isort = "^5.12.0"
50
- coverage = "^7.2.2"
51
- pytest = "^7.2.2"
52
- pytest-cov = "^4.0.0"
53
- pytest-xdist = "^3.2.1"
54
- ruff = "^0.0.270"
55
- mypy = "^1.1.1"
56
- types-pyyaml = "^6.0.12.8"
57
- tox = "^4.4.8"
58
-
59
- [tool.black]
60
- max_line_length = 99
61
- quiet = true
62
-
63
- [tool.isort]
64
- profile = "black"
65
- quiet = true
66
-
67
- [tool.mypy]
68
- ignore_missing_imports = true
69
-
70
- [tool.ruff]
71
- line-length = 146
72
- select = [
73
- "A",
74
- "C4",
75
- "D",
76
- "DJ",
77
- "E",
78
- "F",
79
- "I",
80
- "N",
81
- "PL",
82
- "PT",
83
- "SIM",
84
- "T20",
85
- "W",
86
- ]
87
- target-version = "py311"
88
- ignore = ["E501", "PLR0913", "PLR0915", "PLR0912", "D203", "D213"]
89
-
90
- [tool.ruff.per-file-ignores]
91
- "tests/*" = ["N802", "D103", "T201", "D104", "PLR0915", "PLR2004"]
92
- "src/djlint/__init__.py" = ["D403"]
93
- "src/djlint/formatter/__init__.py" = ["D104"]
94
- "src/djlint/formatter/css.py" = ["PLW2901"]
95
- "src/djlint/formatter/js.py" = ["PLW2901"]
96
- "src/djlint/lint.py" = ["PLW2901"]
97
- "src/djlint/formatter/indent.py" = ["SIM114", "E722"]
98
-
99
- [tool.ruff.mccabe]
100
- max-complexity = 10
package/renovate.json DELETED
@@ -1,44 +0,0 @@
1
- {
2
- "extends": [
3
- "config:base",
4
- "group:allNonMajor",
5
- ":separateMultipleMajorReleases",
6
- ":ignoreUnstable",
7
- ":enableVulnerabilityAlertsWithLabel(security)",
8
- ":rebaseStalePrs",
9
- ":npm",
10
- "npm:unpublishSafe"
11
- ],
12
- "bumpVersion": "patch",
13
- "commitMessagePrefix": "chore(deps)",
14
- "labels": [
15
- "maintenance",
16
- "renovate"
17
- ],
18
- "baseBranches": ["dev"],
19
- "packageRules": [
20
- {
21
- "matchUpdateTypes": ["pin","digest", "minor", "patch"],
22
- "automerge": true
23
- },
24
- {
25
- "matchDepTypes": ["devDependencies"],
26
- "automerge": true
27
- },
28
- {
29
- "extends": "packages:linters",
30
- "groupName": "linters",
31
- "automerge": true
32
- },
33
- {
34
- "extends": "packages:test",
35
- "groupName": "test packages",
36
- "automerge": true
37
- }
38
- ],
39
- "pre-commit": {
40
- "enabled": true
41
- },
42
- "schedule": ["before 10pm on Sunday"],
43
- "timezone": "America/Chicago"
44
- }
@@ -1,16 +0,0 @@
1
- const fs = require('fs/promises');
2
- const prettier = require('prettier');
3
-
4
- const updateVersion = async () => {
5
- const nextVersion = process.argv[2];
6
- const packageJson = JSON.parse(
7
- (await fs.readFile('package.json')).toString(),
8
- );
9
- packageJson.scripts.postinstall = `python3 -m pip install --upgrade djlint==${nextVersion}`;
10
- await fs.writeFile(
11
- 'package.json',
12
- prettier.format(JSON.stringify(packageJson), { filepath: 'package.json' }),
13
- );
14
- };
15
-
16
- updateVersion();
@@ -1,451 +0,0 @@
1
- #!/usr/bin/python
2
- """djLint · lint and reformat HTML templates."""
3
-
4
- import os
5
- import sys
6
- import tempfile
7
- from concurrent.futures import ProcessPoolExecutor, as_completed
8
- from functools import partial
9
- from pathlib import Path
10
- from typing import Dict, List, Optional, Tuple
11
-
12
- import click
13
- from click import echo
14
- from colorama import Fore, Style, colorama_text
15
- from tqdm import tqdm
16
-
17
- from .lint import lint_file
18
- from .output import print_output
19
- from .reformat import reformat_file
20
- from .settings import Config
21
- from .src import get_src
22
-
23
-
24
- @click.command(context_settings={"help_option_names": ["-h", "--help"]})
25
- @click.argument(
26
- "src",
27
- type=click.Path(
28
- exists=True, file_okay=True, dir_okay=True, readable=True, allow_dash=True
29
- ),
30
- nargs=-1,
31
- required=True,
32
- metavar="SRC ...",
33
- )
34
- @click.version_option(package_name="djlint")
35
- @click.option(
36
- "-e",
37
- "--extension",
38
- type=str,
39
- default="",
40
- help="File extension to check [default: html]",
41
- show_default=False,
42
- )
43
- @click.option(
44
- "-i",
45
- "--ignore",
46
- type=str,
47
- default="",
48
- help='Codes to ignore. ex: "H014,H017"',
49
- show_default=False,
50
- )
51
- @click.option(
52
- "--reformat",
53
- is_flag=True,
54
- help="Reformat the file(s).",
55
- )
56
- @click.option(
57
- "--check",
58
- is_flag=True,
59
- help="Check formatting on the file(s).",
60
- )
61
- @click.option(
62
- "--indent",
63
- type=int,
64
- help="Indent spacing. [default: 4]",
65
- show_default=False,
66
- )
67
- @click.option(
68
- "--quiet",
69
- is_flag=True,
70
- help="Do not print diff when reformatting.",
71
- )
72
- @click.option(
73
- "--profile",
74
- type=str,
75
- help="Enable defaults by template language. ops: django, jinja, nunjucks, handlebars, golang, angular, html [default: html]",
76
- )
77
- @click.option(
78
- "--require-pragma",
79
- is_flag=True,
80
- help="Only format or lint files that starts with a comment with the text 'djlint:on'",
81
- )
82
- @click.option(
83
- "--lint",
84
- is_flag=True,
85
- help="Lint for common issues. [default option]",
86
- )
87
- @click.option(
88
- "--use-gitignore",
89
- is_flag=True,
90
- help="Use .gitignore file to extend excludes.",
91
- )
92
- @click.option(
93
- "--warn",
94
- is_flag=True,
95
- help="Return errors as warnings.",
96
- )
97
- @click.option(
98
- "--preserve-leading-space",
99
- is_flag=True,
100
- help="Attempt to preserve leading space on text.",
101
- )
102
- @click.option(
103
- "--preserve-blank-lines",
104
- is_flag=True,
105
- help="Attempt to preserve blank lines.",
106
- )
107
- @click.option(
108
- "--format-css",
109
- is_flag=True,
110
- help="Also format contents of <style> tags.",
111
- )
112
- @click.option(
113
- "--format-js",
114
- is_flag=True,
115
- help="Also format contents of <script> tags.",
116
- )
117
- @click.option(
118
- "--configuration",
119
- type=click.Path(
120
- exists=True, file_okay=True, dir_okay=True, readable=True, allow_dash=True
121
- ),
122
- required=False,
123
- help="Path to global configuration file in .djlintrc format",
124
- )
125
- @click.option(
126
- "--statistics",
127
- is_flag=True,
128
- help="Count the number of occurrences of each error/warning code.",
129
- )
130
- @click.option(
131
- "--include",
132
- type=str,
133
- default="",
134
- help='Codes to include. ex: "H014,H017"',
135
- show_default=False,
136
- )
137
- @click.option(
138
- "--ignore-case",
139
- is_flag=True,
140
- help="Do not fix case on known html tags.",
141
- )
142
- @click.option(
143
- "--ignore-blocks",
144
- type=str,
145
- default="",
146
- help="Comma list of template blocks to not indent.",
147
- )
148
- @click.option(
149
- "--blank-line-after-tag",
150
- type=str,
151
- default="",
152
- help="Add an additional blank line after {% <tag> ... %} tag groups.",
153
- )
154
- @click.option(
155
- "--blank-line-before-tag",
156
- type=str,
157
- default="",
158
- help="Add an additional blank line before {% <tag> ... %} tag groups.",
159
- )
160
- @click.option(
161
- "--line-break-after-multiline-tag",
162
- is_flag=True,
163
- help="Do not condense the content of multi-line tags into the line of the last attribute.",
164
- )
165
- @click.option(
166
- "--custom-blocks",
167
- type=str,
168
- default="",
169
- help="Indent custom template blocks. For example {% toc %}...{% endtoc %}",
170
- )
171
- @click.option(
172
- "--custom-html",
173
- type=str,
174
- default="",
175
- help="Indent custom HTML tags. For example <mjml>",
176
- )
177
- @click.option(
178
- "--exclude",
179
- type=str,
180
- default="",
181
- help="Override the default exclude paths.",
182
- )
183
- @click.option(
184
- "--extend-exclude",
185
- type=str,
186
- default="",
187
- help="Add additional paths to the default exclude.",
188
- )
189
- @click.option(
190
- "--linter-output-format",
191
- type=str,
192
- default="",
193
- help="Customize order of linter output message.",
194
- )
195
- @click.option(
196
- "--max-line-length",
197
- type=int,
198
- help="Max line length. [default: 120]",
199
- show_default=False,
200
- )
201
- @click.option(
202
- "--max-attribute-length",
203
- type=int,
204
- help="Max attribute length. [default: 70]",
205
- show_default=False,
206
- )
207
- @click.option(
208
- "--format-attribute-template-tags",
209
- is_flag=True,
210
- help="Attempt to format template syntax inside of tag attributes.",
211
- )
212
- @click.option(
213
- "--per-file-ignores",
214
- type=(str, str),
215
- multiple=True,
216
- help="Ignore linter rules on a per-file basis.",
217
- )
218
- @click.option(
219
- "--indent-css",
220
- type=int,
221
- help="Set CSS indent level.",
222
- show_default=False,
223
- )
224
- @click.option(
225
- "--indent-js",
226
- type=int,
227
- help="Set JS indent level.",
228
- show_default=False,
229
- )
230
- @click.option(
231
- "--close-void-tags",
232
- is_flag=True,
233
- help="Add closing mark on known void tags. Ex: <img> becomse <img />",
234
- )
235
- @click.option(
236
- "--no-line-after-yaml",
237
- is_flag=True,
238
- help="Do not add a blank line after yaml front matter.",
239
- )
240
- @colorama_text(autoreset=True)
241
- def main(
242
- src: List[str],
243
- extension: str,
244
- ignore: str,
245
- reformat: bool,
246
- indent: Optional[int],
247
- check: bool,
248
- quiet: bool,
249
- profile: str,
250
- require_pragma: bool,
251
- lint: bool,
252
- use_gitignore: bool,
253
- warn: bool,
254
- preserve_leading_space: bool,
255
- preserve_blank_lines: bool,
256
- format_css: bool,
257
- format_js: bool,
258
- configuration: Optional[str],
259
- statistics: bool,
260
- include: str,
261
- ignore_case: bool,
262
- ignore_blocks: str,
263
- blank_line_after_tag: str,
264
- blank_line_before_tag: str,
265
- line_break_after_multiline_tag: bool,
266
- custom_blocks: str,
267
- custom_html: str,
268
- exclude: str,
269
- extend_exclude: str,
270
- linter_output_format: str,
271
- max_line_length: Optional[int],
272
- max_attribute_length: Optional[int],
273
- format_attribute_template_tags: bool,
274
- per_file_ignores: Optional[List[Tuple[str, str]]],
275
- indent_css: Optional[int],
276
- indent_js: Optional[int],
277
- close_void_tags: bool,
278
- no_line_after_yaml: bool,
279
- ) -> None:
280
- """djLint · HTML template linter and formatter."""
281
- config = Config(
282
- src[0],
283
- extension=extension,
284
- ignore=ignore,
285
- indent=indent,
286
- quiet=quiet,
287
- profile=profile,
288
- require_pragma=require_pragma,
289
- lint=lint or not (reformat or check),
290
- reformat=reformat,
291
- check=check,
292
- use_gitignore=use_gitignore,
293
- warn=warn,
294
- preserve_leading_space=preserve_leading_space,
295
- preserve_blank_lines=preserve_blank_lines,
296
- format_css=format_css,
297
- format_js=format_js,
298
- configuration=configuration,
299
- statistics=statistics,
300
- include=include,
301
- ignore_case=ignore_case,
302
- ignore_blocks=ignore_blocks,
303
- blank_line_after_tag=blank_line_after_tag,
304
- blank_line_before_tag=blank_line_before_tag,
305
- line_break_after_multiline_tag=line_break_after_multiline_tag,
306
- custom_blocks=custom_blocks,
307
- custom_html=custom_html,
308
- exclude=exclude,
309
- extend_exclude=extend_exclude,
310
- linter_output_format=linter_output_format,
311
- max_line_length=max_line_length,
312
- max_attribute_length=max_attribute_length,
313
- format_attribute_template_tags=format_attribute_template_tags,
314
- per_file_ignores=per_file_ignores,
315
- indent_css=indent_css,
316
- indent_js=indent_js,
317
- close_void_tags=close_void_tags,
318
- no_line_after_yaml=no_line_after_yaml,
319
- )
320
-
321
- temp_file = None
322
-
323
- if set("-").intersection(set(src)):
324
- if config.files:
325
- file_list = get_src([Path(x) for x in config.files], config)
326
-
327
- else:
328
- config.stdin = True
329
- stdin_stream = click.get_text_stream("stdin", encoding="utf8")
330
- stdin_text = stdin_stream.read()
331
- temp_file = tempfile.NamedTemporaryFile(delete=False)
332
- temp_file.write(str.encode(stdin_text))
333
- temp_file.seek(0)
334
-
335
- # cannot use gitignore for stdin paths.
336
- config.use_gitignore = False
337
-
338
- file_list = get_src([Path(temp_file.name)], config)
339
-
340
- else:
341
- file_list = get_src([Path(x) for x in src], config)
342
-
343
- if len(file_list) == 0:
344
- return
345
-
346
- message = ""
347
-
348
- if config.check is True:
349
- message = "Checking"
350
- elif config.reformat is True:
351
- message = "Reformatting"
352
-
353
- if config.lint:
354
- if message:
355
- message += " and "
356
- message += "Linting"
357
-
358
- # pylint: disable=C0209
359
- bar_message = (
360
- "{}{}{} {}{{n_fmt}}/{{total_fmt}}{} {}files{} {{bar}} {}{{elapsed}}{}".format(
361
- Fore.BLUE + Style.BRIGHT,
362
- message,
363
- Style.RESET_ALL,
364
- Fore.RED + Style.BRIGHT,
365
- Style.RESET_ALL,
366
- Fore.BLUE + Style.BRIGHT,
367
- Style.RESET_ALL,
368
- Fore.GREEN + Style.BRIGHT,
369
- Style.RESET_ALL + " ",
370
- )
371
- )
372
- if config.stdin is False and config.quiet is False:
373
- echo()
374
-
375
- worker_count = os.cpu_count() or 1
376
-
377
- progress_char = "┈━"
378
-
379
- if sys.platform == "win32":
380
- # Work around https://bugs.python.org/issue26903
381
- worker_count = min(worker_count, 60)
382
- progress_char = " »"
383
-
384
- with ProcessPoolExecutor(max_workers=worker_count) as exe:
385
- file_errors = []
386
-
387
- func = partial(process, config)
388
- futures = {exe.submit(func, this_file): this_file for this_file in file_list}
389
-
390
- if temp_file is None:
391
- elapsed = "00:00"
392
- with tqdm(
393
- total=len(file_list),
394
- bar_format=bar_message,
395
- colour="BLUE",
396
- ascii=progress_char,
397
- leave=False,
398
- ) as pbar:
399
- for future in as_completed(futures):
400
- file_errors.append(future.result())
401
- pbar.update()
402
- elapsed = pbar.format_interval(pbar.format_dict["elapsed"])
403
-
404
- finished_bar_message = "{}{}{} {}{{n_fmt}}/{{total_fmt}}{} {}files{} {{bar}} {}{}{} ".format(
405
- Fore.BLUE + Style.BRIGHT,
406
- message,
407
- Style.RESET_ALL,
408
- Fore.GREEN + Style.BRIGHT,
409
- Style.RESET_ALL,
410
- Fore.BLUE + Style.BRIGHT,
411
- Style.RESET_ALL,
412
- Fore.GREEN + Style.BRIGHT,
413
- elapsed,
414
- Style.RESET_ALL,
415
- )
416
-
417
- finished_bar = tqdm(
418
- total=len(file_list),
419
- initial=len(file_list),
420
- bar_format=finished_bar_message,
421
- colour="GREEN",
422
- ascii=progress_char,
423
- leave=True,
424
- )
425
- finished_bar.close()
426
- else:
427
- for future in as_completed(futures):
428
- file_errors.append(future.result())
429
-
430
- if temp_file and (config.reformat or config.check):
431
- # if using stdin, only give back formatted code.
432
- echo(Path(temp_file.name).read_text(encoding="utf8").rstrip().encode("utf8"))
433
-
434
- if temp_file:
435
- temp_file.close()
436
- os.unlink(temp_file.name)
437
-
438
- if bool(print_output(config, file_errors, len(file_list))) and config.warn is False:
439
- sys.exit(1)
440
-
441
-
442
- def process(config: Config, this_file: Path) -> Dict:
443
- """Run linter or formatter."""
444
- output = {}
445
- if config.reformat or config.check:
446
- output["format_message"] = reformat_file(config, this_file)
447
-
448
- if config.lint:
449
- output["lint_message"] = lint_file(config, this_file)
450
-
451
- return output
@@ -1,4 +0,0 @@
1
- """Djlint access through python -m djlint."""
2
- from djlint import main
3
-
4
- main()
@@ -1 +0,0 @@
1
- # flake8:noqa