djlint 1.29.0 → 1.30.0

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/.coveragerc +9 -0
  2. package/.editorconfig +21 -0
  3. package/.flake8 +0 -0
  4. package/.github/FUNDING.yml +2 -0
  5. package/.github/ISSUE_TEMPLATE/config.yml +6 -0
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  7. package/.github/ISSUE_TEMPLATE/formatter_but_report.md +30 -0
  8. package/.github/ISSUE_TEMPLATE/linter_bug_report.md +34 -0
  9. package/.github/ISSUE_TEMPLATE/translation.md +14 -0
  10. package/.github/config.yml +4 -0
  11. package/.github/pull_request_template.md +10 -0
  12. package/.github/workflows/cancel.yml +17 -0
  13. package/.github/workflows/demo.yml +98 -0
  14. package/.github/workflows/issues.yml +23 -0
  15. package/.github/workflows/linkcheck.yaml +21 -0
  16. package/.github/workflows/lint.yml +25 -0
  17. package/.github/workflows/release.yml +57 -0
  18. package/.github/workflows/test.yml +85 -0
  19. package/.pre-commit-config.yaml +45 -0
  20. package/.pre-commit-hooks.yaml +71 -0
  21. package/.prettierignore +7 -0
  22. package/.prettierrc +11 -0
  23. package/.releaserc +16 -0
  24. package/CHANGELOG.md +13 -0
  25. package/MANIFEST.in +2 -0
  26. package/build_demo.sh +17 -0
  27. package/docs/.eleventy.js +425 -0
  28. package/docs/.eleventyignore +2 -0
  29. package/docs/.prettierignore +3 -0
  30. package/docs/.prettierrc +11 -0
  31. package/docs/package.json +73 -0
  32. package/docs/readme.md +17 -0
  33. package/docs/src/_data/configuration.json +646 -0
  34. package/docs/src/_data/eleventyComputed.js +22 -0
  35. package/docs/src/_data/i18n/index.js +159 -0
  36. package/docs/src/_data/js.js +7 -0
  37. package/docs/src/_data/locales.js +17 -0
  38. package/docs/src/_data/site.json +8 -0
  39. package/docs/src/_includes/demo.njk +157 -0
  40. package/docs/src/_includes/docs_layout.njk +34 -0
  41. package/docs/src/_includes/foot.njk +26 -0
  42. package/docs/src/_includes/index.njk +187 -0
  43. package/docs/src/_includes/languages_layout.njk +11 -0
  44. package/docs/src/_includes/layout.njk +111 -0
  45. package/docs/src/_includes/nav.njk +85 -0
  46. package/docs/src/_utils/minify-html.js +14 -0
  47. package/docs/src/_utils/rollupper.js +91 -0
  48. package/docs/src/_utils/scripts.11ty.js +27 -0
  49. package/docs/src/demo.njk +4 -0
  50. package/docs/src/docs/best-practices.md +78 -0
  51. package/docs/src/docs/changelog.md +452 -0
  52. package/docs/src/docs/configuration.md +145 -0
  53. package/docs/src/docs/docs.json +4 -0
  54. package/docs/src/docs/formatter.md +82 -0
  55. package/docs/src/docs/getting-started.md +126 -0
  56. package/docs/src/docs/ignoring-code.md +75 -0
  57. package/docs/src/docs/integrations.md +120 -0
  58. package/docs/src/docs/languages/angular.md +31 -0
  59. package/docs/src/docs/languages/django.md +40 -0
  60. package/docs/src/docs/languages/golang.md +31 -0
  61. package/docs/src/docs/languages/handlebars.md +31 -0
  62. package/docs/src/docs/languages/jinja.md +39 -0
  63. package/docs/src/docs/languages/languages.json +3 -0
  64. package/docs/src/docs/languages/mustache.md +31 -0
  65. package/docs/src/docs/languages/nunjucks.md +39 -0
  66. package/docs/src/docs/languages/twig.md +41 -0
  67. package/docs/src/docs/linter.md +199 -0
  68. package/docs/src/fr/demo.njk +4 -0
  69. package/docs/src/fr/docs/best-practices.md +78 -0
  70. package/docs/src/fr/docs/changelog.md +452 -0
  71. package/docs/src/fr/docs/configuration.md +144 -0
  72. package/docs/src/fr/docs/docs.json +3 -0
  73. package/docs/src/fr/docs/formatter.md +83 -0
  74. package/docs/src/fr/docs/getting-started.md +127 -0
  75. package/docs/src/fr/docs/ignoring-code.md +75 -0
  76. package/docs/src/fr/docs/integrations.md +100 -0
  77. package/docs/src/fr/docs/languages/angular.md +31 -0
  78. package/docs/src/fr/docs/languages/django.md +31 -0
  79. package/docs/src/fr/docs/languages/golang.md +31 -0
  80. package/docs/src/fr/docs/languages/handlebars.md +31 -0
  81. package/docs/src/fr/docs/languages/jinja.md +31 -0
  82. package/docs/src/fr/docs/languages/languages.json +3 -0
  83. package/docs/src/fr/docs/languages/mustache.md +31 -0
  84. package/docs/src/fr/docs/languages/nunjucks.md +31 -0
  85. package/docs/src/fr/docs/languages/twig.md +31 -0
  86. package/docs/src/fr/docs/linter.md +207 -0
  87. package/docs/src/fr/fr.json +4 -0
  88. package/docs/src/fr/index.njk +4 -0
  89. package/docs/src/index.njk +4 -0
  90. package/docs/src/lib/generate-content-hash.js +13 -0
  91. package/docs/src/robots.txt +4 -0
  92. package/docs/src/ru/demo.njk +4 -0
  93. package/docs/src/ru/docs/best-practices.md +78 -0
  94. package/docs/src/ru/docs/changelog.md +453 -0
  95. package/docs/src/ru/docs/configuration.md +142 -0
  96. package/docs/src/ru/docs/docs.json +3 -0
  97. package/docs/src/ru/docs/formatter.md +82 -0
  98. package/docs/src/ru/docs/getting-started.md +127 -0
  99. package/docs/src/ru/docs/ignoring-code.md +75 -0
  100. package/docs/src/ru/docs/integrations.md +100 -0
  101. package/docs/src/ru/docs/languages/angular.md +31 -0
  102. package/docs/src/ru/docs/languages/django.md +31 -0
  103. package/docs/src/ru/docs/languages/golang.md +31 -0
  104. package/docs/src/ru/docs/languages/handlebars.md +31 -0
  105. package/docs/src/ru/docs/languages/jinja.md +31 -0
  106. package/docs/src/ru/docs/languages/languages.json +3 -0
  107. package/docs/src/ru/docs/languages/mustache.md +31 -0
  108. package/docs/src/ru/docs/languages/nunjucks.md +31 -0
  109. package/docs/src/ru/docs/languages/twig.md +31 -0
  110. package/docs/src/ru/docs/linter.md +126 -0
  111. package/docs/src/ru/index.njk +4 -0
  112. package/docs/src/ru/ru.json +4 -0
  113. package/docs/src/sitemap.njk +16 -0
  114. package/docs/src/static/css/site.scss +467 -0
  115. package/docs/src/static/font/fontawesome/stylesheet.scss +78 -0
  116. package/docs/src/static/img/apple-touch-icon.png +0 -0
  117. package/docs/src/static/img/demo-min.gif +0 -0
  118. package/docs/src/static/img/demo.gif +0 -0
  119. package/docs/src/static/img/demo.webm +0 -0
  120. package/docs/src/static/img/favicon-16x16.png +0 -0
  121. package/docs/src/static/img/favicon-32x32.png +0 -0
  122. package/docs/src/static/img/favicon.ico +0 -0
  123. package/docs/src/static/img/icon-square.indd +0 -0
  124. package/docs/src/static/img/icon-square.png +0 -0
  125. package/docs/src/static/img/icon.png +0 -0
  126. package/docs/src/static/img/logo-192x192.png +0 -0
  127. package/docs/src/static/img/logo-512x512.png +0 -0
  128. package/docs/src/static/img/logos/angular.png +0 -0
  129. package/docs/src/static/img/logos/django.png +0 -0
  130. package/docs/src/static/img/logos/golang.png +0 -0
  131. package/docs/src/static/img/logos/handlebars.png +0 -0
  132. package/docs/src/static/img/logos/jinja.png +0 -0
  133. package/docs/src/static/img/logos/mustache.png +0 -0
  134. package/docs/src/static/img/logos/nunjucks.png +0 -0
  135. package/docs/src/static/img/logos/twig.png +0 -0
  136. package/docs/src/static/img/old_demo.gif +0 -0
  137. package/docs/src/static/img/style.css +122 -0
  138. package/docs/src/static/js/animate.js +69 -0
  139. package/docs/src/static/js/editor.js +171 -0
  140. package/docs/src/static/js/hamburger.js +19 -0
  141. package/docs/src/static/js/modal.js +47 -0
  142. package/docs/src/static/js/worker.js +142 -0
  143. package/docs/src/static/py/EditorConfig-99-py3-none-any.whl +0 -0
  144. package/docs/src/static/py/PyYAML-99-py3-none-any.whl +0 -0
  145. package/docs/src/static/py/click-99-py3-none-any.whl +0 -0
  146. package/docs/src/static/py/colorama-99-py3-none-any.whl +0 -0
  147. package/docs/src/static/py/cssbeautifier-99-py3-none-any.whl +0 -0
  148. package/docs/src/static/py/djlint-99-py3-none-any.whl +0 -0
  149. package/docs/src/static/py/html_tag_names-99-py3-none-any.whl +0 -0
  150. package/docs/src/static/py/html_void_elements-99-py3-none-any.whl +0 -0
  151. package/docs/src/static/py/jsbeautifier-99-py3-none-any.whl +0 -0
  152. package/docs/src/static/py/json5-99-py3-none-any.whl +0 -0
  153. package/docs/src/static/py/pathspec-99-py3-none-any.whl +0 -0
  154. package/docs/src/static/py/regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +0 -0
  155. package/docs/src/static/py/six-1.16.0-py2.py3-none-any.whl +0 -0
  156. package/docs/src/static/py/tomli-2.0.1-py3-none-any.whl +0 -0
  157. package/docs/src/static/py/tqdm-4.65.0-py3-none-any.whl +0 -0
  158. package/icon.xcf +0 -0
  159. package/package.json +4 -33
  160. package/poetry.lock +835 -0
  161. package/pyproject.toml +100 -0
  162. package/renovate.json +44 -0
  163. package/scripts/updateVersion.js +16 -0
  164. package/src/djlint/__init__.py +451 -0
  165. package/src/djlint/__main__.py +4 -0
  166. package/src/djlint/formatter/__init__.py +1 -0
  167. package/src/djlint/formatter/attributes.py +212 -0
  168. package/src/djlint/formatter/compress.py +64 -0
  169. package/src/djlint/formatter/condense.py +221 -0
  170. package/src/djlint/formatter/css.py +60 -0
  171. package/src/djlint/formatter/expand.py +111 -0
  172. package/src/djlint/formatter/indent.py +418 -0
  173. package/src/djlint/formatter/js.py +58 -0
  174. package/src/djlint/helpers.py +321 -0
  175. package/src/djlint/lint.py +128 -0
  176. package/src/djlint/output.py +220 -0
  177. package/src/djlint/reformat.py +63 -0
  178. package/src/djlint/rules/H025.py +65 -0
  179. package/src/djlint/rules.yaml +279 -0
  180. package/src/djlint/settings.py +969 -0
  181. package/src/djlint/src.py +91 -0
  182. package/tests/__init__.py +0 -0
  183. package/tests/conftest.py +239 -0
  184. package/tests/test_cli.py +71 -0
  185. package/tests/test_config/__init__.py +0 -0
  186. package/tests/test_config/test_blank_line_after_tag.py +135 -0
  187. package/tests/test_config/test_blank_line_before_tag.py +141 -0
  188. package/tests/test_config/test_close_void_tags.py +31 -0
  189. package/tests/test_config/test_custom_blocks.py +56 -0
  190. package/tests/test_config/test_custom_html.py +45 -0
  191. package/tests/test_config/test_djlintrc/.djlintrc +38 -0
  192. package/tests/test_config/test_djlintrc/__init__.py +0 -0
  193. package/tests/test_config/test_djlintrc/test_config.py +44 -0
  194. package/tests/test_config/test_djlintrc_custom/.djlint-cust +38 -0
  195. package/tests/test_config/test_djlintrc_custom/.djlintrc +2 -0
  196. package/tests/test_config/test_djlintrc_custom/__init__.py +0 -0
  197. package/tests/test_config/test_djlintrc_custom/test_config.py +48 -0
  198. package/tests/test_config/test_excludes/__init__.py +0 -0
  199. package/tests/test_config/test_excludes/excluded.html +1 -0
  200. package/tests/test_config/test_excludes/foo/excluded.html +1 -0
  201. package/tests/test_config/test_excludes/html.html +1 -0
  202. package/tests/test_config/test_excludes/pyproject.toml +3 -0
  203. package/tests/test_config/test_excludes/test_config.py +30 -0
  204. package/tests/test_config/test_extension/__init__.py +0 -0
  205. package/tests/test_config/test_extension/html.test +1 -0
  206. package/tests/test_config/test_extension/pyproject.toml +3 -0
  207. package/tests/test_config/test_extension/test_config.py +27 -0
  208. package/tests/test_config/test_files/.djlintrc_global +9 -0
  209. package/tests/test_config/test_files/test.html +3 -0
  210. package/tests/test_config/test_files/test_config.py +123 -0
  211. package/tests/test_config/test_files/test_two.html +1 -0
  212. package/tests/test_config/test_format_attribute_template_tags.py +280 -0
  213. package/tests/test_config/test_format_css.py +197 -0
  214. package/tests/test_config/test_format_js.py +220 -0
  215. package/tests/test_config/test_gitignore/__init__.py +0 -0
  216. package/tests/test_config/test_gitignore/html_one.html +1 -0
  217. package/tests/test_config/test_gitignore/html_two.html +1 -0
  218. package/tests/test_config/test_gitignore/test_config.py +142 -0
  219. package/tests/test_config/test_ignore/__init__.py +0 -0
  220. package/tests/test_config/test_ignore/html.html +1 -0
  221. package/tests/test_config/test_ignore/html_two.html +12 -0
  222. package/tests/test_config/test_ignore/pyproject.toml +3 -0
  223. package/tests/test_config/test_ignore/test_config.py +32 -0
  224. package/tests/test_config/test_ignore_blocks.py +45 -0
  225. package/tests/test_config/test_ignore_case.py +39 -0
  226. package/tests/test_config/test_indent.py +63 -0
  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 +1 -0
  229. package/tests/test_config/test_linter_output_format/html-two.html +1 -0
  230. package/tests/test_config/test_linter_output_format/pyproject.toml +3 -0
  231. package/tests/test_config/test_linter_output_format/test_config.py +34 -0
  232. package/tests/test_config/test_max_attribute_length.py +100 -0
  233. package/tests/test_config/test_max_line_length.py +94 -0
  234. package/tests/test_config/test_per_file_ignores/__init__.py +0 -0
  235. package/tests/test_config/test_per_file_ignores/html.html +2 -0
  236. package/tests/test_config/test_per_file_ignores/pyproject.toml +2 -0
  237. package/tests/test_config/test_per_file_ignores/test_config.py +25 -0
  238. package/tests/test_config/test_pragmas/__init__.py +0 -0
  239. package/tests/test_config/test_pragmas/html_five.html +2 -0
  240. package/tests/test_config/test_pragmas/html_four.html +5 -0
  241. package/tests/test_config/test_pragmas/html_one.html +1 -0
  242. package/tests/test_config/test_pragmas/html_six.html +2 -0
  243. package/tests/test_config/test_pragmas/html_three.html +4 -0
  244. package/tests/test_config/test_pragmas/html_two.html +2 -0
  245. package/tests/test_config/test_pragmas/pyproject.toml +3 -0
  246. package/tests/test_config/test_pragmas/test_config.py +142 -0
  247. package/tests/test_config/test_preserve_blank_lines.py +109 -0
  248. package/tests/test_config/test_preserve_leading_space.py +159 -0
  249. package/tests/test_config/test_profile/__init__.py +0 -0
  250. package/tests/test_config/test_profile/html.html +2 -0
  251. package/tests/test_config/test_profile/pyproject.toml +3 -0
  252. package/tests/test_config/test_profile/test_config.py +64 -0
  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 +36 -0
  256. package/tests/test_config/test_pyproject/test_config.py +44 -0
  257. package/tests/test_django/__init__.py +0 -0
  258. package/tests/test_django/test_asset.py +32 -0
  259. package/tests/test_django/test_autoescape.py +25 -0
  260. package/tests/test_django/test_block.py +29 -0
  261. package/tests/test_django/test_blocktrans.py +236 -0
  262. package/tests/test_django/test_blocktrans_trimmed.py +283 -0
  263. package/tests/test_django/test_comments.py +164 -0
  264. package/tests/test_django/test_filter.py +30 -0
  265. package/tests/test_django/test_for.py +34 -0
  266. package/tests/test_django/test_if.py +34 -0
  267. package/tests/test_django/test_ifchanged.py +37 -0
  268. package/tests/test_django/test_include.py +24 -0
  269. package/tests/test_django/test_load.py +24 -0
  270. package/tests/test_django/test_quoted.py +34 -0
  271. package/tests/test_django/test_spaceless.py +30 -0
  272. package/tests/test_django/test_tag_spaces.py +35 -0
  273. package/tests/test_django/test_templatetag.py +40 -0
  274. package/tests/test_django/test_verbatim.py +24 -0
  275. package/tests/test_django/test_with.py +32 -0
  276. package/tests/test_djlint/-.html +1 -0
  277. package/tests/test_djlint/__init__.py +0 -0
  278. package/tests/test_djlint/bad.html +6 -0
  279. package/tests/test_djlint/bad.html.dj +23 -0
  280. package/tests/test_djlint/bad.html.dj2 +2 -0
  281. package/tests/test_djlint/multiple_files/a/a.html +1 -0
  282. package/tests/test_djlint/multiple_files/b/b1.html +1 -0
  283. package/tests/test_djlint/multiple_files/b/b2.html +1 -0
  284. package/tests/test_djlint/test_djlint.py +242 -0
  285. package/tests/test_golang/__init__.py +0 -0
  286. package/tests/test_golang/test_if.py +24 -0
  287. package/tests/test_golang/test_range.py +24 -0
  288. package/tests/test_handlebars/__init__.py +0 -0
  289. package/tests/test_handlebars/test_each.py +34 -0
  290. package/tests/test_handlebars/test_else.py +24 -0
  291. package/tests/test_handlebars/test_with.py +24 -0
  292. package/tests/test_html/__init__.py +0 -0
  293. package/tests/test_html/test_alpinejs.py +65 -0
  294. package/tests/test_html/test_attributes.py +935 -0
  295. package/tests/test_html/test_aurelia.py +24 -0
  296. package/tests/test_html/test_basics.py +905 -0
  297. package/tests/test_html/test_bracket_same_line.py +177 -0
  298. package/tests/test_html/test_case.py +81 -0
  299. package/tests/test_html/test_cdata.py +34 -0
  300. package/tests/test_html/test_comments.py +333 -0
  301. package/tests/test_html/test_css.py +193 -0
  302. package/tests/test_html/test_doctype_declarations.py +202 -0
  303. package/tests/test_html/test_ignored.py +193 -0
  304. package/tests/test_html/test_interpolation.py +56 -0
  305. package/tests/test_html/test_line_break_after_multiline_tag.py +95 -0
  306. package/tests/test_html/test_next_line_empty.py +53 -0
  307. package/tests/test_html/test_selfclosing.py +55 -0
  308. package/tests/test_html/test_single_attribute_per_line.py +87 -0
  309. package/tests/test_html/test_srcset.py +43 -0
  310. package/tests/test_html/test_svg.py +104 -0
  311. package/tests/test_html/test_symbol_entities.py +34 -0
  312. package/tests/test_html/test_tag_code.py +24 -0
  313. package/tests/test_html/test_tag_dd.py +24 -0
  314. package/tests/test_html/test_tag_details_summary.py +24 -0
  315. package/tests/test_html/test_tag_dt.py +24 -0
  316. package/tests/test_html/test_tag_fig_caption.py +29 -0
  317. package/tests/test_html/test_tag_hr.py +29 -0
  318. package/tests/test_html/test_tag_picture.py +32 -0
  319. package/tests/test_html/test_tag_pre.py +45 -0
  320. package/tests/test_html/test_tag_script.py +516 -0
  321. package/tests/test_html/test_tag_small.py +24 -0
  322. package/tests/test_html/test_tag_span.py +119 -0
  323. package/tests/test_html/test_tag_textarea.py +82 -0
  324. package/tests/test_html/test_tags.py +842 -0
  325. package/tests/test_html/test_text.py +34 -0
  326. package/tests/test_html/test_whitespace.py +477 -0
  327. package/tests/test_html/test_yaml.py +156 -0
  328. package/tests/test_jinja/__init__.py +0 -0
  329. package/tests/test_jinja/test_call.py +34 -0
  330. package/tests/test_jinja/test_parenthesis.py +24 -0
  331. package/tests/test_linter/__init__.py +0 -0
  332. package/tests/test_linter/test_custom_rules/.djlint_rules.yaml +6 -0
  333. package/tests/test_linter/test_custom_rules/__init__.py +0 -0
  334. package/tests/test_linter/test_custom_rules/html.html +1 -0
  335. package/tests/test_linter/test_custom_rules/pyproject.toml +1 -0
  336. package/tests/test_linter/test_custom_rules/test_linter.py +29 -0
  337. package/tests/test_linter/test_custom_rules_bad/.djlint_rules.yaml +24 -0
  338. package/tests/test_linter/test_custom_rules_bad/__init__.py +0 -0
  339. package/tests/test_linter/test_custom_rules_bad/html.html +1 -0
  340. package/tests/test_linter/test_custom_rules_bad/pyproject.toml +1 -0
  341. package/tests/test_linter/test_custom_rules_bad/test_linter.py +29 -0
  342. package/tests/test_linter/test_django_linter.py +476 -0
  343. package/tests/test_linter/test_h005.py +45 -0
  344. package/tests/test_linter/test_h006.py +81 -0
  345. package/tests/test_linter/test_h007.py +45 -0
  346. package/tests/test_linter/test_h008.py +60 -0
  347. package/tests/test_linter/test_h009.py +45 -0
  348. package/tests/test_linter/test_h010.py +44 -0
  349. package/tests/test_linter/test_h037.py +150 -0
  350. package/tests/test_linter/test_ignore_rules.py +45 -0
  351. package/tests/test_linter/test_jinja_linter.py +227 -0
  352. package/tests/test_linter/test_linter.py +691 -0
  353. package/tests/test_linter/test_nunjucks_linter.py +59 -0
  354. package/tests/test_linter/test_python_module_rules/.djlint_rules.yaml +4 -0
  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 +3 -0
  357. package/tests/test_linter/test_python_module_rules/html_ok.html +3 -0
  358. package/tests/test_linter/test_python_module_rules/my_module.py +32 -0
  359. package/tests/test_linter/test_python_module_rules/pyproject.toml +1 -0
  360. package/tests/test_linter/test_python_module_rules/test_linter.py +26 -0
  361. package/tests/test_nunjucks/__init__.py +0 -0
  362. package/tests/test_nunjucks/test_functions.py +94 -0
  363. package/tests/test_nunjucks/test_macros.py +41 -0
  364. package/tests/test_nunjucks/test_set.py +206 -0
  365. package/tests/test_nunjucks/test_spaceless.py +24 -0
  366. package/tests/test_twig/__init__.py +0 -0
  367. package/tests/test_twig/test_comments.py +51 -0
  368. package/tox.ini +48 -0
package/.coveragerc ADDED
@@ -0,0 +1,9 @@
1
+ [run]
2
+ source = src/djlint
3
+ branch = True
4
+
5
+ [report]
6
+ show_missing = True
7
+ skip_covered = True
8
+ omit =
9
+ */test*
package/.editorconfig ADDED
@@ -0,0 +1,21 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 4
6
+ end_of_line = lf
7
+ insert_final_newline = true
8
+ trim_trailing_whitespace = true
9
+ charset = utf-8
10
+
11
+ [*.njk]
12
+ indent_size = 2
13
+
14
+ [*.js]
15
+ indent_size = 2
16
+
17
+ [*.yml]
18
+ indent_size = 2
19
+
20
+ [*.yaml]
21
+ indent_size = 2
package/.flake8 ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ github: christopherpickering
2
+ custom: https://venmo.com/code?user_id=3118520086822912596&created=1655827155
@@ -0,0 +1,6 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Discord Server
4
+ url: https://discord.gg/taghAqebzU
5
+ about: |
6
+ Chat with the community, ask questions and learn about best practices.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: "\U0001F682 Feature Request"
3
+ about: Do you have an idea for a new feature or improvement?
4
+ title: '[FEATURE]'
5
+ labels: enhancement
6
+ ---
7
+
8
+ <!--
9
+ Thanks for wanting to make djLint better.
10
+
11
+ Have you...
12
+ -->
13
+
14
+ - [ ] I've searched the [issues](https://github.com/Riverside-Healthcare/djLint/issues)
15
+ - [ ] I've read the [docs](https://djlint.com)
16
+
17
+ ## Feature Request
18
+
19
+ <!-- Thanks! 🤠 -->
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: "\U0001F9A0 Formatter Bug Report"
3
+ about: You've found a bug?
4
+ title: "[BUG] [Formatter]"
5
+ labels: [":microbe: bug", ":sponge: formatter"]
6
+ ---
7
+
8
+ <!--
9
+ Thanks for finding and submitting an issue.
10
+
11
+ Have you...
12
+ -->
13
+
14
+ - [ ] I'm on the [latest version](https://pypi.org/project/djlint/) of djLint
15
+ - [ ] I've searched the [issues](https://github.com/Riverside-Healthcare/djLint/issues)
16
+ - [ ] I've read the [docs](https://djlint.com)
17
+
18
+ ## System Info
19
+ - OS: e.g. ubuntu 20.04
20
+ - Python Version (``python --version``)
21
+ - djLint Version (``djlint --version``)
22
+ - template language: e.g. mustache
23
+
24
+ ## Issue
25
+ <!-- A clear and concise description of what the bug is. -->
26
+
27
+ ## How To Reproduce
28
+ <!-- Steps to reproduce the behavior -->
29
+
30
+ <!-- Thanks! 🤠 -->
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: "\U0001F9A0 Linter Bug Report"
3
+ about: You've found a bug?
4
+ title: "[BUG] [Linter]"
5
+ labels: [":microbe: bug", ":mag: linter"]
6
+ ---
7
+
8
+ <!--
9
+ Thanks for finding and submitting an issue.
10
+
11
+ Have you...
12
+ -->
13
+
14
+ - [ ] I'm on the [latest version](https://pypi.org/project/djlint/) of djLint
15
+ - [ ] I've searched the [issues](https://github.com/Riverside-Healthcare/djLint/issues)
16
+ - [ ] I've read the [docs](https://djlint.com)
17
+
18
+ ## System Info
19
+ - OS: e.g. ubuntu 20.04
20
+ - Python Version (``python --version``)
21
+ - djLint Version (``djlint --version``)
22
+ - template language: e.g. mustache
23
+
24
+
25
+ ## Issue
26
+ <!-- A clear and concise description of what the bug is. -->
27
+
28
+ ## How To Reproduce
29
+ <!-- Steps to reproduce the behavior -->
30
+
31
+ ## Contents of .djlintrc/pyproject.toml [tool.djlint]
32
+ <!-- please include your config -->
33
+
34
+ <!-- Thanks! 🤠 -->
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: "\U0001F310 Translation Issue"
3
+ about: You've found a translation issue?
4
+ title: "[Translation]"
5
+ labels: ":globe_with_meridians: translation"
6
+ ---
7
+
8
+ <!--
9
+ Thanks for finding and submitting an issue.
10
+
11
+ Use this to request a translation or fix an existing translation.
12
+
13
+ If you are familiar with the language, please submit a PR 🙏
14
+ -->
@@ -0,0 +1,4 @@
1
+ newIssueWelcomeComment: >
2
+ Thanks for opening your first issue here!
3
+
4
+ ![](https://media.tenor.com/Bv5ZxP2J8W4AAAAd/snoop-dogg-yep.gif)
@@ -0,0 +1,10 @@
1
+
2
+
3
+ # Pull Request Check List
4
+
5
+ Resolves: #issue-number-here
6
+
7
+ - [ ] Added **tests** for changed code.
8
+ - [ ] Updated **documentation** for changed code.
9
+
10
+ <!-- If you have *any* questions to *any* of the points above, just **submit and ask**! This checklist is here to *help* you, not to deter you from contributing! -->
@@ -0,0 +1,17 @@
1
+ # This action finds in-progress Action jobs for the same branch, and cancels
2
+ # them. There's little point in continuing to run superseded jobs.
3
+
4
+ name: cancel
5
+
6
+ on:
7
+ push:
8
+
9
+ jobs:
10
+ cancel:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Cancel Previous Runs
14
+ uses: styfle/cancel-workflow-action@0.11.0
15
+ with:
16
+ access_token: ${{ github.token }}
17
+ workflow_id: test.yml
@@ -0,0 +1,98 @@
1
+ name: demo
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [master]
7
+
8
+ jobs:
9
+ demo:
10
+ strategy:
11
+ matrix:
12
+ tool: [django, wagtail, pallets, apostrophe, bolt, sylius]
13
+ include:
14
+ - tool: django
15
+ repo: https://github.com/django/django
16
+ profile: django
17
+ args: --indent 2
18
+ - tool: wagtail
19
+ repo: https://github.com/wagtail/wagtail
20
+ profile: django
21
+ args: --indent 4
22
+ - tool: pallets
23
+ repo: https://github.com/pallets/website
24
+ profile: jinja
25
+ args: --indent 2
26
+ - tool: apostrophe
27
+ repo: https://github.com/apostrophecms/apostrophe
28
+ profile: nunjucks
29
+ args: --indent 2
30
+ - tool: bolt
31
+ repo: https://github.com/bolt/core
32
+ profile: nunjucks
33
+ args: --indent 4
34
+ - tool: sylius
35
+ repo: https://github.com/Sylius/Sylius
36
+ profile: nunjucks
37
+ args: --indent 2
38
+ name: format
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - name: checkout
42
+ uses: actions/checkout@v3
43
+
44
+ - name: setup python 3.11
45
+ uses: actions/setup-python@v4
46
+ with:
47
+ python-version: '3.11'
48
+
49
+ - name: Setup Poetry
50
+ uses: snok/install-poetry@v1
51
+
52
+ - name: install
53
+ run: |
54
+ poetry install
55
+
56
+ - name: get source
57
+ run: |
58
+ mkdir "${{ matrix.tool }}_raw"; mkdir "${{ matrix.tool }}_source"
59
+ cd "${{ matrix.tool }}_raw"; git clone --depth 1 "${{ matrix.repo }}" .; cd ..
60
+ find "${{ matrix.tool }}_raw" -iname '*.html*' -exec mv '{}' "${{ matrix.tool }}_source/" \;
61
+
62
+ - name: publish source
63
+ uses: peaceiris/actions-gh-pages@v3
64
+ with:
65
+ github_token: ${{ secrets.GITHUB_TOKEN }}
66
+ publish_dir: ./${{ matrix.tool }}_source
67
+ publish_branch: ${{ matrix.tool }}-source
68
+ enable_jekyll: true
69
+ force_orphan: true
70
+
71
+ - name: cleanup source
72
+ run: rm -r "${{ matrix.tool }}_source"; rm -r "${{ matrix.tool }}_raw"
73
+
74
+ - uses: actions/checkout@v3
75
+ with:
76
+ path: ${{ matrix.tool }}-source
77
+ ref: ${{ matrix.tool }}-source
78
+
79
+ - name: setup branch
80
+ run: |
81
+ cd "${{ matrix.tool }}-source"
82
+ git config user.name "$(git log -n 1 --pretty=format:%an)"
83
+ git config user.email "$(git log -n 1 --pretty=format:%ae)"
84
+ git branch --unset-upstream
85
+ git push --force origin "${{ matrix.tool }}-source":"${{ matrix.tool }}-djlint"
86
+
87
+ - name: format
88
+ run: |
89
+ cd src
90
+ poetry run python -m djlint "../${{ matrix.tool }}-source" --profile=${{ matrix.profile }} --reformat --warn --quiet ${{ matrix.args }}
91
+
92
+ - name: publish foramtted
93
+ run: |
94
+ cd "${{ matrix.tool }}-source"
95
+ export DJ_VERSION=$(poetry version --short)
96
+ git add .
97
+ git commit -m "formatted with djLint $DJ_VERSION"
98
+ git push origin "${{ matrix.tool }}-source":"${{ matrix.tool }}-djlint"
@@ -0,0 +1,23 @@
1
+ name: issue to project
2
+ on:
3
+ issues:
4
+ types: [labeled]
5
+ env:
6
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7
+ jobs:
8
+ assign_one_project:
9
+ runs-on: ubuntu-latest
10
+ name: Assign to One Project
11
+ steps:
12
+ - name: Assign issues and with `bug` label to bugs project
13
+ uses: srggrs/assign-one-project-github-action@1.3.1
14
+ if: contains(github.event.issue.labels.*.name, 'bug')
15
+ with:
16
+ project: https://github.com/Riverside-Healthcare/djLint/projects/1
17
+ column_name: Needs triage
18
+ - name: Assign issues and with `enhancement` label to enhancement project
19
+ uses: srggrs/assign-one-project-github-action@1.3.1
20
+ if: contains(github.event.issue.labels.*.name, 'enhancement')
21
+ with:
22
+ project: https://github.com/Riverside-Healthcare/djLint/projects/2
23
+ column_name: Needs triage
@@ -0,0 +1,21 @@
1
+ name: Linkcheck
2
+ on: [push]
3
+ jobs:
4
+ linkcheck:
5
+ name: Linkcheck
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - uses: actions/checkout@v3
9
+ - uses: actions/setup-node@v3
10
+ with:
11
+ node-version: 18.x
12
+
13
+ - name: npm install, build
14
+ run: |
15
+ cd docs
16
+ npm install
17
+ npm run build
18
+
19
+ - uses: untitaker/hyperlink@0.1.27
20
+ with:
21
+ args: docs/_site/
@@ -0,0 +1,25 @@
1
+ name: lint
2
+ on: [push, pull_request]
3
+
4
+ jobs:
5
+ lint:
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - name: Checkout
9
+ uses: actions/checkout@v3
10
+
11
+ - name: setup python 3.11
12
+ uses: actions/setup-python@v4
13
+ with:
14
+ python-version: '3.11'
15
+
16
+ - name: Setup Poetry
17
+ uses: snok/install-poetry@v1
18
+
19
+ - name: Install
20
+ run: |
21
+ poetry install
22
+
23
+ - name: run lint
24
+ run: |
25
+ poetry run tox -e lint
@@ -0,0 +1,57 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Release
10
+
11
+ on:
12
+ push:
13
+ branches: [master]
14
+
15
+ jobs:
16
+ release:
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v3
22
+ with:
23
+ fetch-depth: 0
24
+ persist-credentials: false
25
+
26
+ - name: Setup Poetry
27
+ uses: snok/install-poetry@v1
28
+
29
+ - name: ⎔ Setup node
30
+ uses: actions/setup-node@v3
31
+ with:
32
+ node-version: 18
33
+
34
+ - name: 📥 Download deps
35
+ uses: bahmutov/npm-install@v1
36
+ with:
37
+ useLockFile: false
38
+
39
+ - name: Semantic Release
40
+ uses: cycjimmy/semantic-release-action@v3
41
+
42
+ id: semantic
43
+ with:
44
+ semantic_version: 18
45
+ extra_plugins: |
46
+ @semantic-release/changelog@6
47
+ @semantic-release/exec
48
+ @semantic-release/git@10
49
+ env:
50
+ GITHUB_TOKEN: ${{ secrets.RELEASE_PAT }}
51
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
52
+
53
+ - name: Build and publish package
54
+ if: steps.semantic.outputs.new_release_published == 'true'
55
+ uses: JRubics/poetry-publish@v1.17
56
+ with:
57
+ pypi_token: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,85 @@
1
+ name: test
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ pull_request:
7
+ branches:
8
+ - master
9
+ - dev
10
+
11
+ jobs:
12
+ test:
13
+ name: python ${{ matrix.python-version }} on ${{ matrix.os }}
14
+ runs-on: ${{ matrix.os }}
15
+
16
+ strategy:
17
+ matrix:
18
+ os: [ubuntu-latest, macos-latest, windows-latest]
19
+ python-version: ['3.8', '3.9', '3.10', '3.11']
20
+ fail-fast: true
21
+
22
+ steps:
23
+ - name: checkout
24
+ uses: actions/checkout@v3
25
+ - name: setup python ${{ matrix.python-version }} on ${{ matrix.os }}
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: ${{ matrix.python-version }}
29
+ - name: setup poetry
30
+ uses: abatilo/actions-poetry@v2
31
+ with:
32
+ poetry-version: 1.2.2
33
+ - name: install deps
34
+ run: poetry install
35
+ - name: test
36
+ run: poetry run tox -e test
37
+ - name: upload cov
38
+ uses: codecov/codecov-action@v3
39
+ continue-on-error: true
40
+ with:
41
+ files: ./coverage.xml
42
+ fail_ci_if_error: true
43
+ verbose: true
44
+
45
+ test_npm:
46
+ name: node ${{ matrix.node }} with python ${{ matrix.python-version }} on ${{ matrix.os }}
47
+ runs-on: ${{ matrix.os }}
48
+
49
+ strategy:
50
+ # remove macos, can't get xcode working yet for installing regex
51
+ # remove windows-latest, half tests seem to randomly pass
52
+ matrix:
53
+ os: [ubuntu-latest, windows-latest]
54
+ python-version: ['3.8', '3.9', '3.10', '3.11']
55
+ node: [18, 19]
56
+ fail-fast: true
57
+
58
+ steps:
59
+ - name: install xcode
60
+ if: ${{ matrix.os == 'macos-latest' }}
61
+ uses: maxim-lobanov/setup-xcode@v1
62
+ with:
63
+ xcode-version: latest-stable
64
+ - name: install xcode cli tools
65
+ if: ${{ matrix.os == 'macos-latest' }}
66
+ run: sudo xcode-select --reset
67
+ - name: checkout
68
+ uses: actions/checkout@v3
69
+ - name: setup python ${{ matrix.python-version }} on ${{ matrix.os }}
70
+ uses: actions/setup-python@v4
71
+ with:
72
+ python-version: ${{ matrix.python-version }}
73
+ - name: setup node ${{ matrix.node }} on ${{ matrix.os }}
74
+ uses: actions/setup-node@v3
75
+ with:
76
+ node-version: ${{ matrix.node }}
77
+
78
+ - name: install project
79
+ run: npm --omit=dev install
80
+ - name: test run help
81
+ run: djlint -h
82
+ - name: test run lint
83
+ run: echo "<div>a</div>" | djlint -
84
+ - name: test run check
85
+ run: echo "<div>" | djlint - --check
@@ -0,0 +1,45 @@
1
+ exclude: >
2
+ (?x)(
3
+ docs/|
4
+ node_modules/
5
+ )
6
+ repos:
7
+ - repo: https://github.com/pre-commit/pre-commit-hooks
8
+ rev: v4.4.0
9
+ hooks:
10
+ - id: trailing-whitespace
11
+ - id: end-of-file-fixer
12
+ - id: check-yaml
13
+ - repo: https://github.com/myint/autoflake
14
+ rev: v2.1.1
15
+ hooks:
16
+ - id: autoflake
17
+ exclude: &fixtures tests/functional/|tests/input|tests/extensions/data|tests/regrtest_data/|tests/data/
18
+ args:
19
+ - --in-place
20
+ - --remove-all-unused-imports
21
+ - --expand-star-imports
22
+ - --remove-duplicate-keys
23
+ - --remove-unused-variables
24
+ - repo: https://github.com/asottile/pyupgrade
25
+ rev: v3.4.0
26
+ hooks:
27
+ - id: pyupgrade
28
+ args: [--py36-plus]
29
+ - repo: https://github.com/PyCQA/isort
30
+ rev: 5.12.0
31
+ hooks:
32
+ - id: isort
33
+ exclude: docs*
34
+ additional_dependencies: [toml]
35
+ - repo: https://github.com/psf/black
36
+ rev: 23.3.0
37
+ hooks:
38
+ - id: black
39
+ - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
40
+ rev: v2.9.0
41
+ hooks:
42
+ - id: pretty-format-ini
43
+ args: [--autofix]
44
+ - id: pretty-format-yaml
45
+ args: [--autofix, --indent, '2']
@@ -0,0 +1,71 @@
1
+ - id: djlint
2
+ name: djLint linting
3
+ entry: djlint
4
+ types_or: [html]
5
+ language: python
6
+
7
+ - id: djlint-django
8
+ name: djLint linting for Django
9
+ entry: djlint --profile=django
10
+ types_or: [html]
11
+ language: python
12
+
13
+ - id: djlint-jinja
14
+ name: djLint linting for Jinja
15
+ entry: djlint --profile=jinja
16
+ types_or: [jinja]
17
+ language: python
18
+
19
+ - id: djlint-nunjucks
20
+ name: djLint linting for Nunjucks
21
+ entry: djlint --profile=nunjucks
22
+ types_or: [nunjucks]
23
+ language: python
24
+
25
+ - id: djlint-handlebars
26
+ name: djLint linting for Handlebars/Mustache
27
+ entry: djlint --profile=handlebars
28
+ types_or: [handlebars]
29
+ language: python
30
+
31
+ - id: djlint-golang
32
+ name: djLint linting for Golang templates
33
+ entry: djlint --profile=golang
34
+ types_or: [gotmpl]
35
+ language: python
36
+
37
+ - id: djlint-reformat
38
+ name: djLint formatting
39
+ entry: djlint --reformat
40
+ types_or: [html]
41
+ language: python
42
+
43
+ - id: djlint-reformat-django
44
+ name: djLint formatting for Django
45
+ entry: djlint --reformat --profile=django
46
+ types_or: [html]
47
+ language: python
48
+
49
+ - id: djlint-reformat-jinja
50
+ name: djLint formatting for Jinja
51
+ entry: djlint --reformat --profile=jinja
52
+ types_or: [jinja]
53
+ language: python
54
+
55
+ - id: djlint-reformat-nunjucks
56
+ name: djLint formatting for Nunjucks
57
+ entry: djlint --reformat --profile=nunjucks
58
+ types_or: [nunjucks]
59
+ language: python
60
+
61
+ - id: djlint-reformat-handlebars
62
+ name: djLint formatting for Handlebars/Mustache
63
+ entry: djlint --reformat --profile=handlebars
64
+ types_or: [handlebars]
65
+ language: python
66
+
67
+ - id: djlint-reformat-golang
68
+ name: djLint formatting for Golang templates
69
+ entry: djlint --reformat --profile=golang
70
+ types_or: [gotmpl]
71
+ language: python
@@ -0,0 +1,7 @@
1
+ node_modules/*
2
+ docs/_site/*
3
+ dist/*
4
+ .mypy_cache/*
5
+ .pytest_cache/*
6
+ .tox/*
7
+ tests/*
package/.prettierrc ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "printWidth": 80,
3
+ "tabWidth": 2,
4
+ "useTabs": false,
5
+ "singleQuote": true,
6
+ "trailingComma": "all",
7
+ "bracketSpacing": true,
8
+ "arrowParens": "always",
9
+ "jsxBracketSameLine": false,
10
+ "semi": true
11
+ }
package/.releaserc ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "branches": ["master"],
3
+ "plugins": [
4
+ "@semantic-release/commit-analyzer",
5
+ "@semantic-release/release-notes-generator",
6
+ "@semantic-release/changelog",
7
+ "@semantic-release/npm",
8
+ ["@semantic-release/exec", {
9
+ "prepareCmd" : "poetry version ${nextRelease.version}; ./build_demo.sh; node scripts/updateVersion.js ${nextRelease.version}"
10
+ }],
11
+ ["@semantic-release/git", {
12
+ "assets": ["package.json", "pyproject.toml", "docs"]
13
+ }],
14
+ "@semantic-release/github"
15
+ ]
16
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # [1.30.0](https://github.com/Riverside-Healthcare/djLint/compare/v1.29.0...v1.30.0) (2023-05-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **formatter:** fixed endset indent level ([cdebe42](https://github.com/Riverside-Healthcare/djLint/commit/cdebe421a9436d7dff9ead65584ad25c22d199f4)), closes [#670](https://github.com/Riverside-Healthcare/djLint/issues/670)
7
+ * **formatter:** fixed issue with spaceless macro tags having spacess added before - ([5593937](https://github.com/Riverside-Healthcare/djLint/commit/5593937f1ea626580bae6de2ef4bef3b74f92a14)), closes [#667](https://github.com/Riverside-Healthcare/djLint/issues/667)
8
+ * **npm:** install exact version of djlint ([0727279](https://github.com/Riverside-Healthcare/djLint/commit/072727997b61f3a3ffa1049dd313c36fb8186604))
9
+
10
+
11
+ ### Features
12
+
13
+ * **npm:** add script to update djlint version in postinstall using semantic-release/exec ([040ffc6](https://github.com/Riverside-Healthcare/djLint/commit/040ffc69f235af350c2afc233bacdab7e5002dad))
package/MANIFEST.in ADDED
@@ -0,0 +1,2 @@
1
+ include pyproject.toml
2
+ include src/djlint/rules.yaml