Commit 7ea4a88
authored
chore(deps): update python dependencies (#219)
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
|
[markdownify](https://redirect.github.com/matthewwithanm/python-markdownify)
| `1.2.2` → `1.2.3` |

|

|

|

|
| [pytest](https://redirect.github.com/pytest-dev/pytest)
([changelog](https://docs.pytest.org/en/stable/changelog.html)) |
`9.0.3` → `9.1.1` |

|

|

|

|
| [ruff](https://docs.astral.sh/ruff)
([source](https://redirect.github.com/astral-sh/ruff),
[changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| `0.15.13` → `0.15.20` |

|

|

|

|
---
### Release Notes
<details>
<summary>matthewwithanm/python-markdownify (markdownify)</summary>
###
[`v1.2.3`](https://redirect.github.com/matthewwithanm/python-markdownify/releases/tag/1.2.3)
[Compare
Source](https://redirect.github.com/matthewwithanm/python-markdownify/compare/1.2.2...1.2.3)
#### What's Changed
- fix: allow `None` to be used for `strip_pre` and `warp_width` params
in types by [@​G-Rath](https://redirect.github.com/G-Rath) in
[#​257](https://redirect.github.com/matthewwithanm/python-markdownify/pull/257)
- fix: preserve text nested inside `<br>` by html.parser
([#​244](https://redirect.github.com/matthewwithanm/python-markdownify/issues/244))
by [@​gaoflow](https://redirect.github.com/gaoflow) in
[#​264](https://redirect.github.com/matthewwithanm/python-markdownify/pull/264)
#### New Contributors
- [@​gaoflow](https://redirect.github.com/gaoflow) made their
first contribution in
[#​264](https://redirect.github.com/matthewwithanm/python-markdownify/pull/264)
**Full Changelog**:
<matthewwithanm/python-markdownify@1.2.2...1.2.3>
</details>
<details>
<summary>pytest-dev/pytest (pytest)</summary>
###
[`v9.1.1`](https://redirect.github.com/pytest-dev/pytest/releases/tag/9.1.1)
[Compare
Source](https://redirect.github.com/pytest-dev/pytest/compare/9.1.0...9.1.1)
### pytest 9.1.1 (2026-06-19)
#### Bug fixes
-
[#​14220](https://redirect.github.com/pytest-dev/pytest/issues/14220):
Fixed a logic bug in `pytest.RaisesGroup` which would might cause it to
display incorrect "It matches <span class="title-ref">FooError()</span>
which was paired with <span class="title-ref">BarError</span>" messages.
-
[#​14591](https://redirect.github.com/pytest-dev/pytest/issues/14591):
Fixed a regression in pytest 9.1.0 which caused overriding a
parametrized fixture with an indirect <span
class="title-ref">[@​pytest](https://redirect.github.com/pytest).mark.parametrize</span>
to fail with "duplicate parametrization of '\<fixture name>'".
-
[#​14606](https://redirect.github.com/pytest-dev/pytest/issues/14606):
Fixed `list-item` typing errors from mypy in `@pytest.mark.parametrize
<pytest.mark.parametrize ref>` `argvalues` parameter.
-
[#​14608](https://redirect.github.com/pytest-dev/pytest/issues/14608):
Fixed a regression in pytest 9.1.0 where `conftest.py` files located in
`<invocation dir>/test*` were no longer loaded as initial conftests when
invoked without arguments.
This could cause certain hooks (like `pytest_addoption`) in these files
to not fire.
###
[`v9.1.0`](https://redirect.github.com/pytest-dev/pytest/releases/tag/9.1.0)
[Compare
Source](https://redirect.github.com/pytest-dev/pytest/compare/9.0.3...9.1.0)
##### pytest 9.1.0 (2026-06-13)
##### Removals and backward incompatible breaking changes
-
[#​14533](https://redirect.github.com/pytest-dev/pytest/issues/14533):
When using `--doctest-modules`, autouse fixtures with `module`,
`package` or `session` scope that are defined inline in Python test
modules (not plugins or conftests) will now possibly execute twice.
If this is undesirable, move the fixture definition to a `conftest.py`
file if possible.
Technical explanation for those interested:
When using <span class="title-ref">--doctest-modules</span>, pytest
possibly collects Python modules twice, once as `pytest.Module` and once
as a `DoctestModule` (depending on the configuration).
Due to improvements in pytest's fixture implementation, if e.g. the
`DoctestModule` collects a fixture, it is now visible to it only, and
not to the `Module`.
This means that both need to register the fixtures independently.
##### Deprecations (removal in next major release)
-
[#​10819](https://redirect.github.com/pytest-dev/pytest/issues/10819):
Added a deprecation warning for class-scoped fixtures defined as
instance methods (without `@classmethod`). Such fixtures set attributes
on a different instance than the test methods use, leading to unexpected
behavior. Use `@classmethod` decorator instead -- by `yastcher`.
See `10819` and `14011`.
-
[#​12882](https://redirect.github.com/pytest-dev/pytest/issues/12882):
Calling `request.getfixturevalue()
<pytest.FixtureRequest.getfixturevalue>` during teardown to request a
fixture that was not already requested is now deprecated and will become
an error in pytest 10.
See `dynamic-fixture-request-during-teardown` for details.
-
[#​13409](https://redirect.github.com/pytest-dev/pytest/issues/13409):
Using non-`~collections.abc.Collection` iterables (such as generators,
iterators, or custom iterable objects) for the `argvalues` parameter in
`@pytest.mark.parametrize <pytest.mark.parametrize ref>` and
`metafunc.parametrize <pytest.Metafunc.parametrize>` is now deprecated.
These iterables get exhausted after the first iteration,
leading to tests getting unexpectedly skipped in cases such as running
`pytest.main()` multiple times,
using class-level parametrize decorators,
or collecting tests multiple times.
See `parametrize-iterators` for details and suggestions.
-
[#​13946](https://redirect.github.com/pytest-dev/pytest/issues/13946):
The private `config.inicfg` attribute is now deprecated.
Use `config.getini() <pytest.Config.getini>` to access configuration
values instead.
See `config-inicfg` for more details.
-
[#​14004](https://redirect.github.com/pytest-dev/pytest/issues/14004):
Passing `baseid` to `~pytest.FixtureDef` or `nodeid` strings to fixture
registration APIs is now deprecated. These are internal pytest APIs that
are used by some plugins.
Use the `node` parameter instead for fixture scoping. This enables more
robust node-based
matching instead of string prefix matching.
If you've used `nodeid=None`, pass `node=session` instead.
This will be removed in pytest 10.
-
[#​14335](https://redirect.github.com/pytest-dev/pytest/issues/14335):
The method of configuring hooks using markers, deprecated since pytest
7.2, is now scheduled to be removed in pytest 10.
See `hook-markers` for more details.
-
[#​14434](https://redirect.github.com/pytest-dev/pytest/issues/14434):
The `--pastebin` option is now deprecated.
The same functionality is now available in an external plugin,
`pytest-pastebin`.
See `pastebin-deprecated` for more details.
-
[#​14513](https://redirect.github.com/pytest-dev/pytest/issues/14513):
The private `FixtureDef.has_location` attribute is now deprecated and
will be removed in pytest 10.
See `fixturedef-has-location-deprecated` for details.
-
[#​1764](https://redirect.github.com/pytest-dev/pytest/issues/1764):
`pytest.console_main` is now deprecated and will be removed in pytest
10.
It was never intended for programmatic use; use `pytest.main` instead.
##### New features
-
[#​12376](https://redirect.github.com/pytest-dev/pytest/issues/12376):
Added `pytest.register_fixture()` to register fixtures using an
imperative interface.
This is an advanced function intended for use by plugins.
Normally, fixtures should be registered declaratively using the
`@pytest.fixture <pytest.fixture>` decorator.
Pytest looks for these fixture definitions during the collection phase
and registers them automatically.
For some plugin usecases the declarative interface can be cumbersome or
unviable, in which case this imperative interface can be used.
-
[#​14023](https://redirect.github.com/pytest-dev/pytest/issues/14023):
Added <span class="title-ref">--report-chars</span> long CLI option.
-
[#​14371](https://redirect.github.com/pytest-dev/pytest/issues/14371):
Added `--max-warnings` command-line option and `max_warnings`
configuration option to fail the test run when the number of warnings
exceeds a given threshold -- by `miketheman`.
-
[#​6757](https://redirect.github.com/pytest-dev/pytest/issues/6757):
Added the `assertion_text_diff_style` configuration option, allowing
string equality failures to be rendered as separate `Left:` and `Right:`
blocks instead of `ndiff` output.
-
[#​8395](https://redirect.github.com/pytest-dev/pytest/issues/8395):
Added support for `~datetime.datetime` and `~datetime.timedelta`
comparisons with `pytest.approx`. An explicit `abs` or `rel` tolerance
as a `~datetime.timedelta` is required and relative tolerance is not
supported for datetime comparisons -- by `hamza-mobeen`.
##### Improvements in existing functionality
-
[#​11225](https://redirect.github.com/pytest-dev/pytest/issues/11225):
`pytest.warns` now shows "Regex pattern did not match" instead of "DID
NOT WARN" when warnings were emitted but the `match` pattern did not
match.
-
[#​11295](https://redirect.github.com/pytest-dev/pytest/issues/11295):
Improved output of `--fixtures-per-test` by excluding
internal-implementation fixtures generated by `@pytest.mark.parametrize`
and similar.
-
[#​13241](https://redirect.github.com/pytest-dev/pytest/issues/13241):
`pytest.raises`, `pytest.warns` and `pytest.deprecated_call` now uses
`ParamSpec` for the type hint to the (old and not recommended) callable
overload, instead of `Any`. This allows type checkers to raise errors
when passing incorrect function parameters.
`func` can now also be passed as a kwarg, which the type hint previously
showed as possible but didn't accept.
-
[#​13862](https://redirect.github.com/pytest-dev/pytest/issues/13862):
Improved the readability of "DID NOT RAISE" error messages by using the
exception type's name instead of its <span
class="title-ref">repr</span>.
-
[#​14026](https://redirect.github.com/pytest-dev/pytest/issues/14026):
Added test coverage for compiled regex patterns in `pytest.raises` match
parameter.
-
[#​14137](https://redirect.github.com/pytest-dev/pytest/issues/14137):
<span class="title-ref">pytest.ScopeName</span> is now public to allow
using it in function signatures.
-
[#​14342](https://redirect.github.com/pytest-dev/pytest/issues/14342):
Marked `yield_fixture` as deprecated to type checkers using the
`deprecated` decorator. Note it
`has originally been deprecated <yield-fixture-deprecated>` in pytest
6.2 already.
-
[#​14373](https://redirect.github.com/pytest-dev/pytest/issues/14373):
Added type annotations for `pytest.approx`.
-
[#​14430](https://redirect.github.com/pytest-dev/pytest/issues/14430):
When using `--setup-show`, a space is now printed after the test name
(and possibly used fixtures), to separate it from the test result.
-
[#​14441](https://redirect.github.com/pytest-dev/pytest/issues/14441):
Reduced the default number of `gc.collect()` passes in the
`unraisableexception` plugin from 5 to 1 on CPython, where reference
counting makes a single pass sufficient. PyPy retains 5 passes due to
object resurrection via `__del__`. This can noticeably speed up test
suites that trigger many pytester runs.
-
[#​14461](https://redirect.github.com/pytest-dev/pytest/issues/14461):
Improved assertion failure explanations for equality comparisons between
mapping objects that are not `dict` instances.
-
[#​14513](https://redirect.github.com/pytest-dev/pytest/issues/14513):
The order in which fixture definitions overriding each other are
resolved is now determined first by their *visibility* in the collection
tree rather than by the order in which they are registered.
A fixture defined for a more specific node (e.g. a module or an item)
now always takes precedence over one with the same name defined for a
more general node (e.g. the session), even when the more general one was
registered later.
Fixtures with non-comparable visibility or the same visibility keep the
existing behavior of "last registered wins".
This change is supposed to only affect plugins which register multiple
fixtures programmatically with the same name.
-
[#​14524](https://redirect.github.com/pytest-dev/pytest/issues/14524):
Add official Python 3.15 support.
-
[#​1764](https://redirect.github.com/pytest-dev/pytest/issues/1764):
Improved argparse program name to show `pytest`, `python -m pytest`, or
`pytest.main()` based on how pytest was invoked, making help and error
messages clearer.
-
[#​8265](https://redirect.github.com/pytest-dev/pytest/issues/8265):
Emit a `PytestCollectionWarning` when a module-level `__getattr__`
returns `None` for `pytestmark` instead of raising `AttributeError`.
Previously this caused a cryptic `TypeError: got None instead of Mark`
error.
Now pytest issues a helpful warning and continues collecting the module
normally.
##### Bug fixes
-
[#​13192](https://redirect.github.com/pytest-dev/pytest/issues/13192):
Fixed <span class="title-ref">|</span> (pipe) not being treated as a
regex meta-character that needs escaping in `pytest.raises(match=...)
<pytest.raises>`.
-
[#​13484](https://redirect.github.com/pytest-dev/pytest/issues/13484):
Fixed `-W` option values being duplicated in
`Config.known_args_namespace`.
-
[#​13626](https://redirect.github.com/pytest-dev/pytest/issues/13626):
Fixed function-scoped fixture values being kept alive after a test was
interrupted by `KeyboardInterrupt` or early exit,
allowing them to potentially be released more promptly.
-
[#​13784](https://redirect.github.com/pytest-dev/pytest/issues/13784):
Fixed `capteesys` producing doubled output when used with `--capture=no`
(`-s`).
-
[#​13817](https://redirect.github.com/pytest-dev/pytest/issues/13817):
Fixed a secondary <span class="title-ref">AttributeError</span> masking
the original error when an option argument fails to initialize.
-
[#​13884](https://redirect.github.com/pytest-dev/pytest/issues/13884):
Fixed rare internal IndexError caused by <span
class="title-ref">builtins.compile</span> being overridden in client
code.
-
[#​13885](https://redirect.github.com/pytest-dev/pytest/issues/13885):
Fixed autouse fixtures defined inside a `unittest.TestCase` class
running even when the class is decorated with `unittest.skip` or
`unittest.skipIf` -- regression since pytest 8.1.0.
-
[#​13917](https://redirect.github.com/pytest-dev/pytest/issues/13917):
`unittest.SkipTest` is no longer considered an interactive exception,
i.e. `pytest_exception_interact` is no longer called for it.
-
[#​13963](https://redirect.github.com/pytest-dev/pytest/issues/13963):
Fixed subtests running with `pytest-xdist` when their contexts contain
objects that are not JSON-serializable.
Fixes
[pytest-dev/pytest-xdist#1273](https://redirect.github.com/pytest-dev/pytest-xdist/issues/1273).
-
[#​14004](https://redirect.github.com/pytest-dev/pytest/issues/14004):
Fixed conftest.py fixture scoping when `testpaths` points outside of the
`rootdir <rootdir>`.
Previously, fixtures from nested conftest.py files would incorrectly
leak to sibling directories
when using a relative `testpaths` like `../tests/sdk`.
Conftest fixtures are now parsed during `Directory <pytest.Directory>`
collection, using the `Directory` node for proper scoping.
-
[#​14050](https://redirect.github.com/pytest-dev/pytest/issues/14050):
Display dictionary differences in assertion failures using the original
key insertion order instead of sorted order.
-
[#​14080](https://redirect.github.com/pytest-dev/pytest/issues/14080):
fix missing type annotations on `Pytester.makepyfile` and
`Pytester.maketxtfile` methods.
-
[#​14114](https://redirect.github.com/pytest-dev/pytest/issues/14114):
An exception from `pytest_fixture_post_finalizer` no longer prevents
fixtures from being torn down, causing additional errors in the
following tests.
-
[#​14161](https://redirect.github.com/pytest-dev/pytest/issues/14161):
Fixed `monkeypatch.setattr() <pytest.MonkeyPatch.setattr>` leaving a
stale entry on the undo stack when the underlying `setattr()` call fails
(e.g. on immutable targets), causing an `AttributeError` crash during
teardown.
-
[#​14214](https://redirect.github.com/pytest-dev/pytest/issues/14214):
Fixed `-v` hint in `pytest.raises` match diff not working because
assertion verbosity was not propagated.
-
[#​14234](https://redirect.github.com/pytest-dev/pytest/issues/14234):
Allow `pytest.HIDDEN_PARAM <hidden-param>` in
`@pytest.mark.parametrize(ids=...) <pytest.mark.parametrize ref>`
typing.
-
[#​14248](https://redirect.github.com/pytest-dev/pytest/issues/14248):
Fixed direct parametrization causing the static fixture closure (as
reflected in `request.fixturenames
<pytest.FixtureRequest.fixturenames>`) to omit fixtures that are
requested transitively from overridden fixtures.
-
[#​14263](https://redirect.github.com/pytest-dev/pytest/issues/14263):
Unraisable exceptions from finalizers are now collected during
`pytest_unconfigure`, before pytest tears down the warning filters
installed for the session. Previously the collection ran from a cleanup
callback whose order relative to other plugins' cleanups was not
guaranteed, so an active `error` filter could be removed before the
exception surfaced and a late resource leak would pass silently. A `-W
error` filter, or any filter matching
`pytest.PytestUnraisableExceptionWarning`, now promotes these exceptions
to failures regardless of plugin cleanup order.
-
[#​14377](https://redirect.github.com/pytest-dev/pytest/issues/14377):
Fixed crash in <span
class="title-ref">Config.get\_terminal\_writer</span> when an assertion
fails with the `terminalreporter` plugin disabled.
-
[#​14381](https://redirect.github.com/pytest-dev/pytest/issues/14381):
Fixed `-V` (short form of `--version`) to properly display the current
version.
-
[#​14389](https://redirect.github.com/pytest-dev/pytest/issues/14389):
Improved `pytest.raises(..., match=...) <pytest.raises>` failures to
suppress the mismatched exception as a cause of the resulting
`AssertionError`.
-
[#​14392](https://redirect.github.com/pytest-dev/pytest/issues/14392):
Fixed a bug in `pytest.raises(match=...) <pytest.raises>` "fully
escaped" detection, causing the regex diff display to be shown in some
instances when the raw string diff display should be shown instead.
-
[#​14442](https://redirect.github.com/pytest-dev/pytest/issues/14442):
Fixed a regression in pytest 9.0 where `--strict-markers` and
`--strict-config` specified through `addopts` were silently ignored.
Note that when targeting pytest >= 9.0, it's nicer to use
`strict_markers` and `strict_config`, or `strict mode <strict mode>`.
-
[#​14456](https://redirect.github.com/pytest-dev/pytest/issues/14456):
Fixed `pytest.approx` not recognizing types with `__array_interface__`
as numpy-like arrays.
-
[#​14474](https://redirect.github.com/pytest-dev/pytest/issues/14474):
Fixed a regression where `-k` and `-m` expressions containing both
backslash characters in identifiers and string literal arguments would
incorrectly raise a `SyntaxError` about escaping.
-
[#​14483](https://redirect.github.com/pytest-dev/pytest/issues/14483):
Fixed JUnit XML report incorrectly escaping high Unicode codepoints
(supplementary plane characters like emoji) in test failure messages. --
by `EternalRights`
-
[#​14492](https://redirect.github.com/pytest-dev/pytest/issues/14492):
Fixed `Code.getargs()` incorrectly including local variable names in the
returned argument tuple for functions with `*args` and/or `**kwargs`.
The method was using `co_flags` bitmask values (`4` and `8`) directly as
counts instead of converting them to `1` via `bool()`, and was not
accounting for `co_kwonlyargcount` when `var=True`.
-
[#​3697](https://redirect.github.com/pytest-dev/pytest/issues/3697):
Logging capture now works for non-propagating loggers.
Previously only logs which reached the root logger were captured.
This includes `caplog` and the "Captured log calls" test reporting.
-
[#​3850](https://redirect.github.com/pytest-dev/pytest/issues/3850):
Fixed JUnit XML report: the `tests` attribute of the `<testsuite>`
element now always matches the number of `<testcase>` elements in the
file. In some cases (test passes but fails during teardown) the `tests`
attribute would report an incorrect number of testcases in the XML file.
-
[#​5848](https://redirect.github.com/pytest-dev/pytest/issues/5848):
`pytest_fixture_post_finalizer` is no longer called extra times for the
same fixture teardown in some cases.
-
[#​719](https://redirect.github.com/pytest-dev/pytest/issues/719):
Fixed `@pytest.mark.parametrize <pytest.mark.parametrize ref>` not
unpacking single-element tuple values when using a string argnames with
a trailing comma (e.g., `"arg,"`).
The trailing comma form now correctly behaves like the tuple form
`("arg",)`, treating argvalues as a list of tuples to unpack.
##### Improved documentation
-
[#​11022](https://redirect.github.com/pytest-dev/pytest/issues/11022):
Document safer alternatives and scope guidance for monkeypatching
standard library functions.
-
[#​11307](https://redirect.github.com/pytest-dev/pytest/issues/11307):
Document that `@pytest.hookimpl(specname=...)` only works for function
names starting with `pytest_`.
-
[#​13038](https://redirect.github.com/pytest-dev/pytest/issues/13038):
Document that doctests do not support parametrized fixtures, including
parametrized autouse fixtures.
-
[#​13155](https://redirect.github.com/pytest-dev/pytest/issues/13155):
Clarified how the `request` fixture provides indirect parametrization
values via `request.param`.
-
[#​13304](https://redirect.github.com/pytest-dev/pytest/issues/13304):
Clarified in the documentation that hook implementations defined in
`conftest.py` files are not available to other plugins during their
`pytest_addoption()` execution, as conftest files are discovered and
loaded after builtin and third-party plugins have been initialized.
However, initial conftest files themselves can implement
`pytest_addoption()` to add their own command-line options.
-
[#​13902](https://redirect.github.com/pytest-dev/pytest/issues/13902):
Clarified how subtest progress markers are shown in the documentation.
-
[#​14012](https://redirect.github.com/pytest-dev/pytest/issues/14012):
The `ini options ref` section of the API Reference now specified the
type and default value of every configuration option.
-
[#​14148](https://redirect.github.com/pytest-dev/pytest/issues/14148):
Documented a safe `pytestconfig.cache` access pattern when the
`cacheprovider` plugin is disabled.
-
[#​14303](https://redirect.github.com/pytest-dev/pytest/issues/14303):
The documentation is now built with Sphinx >= 9.
-
[#​14465](https://redirect.github.com/pytest-dev/pytest/issues/14465):
Updated the hooks how-to page to link the `newhooks.py` file in
`pytest-xdist` at tag `v3.8.0` instead of an unrelated 2017-era commit
under the old layout. Pointing at a tag keeps the example in sync with
the version users actually install, while remaining stable when the
project's main branch moves on.
##### Miscellaneous internal changes
-
[#​14582](https://redirect.github.com/pytest-dev/pytest/issues/14582):
Improved the recursion traceback test to exercise all requested
traceback styles.
</details>
<details>
<summary>astral-sh/ruff (ruff)</summary>
###
[`v0.15.20`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01520)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.19...0.15.20)
Released on 2026-06-25.
##### Preview features
- Allow human-readable names in rule selectors
([#​25887](https://redirect.github.com/astral-sh/ruff/pull/25887))
- Emit a warning instead of an error for unknown rule selectors
([#​26113](https://redirect.github.com/astral-sh/ruff/pull/26113))
- Match `noqa` shebang handling in `ruff:ignore` comments
([#​26286](https://redirect.github.com/astral-sh/ruff/pull/26286))
- \[`ruff`] Remove `pytest-fixture-autouse` (`RUF076`)
([#​26240](https://redirect.github.com/astral-sh/ruff/pull/26240),
[#​26371](https://redirect.github.com/astral-sh/ruff/pull/26371))
##### Documentation
- Add versioning sections to custom crate READMEs
([#​26317](https://redirect.github.com/astral-sh/ruff/pull/26317))
- Update `ruff_python_parser` README for crates.io
([#​26315](https://redirect.github.com/astral-sh/ruff/pull/26315))
- \[`perflint`] Clarify that `PERF402` applies to any iterable
([#​26242](https://redirect.github.com/astral-sh/ruff/pull/26242))
##### Contributors
- [@​dhruvmanila](https://redirect.github.com/dhruvmanila)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​trilamsr](https://redirect.github.com/trilamsr)
###
[`v0.15.19`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01519)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.18...0.15.19)
Released on 2026-06-23.
##### Preview features
- Support human-readable names when hovering suppression comments and in
code actions
([#​26114](https://redirect.github.com/astral-sh/ruff/pull/26114))
##### Bug fixes
- Fall back to default settings when editor-only settings are invalid
([#​26244](https://redirect.github.com/astral-sh/ruff/pull/26244))
- Fix panic when inserting text at a notebook cell boundary
([#​26111](https://redirect.github.com/astral-sh/ruff/pull/26111))
##### Rule changes
- \[`pylint`] Update fix suggestions for `__floor__`, `__trunc__`,
`__length_hint__`, and `__matmul__` variants (`PLC2801`)
([#​26239](https://redirect.github.com/astral-sh/ruff/pull/26239))
##### Performance
- Avoid allocating when parsing single string literals
([#​26200](https://redirect.github.com/astral-sh/ruff/pull/26200))
- Avoid reallocating singleton call arguments
([#​26223](https://redirect.github.com/astral-sh/ruff/pull/26223))
- Lazily create source files for lint diagnostics
([#​26226](https://redirect.github.com/astral-sh/ruff/pull/26226))
- Optimize formatter text width and indentation
([#​26236](https://redirect.github.com/astral-sh/ruff/pull/26236))
- Reserve capacity for builtin bindings
([#​26229](https://redirect.github.com/astral-sh/ruff/pull/26229))
- Skip repeated-key checks for singleton dictionaries
([#​26228](https://redirect.github.com/astral-sh/ruff/pull/26228))
- Use ArrayVec for qualified name segments
([#​26224](https://redirect.github.com/astral-sh/ruff/pull/26224))
##### Documentation
- \[`flake8-pyi`] Note that `PYI051` is an opinionated stylistic rule
([#​26179](https://redirect.github.com/astral-sh/ruff/pull/26179))
- \[`pyupgrade`] Clarify `UP029` as a Python 2 compatibility rule
([#​26243](https://redirect.github.com/astral-sh/ruff/pull/26243))
##### Other changes
- Publish Ruff crates to crates.io
([#​26271](https://redirect.github.com/astral-sh/ruff/pull/26271))
##### Contributors
- [@​MakenRosa](https://redirect.github.com/MakenRosa)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​trilamsr](https://redirect.github.com/trilamsr)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​sanjibani](https://redirect.github.com/sanjibani)
- [@​charliermarsh](https://redirect.github.com/charliermarsh)
###
[`v0.15.18`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01518)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.17...0.15.18)
Released on 2026-06-18.
##### Preview features
- Handle nested `ruff:ignore` comments
([#​25791](https://redirect.github.com/astral-sh/ruff/pull/25791))
- Stop displaying severity in output
([#​26050](https://redirect.github.com/astral-sh/ruff/pull/26050))
- Use human-readable names in CLI output
([#​25937](https://redirect.github.com/astral-sh/ruff/pull/25937))
- Use human-readable names in LSP and playground diagnostics
([#​26058](https://redirect.github.com/astral-sh/ruff/pull/26058))
- \[`pydocstyle`] Prevent property docstrings starting with verbs
(`D421`)
([#​23775](https://redirect.github.com/astral-sh/ruff/pull/23775))
- \[`flake8-pyi`] Extend `PYI033` to Python files
([#​26129](https://redirect.github.com/astral-sh/ruff/pull/26129))
##### Bug fixes
- Detect equivalent numeric mapping keys
([#​26009](https://redirect.github.com/astral-sh/ruff/pull/26009))
- Detect mapping keys equivalent to booleans
([#​25982](https://redirect.github.com/astral-sh/ruff/pull/25982))
- Detect repeated signed and complex dictionary keys
([#​26007](https://redirect.github.com/astral-sh/ruff/pull/26007))
##### Rule changes
- \[`flake8-pyi`] Rename `PYI033` to `legacy-type-comment`
([#​26131](https://redirect.github.com/astral-sh/ruff/pull/26131))
##### Performance
- Use `ThinVec` for call keywords
([#​25999](https://redirect.github.com/astral-sh/ruff/pull/25999))
- Inline parser recovery context checks
([#​26038](https://redirect.github.com/astral-sh/ruff/pull/26038))
- Match parser keywords as bytes
([#​26037](https://redirect.github.com/astral-sh/ruff/pull/26037))
- Move value parsing out of lexing
([#​25360](https://redirect.github.com/astral-sh/ruff/pull/25360))
##### Server
- Render subdiagnostics and secondary annotations as related information
([#​26011](https://redirect.github.com/astral-sh/ruff/pull/26011))
##### Documentation
- Update fix availability for always-fixable rules
([#​26091](https://redirect.github.com/astral-sh/ruff/pull/26091))
- \[`flake8-tidy-imports`] Add fix safety section (`TID252`)
([#​17491](https://redirect.github.com/astral-sh/ruff/pull/17491))
##### Parser
- Reject `__debug__` lambda parameters
([#​26022](https://redirect.github.com/astral-sh/ruff/pull/26022))
- Reject `_` as a match-pattern target
([#​25977](https://redirect.github.com/astral-sh/ruff/pull/25977))
- Reject multiple starred names in sequence patterns
([#​25976](https://redirect.github.com/astral-sh/ruff/pull/25976))
- Reject parenthesized star imports
([#​26021](https://redirect.github.com/astral-sh/ruff/pull/26021))
- Reject starred comprehension targets
([#​26023](https://redirect.github.com/astral-sh/ruff/pull/26023))
- Reject unparenthesized generator expressions in class bases
([#​25978](https://redirect.github.com/astral-sh/ruff/pull/25978))
- Reject `yield` expressions after commas
([#​26024](https://redirect.github.com/astral-sh/ruff/pull/26024))
- Validate function type parameter default order
([#​25981](https://redirect.github.com/astral-sh/ruff/pull/25981))
##### Playground
- Make diagnostic links clickable
([#​26104](https://redirect.github.com/astral-sh/ruff/pull/26104))
- Use diagnostic tags
([#​26105](https://redirect.github.com/astral-sh/ruff/pull/26105))
##### Contributors
- [@​AlexWaygood](https://redirect.github.com/AlexWaygood)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​gtkacz](https://redirect.github.com/gtkacz)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​charliermarsh](https://redirect.github.com/charliermarsh)
- [@​Kalmaegi](https://redirect.github.com/Kalmaegi)
###
[`v0.15.17`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01517)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.16...0.15.17)
Released on 2026-06-11.
##### Preview features
- Allow human-readable names in suppression comments
([#​25614](https://redirect.github.com/astral-sh/ruff/pull/25614))
- Fix handling of `ignore` comments within a `disable`/`enable` pair
([#​25845](https://redirect.github.com/astral-sh/ruff/pull/25845))
- Prioritize human-readable names in CLI output
([#​25869](https://redirect.github.com/astral-sh/ruff/pull/25869))
- Respect diagnostic start and parent ranges and trailing comments in
`ruff:ignore` suppressions
([#​25673](https://redirect.github.com/astral-sh/ruff/pull/25673))
- \[`flake8-async`] Add `trio.as_safe_channel` to safe decorators
(`ASYNC119`)
([#​25775](https://redirect.github.com/astral-sh/ruff/pull/25775))
- \[`flake8-pytest-style`] Also check `pytest_asyncio` fixtures
([#​25375](https://redirect.github.com/astral-sh/ruff/pull/25375))
- \[`ruff`] Ban `pytest` autouse fixtures (`RUF076`)
([#​25477](https://redirect.github.com/astral-sh/ruff/pull/25477))
- \[`pyupgrade`] Add `from __future__ import annotations` automatically
(`UP007`, `UP045`)
([#​23259](https://redirect.github.com/astral-sh/ruff/pull/23259))
##### Bug fixes
- Fix diagnostic when `ruff:enable` or `ruff:disable` appears where
`ruff:ignore` is expected
([#​25700](https://redirect.github.com/astral-sh/ruff/pull/25700))
- \[`pyupgrade`] Preserve leading empty literals to avoid syntax errors
(`UP032`)
([#​25491](https://redirect.github.com/astral-sh/ruff/pull/25491))
##### Rule changes
- \[`flake8-pytest-style`] Clarify diagnostic message for single
parameters (`PT007`)
([#​25592](https://redirect.github.com/astral-sh/ruff/pull/25592))
- \[`numpy`] Drop autofix for `np.in1d` (`NPY201`)
([#​25612](https://redirect.github.com/astral-sh/ruff/pull/25612))
- \[`pylint`] Exempt Python version comparisons (`PLR2004`)
([#​25743](https://redirect.github.com/astral-sh/ruff/pull/25743))
##### Performance
- Reserve AST `Vec`s with correct capacity for common cases
([#​25451](https://redirect.github.com/astral-sh/ruff/pull/25451))
##### Formatter
- Preserve whitespace for Quarto cell option comments
([#​25641](https://redirect.github.com/astral-sh/ruff/pull/25641))
##### CLI
- Allow rule names in `ruff rule`
([#​25640](https://redirect.github.com/astral-sh/ruff/pull/25640))
##### Other changes
- Fix playground diagnostics scrollbars
([#​25642](https://redirect.github.com/astral-sh/ruff/pull/25642))
##### Contributors
- [@​SuryanshSS1011](https://redirect.github.com/SuryanshSS1011)
- [@​anishgirianish](https://redirect.github.com/anishgirianish)
- [@​romero-deshaw](https://redirect.github.com/romero-deshaw)
- [@​karlhillx](https://redirect.github.com/karlhillx)
- [@​carljm](https://redirect.github.com/carljm)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​11happy](https://redirect.github.com/11happy)
- [@​Kilo59](https://redirect.github.com/Kilo59)
- [@​oconnor663](https://redirect.github.com/oconnor663)
- [@​LeonidasZhak](https://redirect.github.com/LeonidasZhak)
- [@​DavisVaughan](https://redirect.github.com/DavisVaughan)
- [@​MeGaGiGaGon](https://redirect.github.com/MeGaGiGaGon)
- [@​jonathandung](https://redirect.github.com/jonathandung)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​brianmego](https://redirect.github.com/brianmego)
###
[`v0.15.16`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01516)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.15...0.15.16)
Released on 2026-06-04.
##### Preview features
- \[`flake8-async`] Implement
`yield-in-context-manager-in-async-generator` (`ASYNC119`)
([#​24644](https://redirect.github.com/astral-sh/ruff/pull/24644))
- \[`pylint`] Narrow diagnostic range and exclude cases without
exception handlers (`PLW0717`)
([#​25440](https://redirect.github.com/astral-sh/ruff/pull/25440))
- \[`ruff`] Treat `yield` before `break` from a terminal loop as
terminal (`RUF075`)
([#​25447](https://redirect.github.com/astral-sh/ruff/pull/25447))
##### Bug fixes
- \[`eradicate`] Avoid flagging `ruff:ignore` comments as code
(`ERA001`)
([#​25537](https://redirect.github.com/astral-sh/ruff/pull/25537))
- \[`eradicate`] Fix `ERA001`/`RUF100` conflict when `noqa` is on
commented-out code
([#​25414](https://redirect.github.com/astral-sh/ruff/pull/25414))
- \[`pyflakes`] Avoid removing the `format` call when it would change
behavior (`F523`)
([#​25320](https://redirect.github.com/astral-sh/ruff/pull/25320))
- \[`pylint`] Avoid syntax errors in invalid character replacements in
f-strings before Python 3.12 (`PLE2510`, `PLE2512`, `PLE2513`,
`PLE2514`, `PLE2515`)
([#​25544](https://redirect.github.com/astral-sh/ruff/pull/25544))
- \[`pyupgrade`] Avoid converting `format` calls with more kinds of side
effects (`UP032`)
([#​25484](https://redirect.github.com/astral-sh/ruff/pull/25484))
##### Rule changes
- \[`flake8-pytest-style`] Avoid fixes for ambiguous `argnames` and
`argvalues` combinations (`PT006`)
([#​24776](https://redirect.github.com/astral-sh/ruff/pull/24776))
##### Performance
- Drop excess capacity from statement suites during parsing
([#​25368](https://redirect.github.com/astral-sh/ruff/pull/25368))
##### Documentation
- \[`pydocstyle`] Improve discoverability of rules enabled for each
convention
([#​24973](https://redirect.github.com/astral-sh/ruff/pull/24973))
- \[`ruff`] Restore example code for Python versions before 3.15
(`RUF017`)
([#​25439](https://redirect.github.com/astral-sh/ruff/pull/25439))
- Fix typo `bin/active` → `bin/activate` in tutorial
([#​25473](https://redirect.github.com/astral-sh/ruff/pull/25473))
##### Other changes
- Shrink additional parser AST collections
([#​25465](https://redirect.github.com/astral-sh/ruff/pull/25465))
##### Contributors
- [@​Redslayer112](https://redirect.github.com/Redslayer112)
- [@​koriyoshi2041](https://redirect.github.com/koriyoshi2041)
- [@​George-Ogden](https://redirect.github.com/George-Ogden)
- [@​TejasAmle](https://redirect.github.com/TejasAmle)
- [@​anishgirianish](https://redirect.github.com/anishgirianish)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​loganrosen](https://redirect.github.com/loganrosen)
- [@​RafaelJohn9](https://redirect.github.com/RafaelJohn9)
- [@​adityasingh2400](https://redirect.github.com/adityasingh2400)
###
[`v0.15.15`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01515)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.14...0.15.15)
Released on 2026-05-28.
##### Preview features
- Fix Markdown closing fence handling
([#​25310](https://redirect.github.com/astral-sh/ruff/pull/25310))
- \[`pyflakes`] Report duplicate imports in `typing.TYPE_CHECKING` block
(`F811`)
([#​22560](https://redirect.github.com/astral-sh/ruff/pull/22560))
##### Bug fixes
- \[`pyflakes`] Treat function-scope bare annotations as locals per PEP
526 (`F821`)
([#​21540](https://redirect.github.com/astral-sh/ruff/pull/21540))
##### Performance
- Avoid redundant `TokenValue` drops in the lexer
([#​25300](https://redirect.github.com/astral-sh/ruff/pull/25300))
- Reduce memory usage by dropping token-excess capacity and improve
performance by approximating the initial tokens `Vec` size
([#​25354](https://redirect.github.com/astral-sh/ruff/pull/25354))
- Use `ThinVec` in AST to shrink `Stmt`
([#​25361](https://redirect.github.com/astral-sh/ruff/pull/25361))
##### Documentation
- Fix `line-length` example for `--config` option
([#​25389](https://redirect.github.com/astral-sh/ruff/pull/25389))
- \[`flake8-comprehensions`] Document `RecursionError` edge case in
`__len__` (`C416`)
([#​25286](https://redirect.github.com/astral-sh/ruff/pull/25286))
- \[`mccabe`] Improve example (`C901`)
([#​25287](https://redirect.github.com/astral-sh/ruff/pull/25287))
- \[`pyupgrade`] Clarify fix safety docs (`UP007`, `UP045`)
([#​25288](https://redirect.github.com/astral-sh/ruff/pull/25288))
- \[`refurb`] Document `FURB192` exception change for empty sequences
([#​25317](https://redirect.github.com/astral-sh/ruff/pull/25317))
- \[`ruff`] Document false negative for user-defined types (`RUF013`)
([#​25289](https://redirect.github.com/astral-sh/ruff/pull/25289))
##### Formatter
- Fix formatting of lambdas nested within f-strings
([#​25398](https://redirect.github.com/astral-sh/ruff/pull/25398))
##### Server
- Return code action for `codeAction/resolve` requests that contain no
or no valid URL
([#​25365](https://redirect.github.com/astral-sh/ruff/pull/25365))
##### Other changes
- Expand semantic syntax errors for invalid walruses
([#​25415](https://redirect.github.com/astral-sh/ruff/pull/25415))
##### Contributors
- [@​chirizxc](https://redirect.github.com/chirizxc)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​adityasingh2400](https://redirect.github.com/adityasingh2400)
- [@​charliermarsh](https://redirect.github.com/charliermarsh)
- [@​fallintoplace](https://redirect.github.com/fallintoplace)
-
[@​martin-schlossarek](https://redirect.github.com/martin-schlossarek)
- [@​MichaReiser](https://redirect.github.com/MichaReiser)
- [@​Ruchir28](https://redirect.github.com/Ruchir28)
###
[`v0.15.14`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01514)
[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.15.13...0.15.14)
Released on 2026-05-21.
##### Preview features
- \[`airflow`] Implement `airflow-task-implicit-multiple-outputs`
(`AIR202`)
([#​25152](https://redirect.github.com/astral-sh/ruff/pull/25152))
- \[`flake8-use-pathlib`] Mark `PTH101` fix as unsafe when first
argument is a class attribute annotated as `int`
([#​25086](https://redirect.github.com/astral-sh/ruff/pull/25086))
- \[`pylint`] Implement `too-many-try-statements` (`W0717`)
([#​23970](https://redirect.github.com/astral-sh/ruff/pull/23970))
- \[`ruff`] Add `incorrect-decorator-order` (`RUF074`)
([#​23461](https://redirect.github.com/astral-sh/ruff/pull/23461))
- \[`ruff`] Add `fallible-context-manager` (`RUF075`)
([#​22844](https://redirect.github.com/astral-sh/ruff/pull/22844))
##### Bug fixes
- Fix lambda formatting in interpolated string expressions
([#​25144](https://redirect.github.com/astral-sh/ruff/pull/25144))
- Treat generic `frozenset` annotations as immutable
([#​25251](https://redirect.github.com/astral-sh/ruff/pull/25251))
- \[`flake8-type-checking`] Avoid `strict` behavior when
`future-annotations` are enabled (`TC001`, `TC002`, `TC003`)
([#​25035](https://redirect.github.com/astral-sh/ruff/pull/25035))
- \[`pylint`] Avoid false positives in `else` clause (`PLR1733`)
([#​25177](https://redirect.github.com/astral-sh/ruff/pull/25177))
##### Rule changes
- \[`flake8-comprehensions`] Skip `C417` for lambdas with
positional-only parameters
([#​25272](https://redirect.github.com/astral-sh/ruff/pull/25272))
- \[`flake8-simplify`] Preserve f-string source verbatim in `SIM101` fix
([#​25061](https://redirect.github.com/astral-sh/ruff/pull/25061))
##### Performance
- Avoid unnecessary parser lookahead for operators
([#​25290](https://redirect.github.com/astral-sh/ruff/pull/25290))
##### Documentation
- Update code example setting Neovim LSP log level
([#​25284](https://redirect.github.com/astral-sh/ruff/pull/25284))
##### Other changes
- Add full PEP 798 support
([#​25104](https://redirect.github.com/astral-sh/ruff/pull/25104))
- Add a parser recursion limit
([#​24810](https://redirect.github.com/astral-sh/ruff/pull/24810))
- Update various `ruff_python_stdlib` APIs
([#​25273](https://redirect.github.com/astral-sh/ruff/pull/25273))
##### Contributors
- [@​ocaballeror](https://redirect.github.com/ocaballeror)
- [@​lerebear](https://redirect.github.com/lerebear)
- [@​samuelcolvin](https://redirect.github.com/samuelcolvin)
- [@​baltasarblanco](https://redirect.github.com/baltasarblanco)
- [@​aconal-com](https://redirect.github.com/aconal-com)
- [@​anishgirianish](https://redirect.github.com/anishgirianish)
- [@​JelleZijlstra](https://redirect.github.com/JelleZijlstra)
- [@​AlexWaygood](https://redirect.github.com/AlexWaygood)
- [@​ntBre](https://redirect.github.com/ntBre)
- [@​adityasingh2400](https://redirect.github.com/adityasingh2400)
- [@​charliermarsh](https://redirect.github.com/charliermarsh)
- [@​Dev-iL](https://redirect.github.com/Dev-iL)
- [@​neutrinoceros](https://redirect.github.com/neutrinoceros)
- [@​shivamtiwari3](https://redirect.github.com/shivamtiwari3)
- [@​Dev-X25874](https://redirect.github.com/Dev-X25874)
</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 becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/DrupalSecurityTeam/drupal-advisory-database).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>1 parent 9683a00 commit 7ea4a88
1 file changed
Lines changed: 25 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments