|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 0.14.14 |
| 4 | + |
| 5 | +Released on 2026-01-22. |
| 6 | + |
| 7 | +### Preview features |
| 8 | + |
| 9 | +- Preserve required parentheses in lambda bodies ([#22747](https://github.com/astral-sh/ruff/pull/22747)) |
| 10 | +- Combine range suppression code diagnostics ([#22613](https://github.com/astral-sh/ruff/pull/22613)) |
| 11 | +- \[`airflow`\] Second positional argument to `Asset`/`Dataset` should not be a dictionary (`AIR303`) ([#22453](https://github.com/astral-sh/ruff/pull/22453)) |
| 12 | +- \[`ruff`\] Detect duplicate entries in `__all__` (`RUF068`) ([#22114](https://github.com/astral-sh/ruff/pull/22114)) |
| 13 | + |
| 14 | +### Bug fixes |
| 15 | + |
| 16 | +- \[`pyupgrade`\] Allow shadowing non-builtin bindings (`UP029`) ([#22749](https://github.com/astral-sh/ruff/pull/22749)) |
| 17 | +- \[`pyupgrade`\] Apply `UP045` to string arguments of `typing.cast` ([#22320](https://github.com/astral-sh/ruff/pull/22320)) |
| 18 | +- \[`flake8-pie`\] Detect duplicated declared class fields in `PIE794` ([#22717](https://github.com/astral-sh/ruff/pull/22717)) |
| 19 | + |
| 20 | +### Rule changes |
| 21 | + |
| 22 | +- \[`flake8-pyi`\] Fix inconsistent handling of forward references for `__new__`, `__enter__`, `__aenter__` in `PYI034` ([#22798](https://github.com/astral-sh/ruff/pull/22798)) |
| 23 | +- \[`flake8-pytest-style`\] Support `check` parameter in `PT011` ([#22725](https://github.com/astral-sh/ruff/pull/22725)) |
| 24 | +- \[`ruff`\] Add exception for `ctypes.Structure._fields_` (`RUF012`) ([#22559](https://github.com/astral-sh/ruff/pull/22559)) |
| 25 | +- Many fixes are now marked unsafe if they would remove comments: |
| 26 | + - \[`flake8-bugbear`\] [`B009`](https://github.com/astral-sh/ruff/pull/22656), [`B010`](https://github.com/astral-sh/ruff/pull/22657), [`B013`](https://github.com/astral-sh/ruff/pull/22658), [`B014`](https://github.com/astral-sh/ruff/pull/22659), [`B033`](https://github.com/astral-sh/ruff/pull/22632) |
| 27 | + - \[`flake8-simplify`\] [`SIM910`](https://github.com/astral-sh/ruff/pull/22662), [`SIM911`](https://github.com/astral-sh/ruff/pull/22661) |
| 28 | + - \[`pyupgrade`\] [`UP007`](https://github.com/astral-sh/ruff/pull/22772), [`UP039`](https://github.com/astral-sh/ruff/pull/22774), [`UP041`](https://github.com/astral-sh/ruff/pull/22773), [`UP045`](https://github.com/astral-sh/ruff/pull/22772) |
| 29 | + - \[`refurb`\] [`FURB105`](https://github.com/astral-sh/ruff/pull/22767), [`FURB116`](https://github.com/astral-sh/ruff/pull/22681), [`FURB136`](https://github.com/astral-sh/ruff/pull/22680), [`FURB140`](https://github.com/astral-sh/ruff/pull/22679), [`FURB145`](https://github.com/astral-sh/ruff/pull/22670), [`FURB154`](https://github.com/astral-sh/ruff/pull/22669), [`FURB157`](https://github.com/astral-sh/ruff/pull/22668), [`FURB164`](https://github.com/astral-sh/ruff/pull/22667),[`FURB181`](https://github.com/astral-sh/ruff/pull/22666), [`FURB188`](https://github.com/astral-sh/ruff/pull/22665) |
| 30 | + - \[`ruff`\] [`RUF019`](https://github.com/astral-sh/ruff/pull/22663), [`RUF020`](https://github.com/astral-sh/ruff/pull/22664) |
| 31 | + |
| 32 | +### Documentation |
| 33 | + |
| 34 | +- Add `--exit-non-zero-on-format` to formatter exit codes section ([#22761](https://github.com/astral-sh/ruff/pull/22761)) |
| 35 | +- Update contributing guide for adding a new rule ([#22779](https://github.com/astral-sh/ruff/pull/22779)) |
| 36 | +- \[`FastAPI`\] Document fix safety for `FAST001` ([#22655](https://github.com/astral-sh/ruff/pull/22655)) |
| 37 | +- \[`flake8-async`\] Tweak explanation to focus on latency/efficiency tradeoff (`ASYNC110`) ([#22715](https://github.com/astral-sh/ruff/pull/22715)) |
| 38 | +- \[`pandas-vet`\] Make example error out-of-the-box (`PD002`) ([#22561](https://github.com/astral-sh/ruff/pull/22561)) |
| 39 | +- \[`refurb`\] Make the example work out of box (`FURB101`) ([#22770](https://github.com/astral-sh/ruff/pull/22770)) |
| 40 | +- \[`refurb`\] Make the example work out of box (`FURB103`) ([#22769](https://github.com/astral-sh/ruff/pull/22769)) |
| 41 | + |
| 42 | +### Contributors |
| 43 | + |
| 44 | +- [@alejsdev](https://github.com/alejsdev) |
| 45 | +- [@ntBre](https://github.com/ntBre) |
| 46 | +- [@caiquejjx](https://github.com/caiquejjx) |
| 47 | +- [@chirizxc](https://github.com/chirizxc) |
| 48 | +- [@denyszhak](https://github.com/denyszhak) |
| 49 | +- [@sjyangkevin](https://github.com/sjyangkevin) |
| 50 | +- [@MeGaGiGaGon](https://github.com/MeGaGiGaGon) |
| 51 | +- [@leandrobbraga](https://github.com/leandrobbraga) |
| 52 | +- [@MichaReiser](https://github.com/MichaReiser) |
| 53 | +- [@carljm](https://github.com/carljm) |
| 54 | +- [@amyreese](https://github.com/amyreese) |
| 55 | +- [@zsol](https://github.com/zsol) |
| 56 | +- [@harupy](https://github.com/harupy) |
| 57 | + |
3 | 58 | ## 0.14.13 |
4 | 59 |
|
5 | 60 | Released on 2026-01-15. |
|
0 commit comments