chore(deps): update dependency djlint to >=1.49.3 #729

Merged
tobru merged 1 commit from renovate/djlint-1.x into main 2026-11-03 11:54:52 +00:00
Member

This PR contains the following updates:

Package Change Age Confidence
djlint >=1.46.4 → >=1.49.3 age confidence

Release Notes

djlint/djLint (djlint)

v1.49.3

Compare Source

Bug fixes
  • A {% set %} written across lines indents the arguments of a function call inside it, as it already did for the items of a list or dict (#​2819). Its last line stays at the level of the value when it holds part of the value, the lines after the tag are no longer one level too shallow when a bracket opened inside it closes on its last line, a bracket inside a quoted string no longer changes the indentation, and a line that goes on with a string started on the line before is no longer indented, which put spaces into the string.

v1.49.2

Compare Source

Performance
  • Checking or linting a folder of many templates takes about half the time, most of all on Windows. A small run no longer starts worker processes, which cost more than they saved.
  • The language server answers in about a third of the time when the editor sends its settings with every request, as the VS Code extension does, and its memory no longer grows over a long session.
  • Every run starts a little faster, unless it uses --use-gitignore.
  • A line of many inline tags before a block tag, which a stray quote such as "="" can leave in a template, no longer takes minutes to format.
  • A very large template no longer formats disproportionately slower than a small one: a 1.1 MB template formats in a third of the time.

v1.49.1

Compare Source

Bug fixes
  • The language server no longer loses the settings of an editor that took over five seconds to answer, and updates the findings of open documents once the answer arrives.
  • The language server keeps its settings when the editor sends a change of settings meant for other servers.
  • The language server sees changes of settings in editors that report them only to servers that ask, and reads the settings again when a workspace folder is added or removed.
  • exclude applies in the language server as it does to djlint <folder>: a document in vendor/ of a folder with no pyproject.toml was not left out.
  • The language server picks up a change of the configuration, or of a file named by configuration or rules, when a document is opened or saved, also in editors that don't watch files, and updates every open document then.
  • The language server no longer stops on some malformed messages, and formats a document with old Mac line endings (CR only) without sending an edit past its end.
  • Linting a template with Windows line endings from stdin reports what the rules on blank lines find, as linting the file does.
  • A python_module rule that returns a code, match or message that isn't a string gets a clear error.

v1.49.0

Compare Source

Features
  • djlint --lsp runs a language server, for findings as you type and formatting in any editor that supports LSP. See Language server.
  • djlint.api.is_excluded() tells whether the configuration leaves out a file.
Bug fixes
  • With --stdin-filename, djLint formats the text it is given even if the configuration sets files. It formatted those files instead, so an editor formatting a template rewrote them and left the template as it was.
  • --stdin-filename honors exclude, extend-exclude and --use-gitignore: the text of an excluded file comes back unchanged, with no findings.

v1.48.1

Compare Source

Performance
  • A long run of $ before a tag no longer makes linting slow: a line of two hundred thousand of them went from 2.2 seconds to 0.15. Formatting such a line is still slow.

v1.48.0

Compare Source

Feature
  • Add djlint.api, a supported way to format and lint text from Python: load_config(), format_text() and lint_text(), which returns findings with numeric positions. See Python API.
  • A finding now knows where it ends. --linter-output-format takes {end}, SARIF reports endLine and endColumn, and GitHub annotations cover the whole finding. A custom rule's python_module can return end, and otherwise ends where its match does.
  • A custom rule's python_module is also looked for in the project root, after everything else on the path, so it works with the djlint command as well as with python -m djlint.
Changed
  • A python_module rule that returns a line that isn't a position now stops djLint with an error naming the rule, instead of a traceback from the report.
Fix
  • A tag whose attributes are spread over several lines, but that doesn't start its line, as in <li><a …> or Read the <a …>, is laid out from that line. The attributes line up under the first one, or with --single-attribute-per-line sit one indent in from the line with the closing > at the line's indent. They used to be indented as if the tag started the line, so they landed left of the tag, or a single space in after text.

v1.47.1

Compare Source

Fix
  • preserve-inline in the js setting brace_style takes effect, so { bubbles: true } stays on one line in a <script> or in an attribute formatted with --format-attribute-js-json. It used to be dropped before the code was formatted.
  • The json schema allows any option under css and js, so a strict validator such as Tombi no longer reports indent_size there.

v1.47.0

Compare Source

Feature
  • New option --sort-load-tags / sort_load_tags sorts the libraries in a {% load %} tag and drops the ones written twice, so {% load static i18n %} becomes {% load i18n static %}. In {% load a b from library %} the names before from are sorted. It is off by default: where two libraries define a tag or filter of the same name, the one loaded last wins, so sorting can change which one a template uses.
  • The formatter drops the spaces H012 reports around an attribute's =, so <div class = "a"> becomes <div class="a">.
Changed
  • H010 reports the names the formatter lowercases, in any mix of case, so Width="3" is now reported. A framework binding such as :itemID or @ID and a longer name such as data-ID no longer are, since the formatter leaves their case alone.
  • H018 is not reported under --close-void-tags, since the formatter then writes the /> ending the rule reports. --ignore-case already worked this way for H009 and H010.
Fix
  • H020 reports an empty pair whose end tag has whitespace before its >, such as <div></div\n>.
  • H026 reports a class or id holding only whitespace, such as class=" ", and one written with spaces around the =.
  • H033 reports an action padded at both ends once. It used to report it twice, unless an attribute before action happened to make the two reports look the same.
  • Markup written inside an attribute value, as in <p title="<img src='a'>">, is text, and H005, H008, H010, H012, D018, J018, H024, H026, H029 and H033 no longer report it. H046 and H051 read tabindex and role from the tag's own attributes, so tabindex=1 written in a value or in the page text is not reported either.
  • T001 and T027 read a tag holding a dict, such as {{ f({"a": {"b": 1}}) }}, up to the }} that closes it rather than the first }} inside it.
  • T032 steps over an escaped quote in a string, so the spaces in {{ x|default:"a \"b c\"" }} are not reported.
  • H015 reports a heading followed by a tag on the same line anywhere in the file. It used to look only at the last line.
  • The rules that read a tag's attributes step over a template tag written in it, including a handlebars {{{attrs}}} and a dict as in {{ {'class': 'x'}|xmlattr }}, so <img {{ attrs }} src='a'> is reported by H008, which used to stop reading at the {{.
  • T038 steps over a string in a block tag, so the {% in {% with a="{%" %} does not cut the tag short.
Performance
  • The rules that read a tag's attributes stop at a stray <, and H015, H030, H036, T001, T027, T038 and T039 no longer read the rest of the document again for each tag. A file holding thousands of unclosed tags or headings on one line is linted in a fraction of a second, where it used to take minutes.

v1.46.6

Compare Source

Packaging
  • Ship the license of the mypyc runtime, which the binary wheels include, in LICENSE-THIRD-PARTY.
  • Upload PEP 740 attestations to PyPI, so you can verify that the distributions were published from the GitHub Actions workflow of this repository.

v1.46.5

Compare Source

Packaging
  • Drop support for EoL Python 3.10.

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [djlint](https://github.com/djlint/djLint) | `>=1.46.4` → `>=1.49.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/djlint/1.49.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/djlint/1.46.4/1.49.3?slim=true) | --- ### Release Notes <details> <summary>djlint/djLint (djlint)</summary> ### [`v1.49.3`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1493---2026-11-02) [Compare Source](https://github.com/djlint/djLint/compare/v1.49.2...v1.49.3) ##### Bug fixes - A `{% set %}` written across lines indents the arguments of a function call inside it, as it already did for the items of a list or dict ([#&#8203;2819](https://github.com/djlint/djLint/issues/2819)). Its last line stays at the level of the value when it holds part of the value, the lines after the tag are no longer one level too shallow when a bracket opened inside it closes on its last line, a bracket inside a quoted string no longer changes the indentation, and a line that goes on with a string started on the line before is no longer indented, which put spaces into the string. ### [`v1.49.2`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1492---2026-11-01) [Compare Source](https://github.com/djlint/djLint/compare/v1.49.1...v1.49.2) ##### Performance - Checking or linting a folder of many templates takes about half the time, most of all on Windows. A small run no longer starts worker processes, which cost more than they saved. - The language server answers in about a third of the time when the editor sends its settings with every request, as the VS Code extension does, and its memory no longer grows over a long session. - Every run starts a little faster, unless it uses `--use-gitignore`. - A line of many inline tags before a block tag, which a stray quote such as `"=""` can leave in a template, no longer takes minutes to format. - A very large template no longer formats disproportionately slower than a small one: a 1.1 MB template formats in a third of the time. ### [`v1.49.1`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1491---2026-11-01) [Compare Source](https://github.com/djlint/djLint/compare/v1.49.0...v1.49.1) ##### Bug fixes - The language server no longer loses the settings of an editor that took over five seconds to answer, and updates the findings of open documents once the answer arrives. - The language server keeps its settings when the editor sends a change of settings meant for other servers. - The language server sees changes of settings in editors that report them only to servers that ask, and reads the settings again when a workspace folder is added or removed. - `exclude` applies in the language server as it does to `djlint <folder>`: a document in `vendor/` of a folder with no `pyproject.toml` was not left out. - The language server picks up a change of the configuration, or of a file named by `configuration` or `rules`, when a document is opened or saved, also in editors that don't watch files, and updates every open document then. - The language server no longer stops on some malformed messages, and formats a document with old Mac line endings (CR only) without sending an edit past its end. - Linting a template with Windows line endings from stdin reports what the rules on blank lines find, as linting the file does. - A `python_module` rule that returns a `code`, `match` or `message` that isn't a string gets a clear error. ### [`v1.49.0`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1490---2026-11-01) [Compare Source](https://github.com/djlint/djLint/compare/v1.48.1...v1.49.0) ##### Features - `djlint --lsp` runs a language server, for findings as you type and formatting in any editor that supports LSP. See [Language server](https://djlint.com/docs/integrations/#language-server). - `djlint.api.is_excluded()` tells whether the configuration leaves out a file. ##### Bug fixes - With `--stdin-filename`, djLint formats the text it is given even if the configuration sets `files`. It formatted those files instead, so an editor formatting a template rewrote them and left the template as it was. - `--stdin-filename` honors `exclude`, `extend-exclude` and `--use-gitignore`: the text of an excluded file comes back unchanged, with no findings. ### [`v1.48.1`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1481---2026-10-31) [Compare Source](https://github.com/djlint/djLint/compare/v1.48.0...v1.48.1) ##### Performance - A long run of `$` before a tag no longer makes linting slow: a line of two hundred thousand of them went from 2.2 seconds to 0.15. Formatting such a line is still slow. ### [`v1.48.0`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1480---2026-10-31) [Compare Source](https://github.com/djlint/djLint/compare/v1.47.1...v1.48.0) ##### Feature - Add `djlint.api`, a supported way to format and lint text from Python: `load_config()`, `format_text()` and `lint_text()`, which returns findings with numeric positions. See [Python API](https://djlint.com/docs/python-api/). - A finding now knows where it ends. `--linter-output-format` takes `{end}`, SARIF reports `endLine` and `endColumn`, and GitHub annotations cover the whole finding. A custom rule's `python_module` can return `end`, and otherwise ends where its `match` does. - A custom rule's `python_module` is also looked for in the project root, after everything else on the path, so it works with the `djlint` command as well as with `python -m djlint`. ##### Changed - A `python_module` rule that returns a `line` that isn't a position now stops djLint with an error naming the rule, instead of a traceback from the report. ##### Fix - A tag whose attributes are spread over several lines, but that doesn't start its line, as in `<li><a …>` or `Read the <a …>`, is laid out from that line. The attributes line up under the first one, or with `--single-attribute-per-line` sit one indent in from the line with the closing `>` at the line's indent. They used to be indented as if the tag started the line, so they landed left of the tag, or a single space in after text. ### [`v1.47.1`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1471---2026-10-26) [Compare Source](https://github.com/djlint/djLint/compare/v1.47.0...v1.47.1) ##### Fix - `preserve-inline` in the `js` setting `brace_style` takes effect, so `{ bubbles: true }` stays on one line in a `<script>` or in an attribute formatted with `--format-attribute-js-json`. It used to be dropped before the code was formatted. - The json schema allows any option under `css` and `js`, so a strict validator such as Tombi no longer reports `indent_size` there. ### [`v1.47.0`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1470---2026-10-22) [Compare Source](https://github.com/djlint/djLint/compare/v1.46.6...v1.47.0) ##### Feature - New option `--sort-load-tags` / `sort_load_tags` sorts the libraries in a `{% load %}` tag and drops the ones written twice, so `{% load static i18n %}` becomes `{% load i18n static %}`. In `{% load a b from library %}` the names before `from` are sorted. It is off by default: where two libraries define a tag or filter of the same name, the one loaded last wins, so sorting can change which one a template uses. - The formatter drops the spaces `H012` reports around an attribute's `=`, so `<div class = "a">` becomes `<div class="a">`. ##### Changed - `H010` reports the names the formatter lowercases, in any mix of case, so `Width="3"` is now reported. A framework binding such as `:itemID` or `@ID` and a longer name such as `data-ID` no longer are, since the formatter leaves their case alone. - `H018` is not reported under `--close-void-tags`, since the formatter then writes the `/>` ending the rule reports. `--ignore-case` already worked this way for `H009` and `H010`. ##### Fix - `H020` reports an empty pair whose end tag has whitespace before its `>`, such as `<div></div\n>`. - `H026` reports a `class` or `id` holding only whitespace, such as `class=" "`, and one written with spaces around the `=`. - `H033` reports an action padded at both ends once. It used to report it twice, unless an attribute before `action` happened to make the two reports look the same. - Markup written inside an attribute value, as in `<p title="<img src='a'>">`, is text, and `H005`, `H008`, `H010`, `H012`, `D018`, `J018`, `H024`, `H026`, `H029` and `H033` no longer report it. `H046` and `H051` read `tabindex` and `role` from the tag's own attributes, so `tabindex=1` written in a value or in the page text is not reported either. - `T001` and `T027` read a tag holding a dict, such as `{{ f({"a": {"b": 1}}) }}`, up to the `}}` that closes it rather than the first `}}` inside it. - `T032` steps over an escaped quote in a string, so the spaces in `{{ x|default:"a \"b c\"" }}` are not reported. - `H015` reports a heading followed by a tag on the same line anywhere in the file. It used to look only at the last line. - The rules that read a tag's attributes step over a template tag written in it, including a handlebars `{{{attrs}}}` and a dict as in `{{ {'class': 'x'}|xmlattr }}`, so `<img {{ attrs }} src='a'>` is reported by `H008`, which used to stop reading at the `{{`. - `T038` steps over a string in a block tag, so the `{%` in `{% with a="{%" %}` does not cut the tag short. ##### Performance - The rules that read a tag's attributes stop at a stray `<`, and `H015`, `H030`, `H036`, `T001`, `T027`, `T038` and `T039` no longer read the rest of the document again for each tag. A file holding thousands of unclosed tags or headings on one line is linted in a fraction of a second, where it used to take minutes. ### [`v1.46.6`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1466---2026-10-15) [Compare Source](https://github.com/djlint/djLint/compare/v1.46.5...v1.46.6) ##### Packaging - Ship the license of the mypyc runtime, which the binary wheels include, in `LICENSE-THIRD-PARTY`. - Upload [PEP 740](https://peps.python.org/pep-0740/) attestations to PyPI, so you can verify that the distributions were published from the GitHub Actions workflow of this repository. ### [`v1.46.5`](https://github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1465---2026-10-14) [Compare Source](https://github.com/djlint/djLint/compare/v1.46.4...v1.46.5) ##### Packaging - Drop support for EoL Python 3.10. </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNTUuOSIsInVwZGF0ZWRJblZlciI6IjQ0LjE5OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
chore(deps): update dependency djlint to >=1.46.6
All checks were successful
Tests / test (push) Successful in 1m43s
8a59cbce26
renovate force-pushed renovate/djlint-1.x from 8a59cbce26
All checks were successful
Tests / test (push) Successful in 1m43s
to c8558211dc 2026-10-21 03:02:33 +00:00
Compare
renovate force-pushed renovate/djlint-1.x from c8558211dc to a17bc6891e
All checks were successful
Tests / test (push) Successful in 1m43s
2026-10-23 03:03:19 +00:00
Compare
renovate changed title from chore(deps): update dependency djlint to >=1.46.6 to chore(deps): update dependency djlint to >=1.47.0 2026-10-23 03:03:20 +00:00
renovate force-pushed renovate/djlint-1.x from a17bc6891e
All checks were successful
Tests / test (push) Successful in 1m43s
to ec4faecb23 2026-10-24 03:02:57 +00:00
Compare
renovate force-pushed renovate/djlint-1.x from ec4faecb23 to 88802aef14
All checks were successful
Tests / test (push) Successful in 1m43s
2026-10-27 03:03:15 +00:00
Compare
renovate changed title from chore(deps): update dependency djlint to >=1.47.0 to chore(deps): update dependency djlint to >=1.47.1 2026-10-27 03:03:17 +00:00
renovate force-pushed renovate/djlint-1.x from 88802aef14
All checks were successful
Tests / test (push) Successful in 1m43s
to 29f6d33cfd
All checks were successful
Tests / test (push) Successful in 1m45s
2026-10-30 03:02:18 +00:00
Compare
renovate force-pushed renovate/djlint-1.x from 29f6d33cfd
All checks were successful
Tests / test (push) Successful in 1m45s
to 2294c602ab
All checks were successful
Tests / test (push) Successful in 1m46s
2026-11-01 03:01:53 +00:00
Compare
renovate changed title from chore(deps): update dependency djlint to >=1.47.1 to chore(deps): update dependency djlint to >=1.48.1 2026-11-01 03:01:55 +00:00
renovate force-pushed renovate/djlint-1.x from 2294c602ab
All checks were successful
Tests / test (push) Successful in 1m46s
to 56d248ea1c
All checks were successful
Tests / test (push) Successful in 1m44s
2026-11-02 03:02:18 +00:00
Compare
renovate changed title from chore(deps): update dependency djlint to >=1.48.1 to chore(deps): update dependency djlint to >=1.49.2 2026-11-02 03:02:20 +00:00
renovate force-pushed renovate/djlint-1.x from 56d248ea1c
All checks were successful
Tests / test (push) Successful in 1m44s
to 886637cfd6
All checks were successful
Tests / test (push) Successful in 1m46s
2026-11-03 03:02:26 +00:00
Compare
renovate changed title from chore(deps): update dependency djlint to >=1.49.2 to chore(deps): update dependency djlint to >=1.49.3 2026-11-03 03:02:28 +00:00
tobru merged commit 19a7b0ef62 into main 2026-11-03 11:54:52 +00:00
tobru deleted branch renovate/djlint-1.x 2026-11-03 11:54:52 +00:00
Sign in to join this conversation.
No description provided.