mirror of https://github.com/astral-sh/ruff
500 lines
23 KiB
Markdown
500 lines
23 KiB
Markdown
# Changelog
|
||
|
||
## 0.14.9
|
||
|
||
Released on 2025-12-11.
|
||
|
||
### Preview features
|
||
|
||
- \[`ruff`\] New `RUF100` diagnostics for unused range suppressions ([#21783](https://github.com/astral-sh/ruff/pull/21783))
|
||
- \[`pylint`\] Detect subclasses of builtin exceptions (`PLW0133`) ([#21382](https://github.com/astral-sh/ruff/pull/21382))
|
||
|
||
### Bug fixes
|
||
|
||
- Fix comment placement in lambda parameters ([#21868](https://github.com/astral-sh/ruff/pull/21868))
|
||
- Skip over trivia tokens after re-lexing ([#21895](https://github.com/astral-sh/ruff/pull/21895))
|
||
- \[`flake8-bandit`\] Fix false positive when using non-standard `CSafeLoader` path (S506). ([#21830](https://github.com/astral-sh/ruff/pull/21830))
|
||
- \[`flake8-bugbear`\] Accept immutable slice default arguments (`B008`) ([#21823](https://github.com/astral-sh/ruff/pull/21823))
|
||
|
||
### Rule changes
|
||
|
||
- \[`pydocstyle`\] Suppress `D417` for parameters with `Unpack` annotations ([#21816](https://github.com/astral-sh/ruff/pull/21816))
|
||
|
||
### Performance
|
||
|
||
- Use `memchr` for computing line indexes ([#21838](https://github.com/astral-sh/ruff/pull/21838))
|
||
|
||
### Documentation
|
||
|
||
- Document `*.pyw` is included by default in preview ([#21885](https://github.com/astral-sh/ruff/pull/21885))
|
||
- Document range suppressions, reorganize suppression docs ([#21884](https://github.com/astral-sh/ruff/pull/21884))
|
||
- Update mkdocs-material to 9.7.0 (Insiders now free) ([#21797](https://github.com/astral-sh/ruff/pull/21797))
|
||
|
||
### Contributors
|
||
|
||
- [@Avasam](https://github.com/Avasam)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
- [@charliermarsh](https://github.com/charliermarsh)
|
||
- [@amyreese](https://github.com/amyreese)
|
||
- [@phongddo](https://github.com/phongddo)
|
||
- [@prakhar1144](https://github.com/prakhar1144)
|
||
- [@mahiro72](https://github.com/mahiro72)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@LoicRiegel](https://github.com/LoicRiegel)
|
||
|
||
## 0.14.8
|
||
|
||
Released on 2025-12-04.
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-bugbear`\] Catch `yield` expressions within other statements (`B901`) ([#21200](https://github.com/astral-sh/ruff/pull/21200))
|
||
- \[`flake8-use-pathlib`\] Mark fixes unsafe for return type changes (`PTH104`, `PTH105`, `PTH109`, `PTH115`) ([#21440](https://github.com/astral-sh/ruff/pull/21440))
|
||
|
||
### Bug fixes
|
||
|
||
- Fix syntax error false positives for `await` outside functions ([#21763](https://github.com/astral-sh/ruff/pull/21763))
|
||
- \[`flake8-simplify`\] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (`SIM222`, `SIM223`) ([#21479](https://github.com/astral-sh/ruff/pull/21479))
|
||
|
||
### Documentation
|
||
|
||
- Suggest using `--output-file` option in GitLab integration ([#21706](https://github.com/astral-sh/ruff/pull/21706))
|
||
|
||
### Other changes
|
||
|
||
- [syntax-error] Default type parameter followed by non-default type parameter ([#21657](https://github.com/astral-sh/ruff/pull/21657))
|
||
|
||
### Contributors
|
||
|
||
- [@kieran-ryan](https://github.com/kieran-ryan)
|
||
- [@11happy](https://github.com/11happy)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
|
||
## 0.14.7
|
||
|
||
Released on 2025-11-28.
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-bandit`\] Handle string literal bindings in suspicious-url-open-usage (`S310`) ([#21469](https://github.com/astral-sh/ruff/pull/21469))
|
||
- \[`pylint`\] Fix `PLR1708` false positives on nested functions ([#21177](https://github.com/astral-sh/ruff/pull/21177))
|
||
- \[`pylint`\] Fix suppression for empty dict without tuple key annotation (`PLE1141`) ([#21290](https://github.com/astral-sh/ruff/pull/21290))
|
||
- \[`ruff`\] Add rule `RUF066` to detect unnecessary class properties ([#21535](https://github.com/astral-sh/ruff/pull/21535))
|
||
- \[`ruff`\] Catch more dummy variable uses (`RUF052`) ([#19799](https://github.com/astral-sh/ruff/pull/19799))
|
||
|
||
### Bug fixes
|
||
|
||
- [server] Set severity for non-rule diagnostics ([#21559](https://github.com/astral-sh/ruff/pull/21559))
|
||
- \[`flake8-implicit-str-concat`\] Avoid invalid fix in (`ISC003`) ([#21517](https://github.com/astral-sh/ruff/pull/21517))
|
||
- \[`parser`\] Fix panic when parsing IPython escape command expressions ([#21480](https://github.com/astral-sh/ruff/pull/21480))
|
||
|
||
### CLI
|
||
|
||
- Show partial fixability indicator in statistics output ([#21513](https://github.com/astral-sh/ruff/pull/21513))
|
||
|
||
### Contributors
|
||
|
||
- [@mikeleppane](https://github.com/mikeleppane)
|
||
- [@senekor](https://github.com/senekor)
|
||
- [@ShaharNaveh](https://github.com/ShaharNaveh)
|
||
- [@JumboBear](https://github.com/JumboBear)
|
||
- [@prakhar1144](https://github.com/prakhar1144)
|
||
- [@tsvikas](https://github.com/tsvikas)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@chirizxc](https://github.com/chirizxc)
|
||
- [@AlexWaygood](https://github.com/AlexWaygood)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
|
||
## 0.14.6
|
||
|
||
Released on 2025-11-21.
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-bandit`\] Support new PySNMP API paths (`S508`, `S509`) ([#21374](https://github.com/astral-sh/ruff/pull/21374))
|
||
|
||
### Bug fixes
|
||
|
||
- Adjust own-line comment placement between branches ([#21185](https://github.com/astral-sh/ruff/pull/21185))
|
||
- Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value ([#20418](https://github.com/astral-sh/ruff/pull/20418))
|
||
- Fix panic when formatting comments in unary expressions ([#21501](https://github.com/astral-sh/ruff/pull/21501))
|
||
- Respect `fmt: skip` for compound statements on a single line ([#20633](https://github.com/astral-sh/ruff/pull/20633))
|
||
- \[`refurb`\] Fix `FURB103` autofix ([#21454](https://github.com/astral-sh/ruff/pull/21454))
|
||
- \[`ruff`\] Fix false positive for complex conversion specifiers in `logging-eager-conversion` (`RUF065`) ([#21464](https://github.com/astral-sh/ruff/pull/21464))
|
||
|
||
### Rule changes
|
||
|
||
- \[`ruff`\] Avoid false positive on `ClassVar` reassignment (`RUF012`) ([#21478](https://github.com/astral-sh/ruff/pull/21478))
|
||
|
||
### CLI
|
||
|
||
- Render hyperlinks for lint errors ([#21514](https://github.com/astral-sh/ruff/pull/21514))
|
||
- Add a `ruff analyze` option to skip over imports in `TYPE_CHECKING` blocks ([#21472](https://github.com/astral-sh/ruff/pull/21472))
|
||
|
||
### Documentation
|
||
|
||
- Limit `eglot-format` hook to eglot-managed Python buffers ([#21459](https://github.com/astral-sh/ruff/pull/21459))
|
||
- Mention `force-exclude` in "Configuration > Python file discovery" ([#21500](https://github.com/astral-sh/ruff/pull/21500))
|
||
|
||
### Contributors
|
||
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@dylwil3](https://github.com/dylwil3)
|
||
- [@gauthsvenkat](https://github.com/gauthsvenkat)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
- [@thamer](https://github.com/thamer)
|
||
- [@Ruchir28](https://github.com/Ruchir28)
|
||
- [@thejcannon](https://github.com/thejcannon)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@chirizxc](https://github.com/chirizxc)
|
||
|
||
## 0.14.5
|
||
|
||
Released on 2025-11-13.
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-simplify`\] Apply `SIM113` when index variable is of type `int` ([#21395](https://github.com/astral-sh/ruff/pull/21395))
|
||
- \[`pydoclint`\] Fix false positive when Sphinx directives follow a "Raises" section (`DOC502`) ([#20535](https://github.com/astral-sh/ruff/pull/20535))
|
||
- \[`pydoclint`\] Support NumPy-style comma-separated parameters (`DOC102`) ([#20972](https://github.com/astral-sh/ruff/pull/20972))
|
||
- \[`refurb`\] Auto-fix annotated assignments (`FURB101`) ([#21278](https://github.com/astral-sh/ruff/pull/21278))
|
||
- \[`ruff`\] Ignore `str()` when not used for simple conversion (`RUF065`) ([#21330](https://github.com/astral-sh/ruff/pull/21330))
|
||
|
||
### Bug fixes
|
||
|
||
- Fix syntax error false positive on alternative `match` patterns ([#21362](https://github.com/astral-sh/ruff/pull/21362))
|
||
- \[`flake8-simplify`\] Fix false positive for iterable initializers with generator arguments (`SIM222`) ([#21187](https://github.com/astral-sh/ruff/pull/21187))
|
||
- \[`pyupgrade`\] Fix false positive on relative imports from local `.builtins` module (`UP029`) ([#21309](https://github.com/astral-sh/ruff/pull/21309))
|
||
- \[`pyupgrade`\] Consistently set the deprecated tag (`UP035`) ([#21396](https://github.com/astral-sh/ruff/pull/21396))
|
||
|
||
### Rule changes
|
||
|
||
- \[`refurb`\] Detect empty f-strings (`FURB105`) ([#21348](https://github.com/astral-sh/ruff/pull/21348))
|
||
|
||
### CLI
|
||
|
||
- Add option to provide a reason to `--add-noqa` ([#21294](https://github.com/astral-sh/ruff/pull/21294))
|
||
- Add upstream linter URL to `ruff linter --output-format=json` ([#21316](https://github.com/astral-sh/ruff/pull/21316))
|
||
- Add color to `--help` ([#21337](https://github.com/astral-sh/ruff/pull/21337))
|
||
|
||
### Documentation
|
||
|
||
- Add a new "Opening a PR" section to the contribution guide ([#21298](https://github.com/astral-sh/ruff/pull/21298))
|
||
- Added the PyScripter IDE to the list of "Who is using Ruff?" ([#21402](https://github.com/astral-sh/ruff/pull/21402))
|
||
- Update PyCharm setup instructions ([#21409](https://github.com/astral-sh/ruff/pull/21409))
|
||
- \[`flake8-annotations`\] Add link to `allow-star-arg-any` option (`ANN401`) ([#21326](https://github.com/astral-sh/ruff/pull/21326))
|
||
|
||
### Other changes
|
||
|
||
- \[`configuration`\] Improve error message when `line-length` exceeds `u16::MAX` ([#21329](https://github.com/astral-sh/ruff/pull/21329))
|
||
|
||
### Contributors
|
||
|
||
- [@njhearp](https://github.com/njhearp)
|
||
- [@11happy](https://github.com/11happy)
|
||
- [@hugovk](https://github.com/hugovk)
|
||
- [@Gankra](https://github.com/Gankra)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@pyscripter](https://github.com/pyscripter)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
- [@henryiii](https://github.com/henryiii)
|
||
- [@charliecloudberry](https://github.com/charliecloudberry)
|
||
|
||
## 0.14.4
|
||
|
||
Released on 2025-11-06.
|
||
|
||
### Preview features
|
||
|
||
- [formatter] Allow newlines after function headers without docstrings ([#21110](https://github.com/astral-sh/ruff/pull/21110))
|
||
- [formatter] Avoid extra parentheses for long `match` patterns with `as` captures ([#21176](https://github.com/astral-sh/ruff/pull/21176))
|
||
- \[`refurb`\] Expand fix safety for keyword arguments and `Decimal`s (`FURB164`) ([#21259](https://github.com/astral-sh/ruff/pull/21259))
|
||
- \[`refurb`\] Preserve argument ordering in autofix (`FURB103`) ([#20790](https://github.com/astral-sh/ruff/pull/20790))
|
||
|
||
### Bug fixes
|
||
|
||
- [server] Fix missing diagnostics for notebooks ([#21156](https://github.com/astral-sh/ruff/pull/21156))
|
||
- \[`flake8-bugbear`\] Ignore non-NFKC attribute names in `B009` and `B010` ([#21131](https://github.com/astral-sh/ruff/pull/21131))
|
||
- \[`refurb`\] Fix false negative for underscores before sign in `Decimal` constructor (`FURB157`) ([#21190](https://github.com/astral-sh/ruff/pull/21190))
|
||
- \[`ruff`\] Fix false positives on starred arguments (`RUF057`) ([#21256](https://github.com/astral-sh/ruff/pull/21256))
|
||
|
||
### Rule changes
|
||
|
||
- \[`airflow`\] extend deprecated argument `concurrency` in `airflow..DAG` (`AIR301`) ([#21220](https://github.com/astral-sh/ruff/pull/21220))
|
||
|
||
### Documentation
|
||
|
||
- Improve `extend` docs ([#21135](https://github.com/astral-sh/ruff/pull/21135))
|
||
- \[`flake8-comprehensions`\] Fix typo in `C416` documentation ([#21184](https://github.com/astral-sh/ruff/pull/21184))
|
||
- Revise Ruff setup instructions for Zed editor ([#20935](https://github.com/astral-sh/ruff/pull/20935))
|
||
|
||
### Other changes
|
||
|
||
- Make `ruff analyze graph` work with jupyter notebooks ([#21161](https://github.com/astral-sh/ruff/pull/21161))
|
||
|
||
### Contributors
|
||
|
||
- [@chirizxc](https://github.com/chirizxc)
|
||
- [@Lee-W](https://github.com/Lee-W)
|
||
- [@musicinmybrain](https://github.com/musicinmybrain)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
- [@tjkuson](https://github.com/tjkuson)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@renovate](https://github.com/renovate)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@gauthsvenkat](https://github.com/gauthsvenkat)
|
||
- [@LoicRiegel](https://github.com/LoicRiegel)
|
||
|
||
## 0.14.3
|
||
|
||
Released on 2025-10-30.
|
||
|
||
### Preview features
|
||
|
||
- Respect `--output-format` with `--watch` ([#21097](https://github.com/astral-sh/ruff/pull/21097))
|
||
- \[`pydoclint`\] Fix false positive on explicit exception re-raising (`DOC501`, `DOC502`) ([#21011](https://github.com/astral-sh/ruff/pull/21011))
|
||
- \[`pyflakes`\] Revert to stable behavior if imports for module lie in alternate branches for `F401` ([#20878](https://github.com/astral-sh/ruff/pull/20878))
|
||
- \[`pylint`\] Implement `stop-iteration-return` (`PLR1708`) ([#20733](https://github.com/astral-sh/ruff/pull/20733))
|
||
- \[`ruff`\] Add support for additional eager conversion patterns (`RUF065`) ([#20657](https://github.com/astral-sh/ruff/pull/20657))
|
||
|
||
### Bug fixes
|
||
|
||
- Fix finding keyword range for clause header after statement ending with semicolon ([#21067](https://github.com/astral-sh/ruff/pull/21067))
|
||
- Fix syntax error false positive on nested alternative patterns ([#21104](https://github.com/astral-sh/ruff/pull/21104))
|
||
- \[`ISC001`\] Fix panic when string literals are unclosed ([#21034](https://github.com/astral-sh/ruff/pull/21034))
|
||
- \[`flake8-django`\] Apply `DJ001` to annotated fields ([#20907](https://github.com/astral-sh/ruff/pull/20907))
|
||
- \[`flake8-pyi`\] Fix `PYI034` to not trigger on metaclasses (`PYI034`) ([#20881](https://github.com/astral-sh/ruff/pull/20881))
|
||
- \[`flake8-type-checking`\] Fix `TC003` false positive with `future-annotations` ([#21125](https://github.com/astral-sh/ruff/pull/21125))
|
||
- \[`pyflakes`\] Fix false positive for `__class__` in lambda expressions within class definitions (`F821`) ([#20564](https://github.com/astral-sh/ruff/pull/20564))
|
||
- \[`pyupgrade`\] Fix false positive for `TypeVar` with default on Python \<3.13 (`UP046`,`UP047`) ([#21045](https://github.com/astral-sh/ruff/pull/21045))
|
||
|
||
### Rule changes
|
||
|
||
- Add missing docstring sections to the numpy list ([#20931](https://github.com/astral-sh/ruff/pull/20931))
|
||
- \[`airflow`\] Extend `airflow.models..Param` check (`AIR311`) ([#21043](https://github.com/astral-sh/ruff/pull/21043))
|
||
- \[`airflow`\] Warn that `airflow....DAG.create_dagrun` has been removed (`AIR301`) ([#21093](https://github.com/astral-sh/ruff/pull/21093))
|
||
- \[`refurb`\] Preserve digit separators in `Decimal` constructor (`FURB157`) ([#20588](https://github.com/astral-sh/ruff/pull/20588))
|
||
|
||
### Server
|
||
|
||
- Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics ([#21105](https://github.com/astral-sh/ruff/pull/21105))
|
||
|
||
### Documentation
|
||
|
||
- \[`flake8-bandit`\] Fix correct example for `S308` ([#21128](https://github.com/astral-sh/ruff/pull/21128))
|
||
|
||
### Other changes
|
||
|
||
- Clearer error message when `line-length` goes beyond threshold ([#21072](https://github.com/astral-sh/ruff/pull/21072))
|
||
|
||
### Contributors
|
||
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@jvacek](https://github.com/jvacek)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@augustelalande](https://github.com/augustelalande)
|
||
- [@prakhar1144](https://github.com/prakhar1144)
|
||
- [@TaKO8Ki](https://github.com/TaKO8Ki)
|
||
- [@dylwil3](https://github.com/dylwil3)
|
||
- [@fatelei](https://github.com/fatelei)
|
||
- [@ShaharNaveh](https://github.com/ShaharNaveh)
|
||
- [@Lee-W](https://github.com/Lee-W)
|
||
|
||
## 0.14.2
|
||
|
||
Released on 2025-10-23.
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-gettext`\] Resolve qualified names and built-in bindings (`INT001`, `INT002`, `INT003`) ([#19045](https://github.com/astral-sh/ruff/pull/19045))
|
||
|
||
### Bug fixes
|
||
|
||
- Avoid reusing nested, interpolated quotes before Python 3.12 ([#20930](https://github.com/astral-sh/ruff/pull/20930))
|
||
- Catch syntax errors in nested interpolations before Python 3.12 ([#20949](https://github.com/astral-sh/ruff/pull/20949))
|
||
- \[`fastapi`\] Handle ellipsis defaults in `FAST002` autofix ([#20810](https://github.com/astral-sh/ruff/pull/20810))
|
||
- \[`flake8-simplify`\] Skip `SIM911` when unknown arguments are present ([#20697](https://github.com/astral-sh/ruff/pull/20697))
|
||
- \[`pyupgrade`\] Always parenthesize assignment expressions in fix for `f-string` (`UP032`) ([#21003](https://github.com/astral-sh/ruff/pull/21003))
|
||
- \[`pyupgrade`\] Fix `UP032` conversion for decimal ints with underscores ([#21022](https://github.com/astral-sh/ruff/pull/21022))
|
||
- \[`fastapi`\] Skip autofix for keyword and `__debug__` path params (`FAST003`) ([#20960](https://github.com/astral-sh/ruff/pull/20960))
|
||
|
||
### Rule changes
|
||
|
||
- \[`flake8-bugbear`\] Skip `B905` and `B912` for fewer than two iterables and no starred arguments ([#20998](https://github.com/astral-sh/ruff/pull/20998))
|
||
- \[`ruff`\] Use `DiagnosticTag` for more `pyflakes` and `pandas` rules ([#20801](https://github.com/astral-sh/ruff/pull/20801))
|
||
|
||
### CLI
|
||
|
||
- Improve JSON output from `ruff rule` ([#20168](https://github.com/astral-sh/ruff/pull/20168))
|
||
|
||
### Documentation
|
||
|
||
- Add source to testimonial ([#20971](https://github.com/astral-sh/ruff/pull/20971))
|
||
- Document when a rule was added ([#21035](https://github.com/astral-sh/ruff/pull/21035))
|
||
|
||
### Other changes
|
||
|
||
- [syntax-errors] Name is parameter and global ([#20426](https://github.com/astral-sh/ruff/pull/20426))
|
||
- [syntax-errors] Alternative `match` patterns bind different names ([#20682](https://github.com/astral-sh/ruff/pull/20682))
|
||
|
||
### Contributors
|
||
|
||
- [@hengky-kurniawan-1](https://github.com/hengky-kurniawan-1)
|
||
- [@ShalokShalom](https://github.com/ShalokShalom)
|
||
- [@robsdedude](https://github.com/robsdedude)
|
||
- [@LoicRiegel](https://github.com/LoicRiegel)
|
||
- [@TaKO8Ki](https://github.com/TaKO8Ki)
|
||
- [@dylwil3](https://github.com/dylwil3)
|
||
- [@11happy](https://github.com/11happy)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
|
||
## 0.14.1
|
||
|
||
Released on 2025-10-16.
|
||
|
||
### Preview features
|
||
|
||
- [formatter] Remove parentheses around multiple exception types on Python 3.14+ ([#20768](https://github.com/astral-sh/ruff/pull/20768))
|
||
- \[`flake8-bugbear`\] Omit annotation in preview fix for `B006` ([#20877](https://github.com/astral-sh/ruff/pull/20877))
|
||
- \[`flake8-logging-format`\] Avoid dropping implicitly concatenated pieces in the `G004` fix ([#20793](https://github.com/astral-sh/ruff/pull/20793))
|
||
- \[`pydoclint`\] Implement `docstring-extraneous-parameter` (`DOC102`) ([#20376](https://github.com/astral-sh/ruff/pull/20376))
|
||
- \[`pyupgrade`\] Extend `UP019` to detect `typing_extensions.Text` (`UP019`) ([#20825](https://github.com/astral-sh/ruff/pull/20825))
|
||
- \[`pyupgrade`\] Fix false negative for `TypeVar` with default argument in `non-pep695-generic-class` (`UP046`) ([#20660](https://github.com/astral-sh/ruff/pull/20660))
|
||
|
||
### Bug fixes
|
||
|
||
- Fix false negatives in `Truthiness::from_expr` for lambdas, generators, and f-strings ([#20704](https://github.com/astral-sh/ruff/pull/20704))
|
||
- Fix syntax error false positives for escapes and quotes in f-strings ([#20867](https://github.com/astral-sh/ruff/pull/20867))
|
||
- Fix syntax error false positives on parenthesized context managers ([#20846](https://github.com/astral-sh/ruff/pull/20846))
|
||
- \[`fastapi`\] Fix false positives for path parameters that FastAPI doesn't recognize (`FAST003`) ([#20687](https://github.com/astral-sh/ruff/pull/20687))
|
||
- \[`flake8-pyi`\] Fix operator precedence by adding parentheses when needed (`PYI061`) ([#20508](https://github.com/astral-sh/ruff/pull/20508))
|
||
- \[`ruff`\] Suppress diagnostic for f-string interpolations with debug text (`RUF010`) ([#20525](https://github.com/astral-sh/ruff/pull/20525))
|
||
|
||
### Rule changes
|
||
|
||
- \[`airflow`\] Add warning to `airflow.datasets.DatasetEvent` usage (`AIR301`) ([#20551](https://github.com/astral-sh/ruff/pull/20551))
|
||
- \[`flake8-bugbear`\] Mark `B905` and `B912` fixes as unsafe ([#20695](https://github.com/astral-sh/ruff/pull/20695))
|
||
- Use `DiagnosticTag` for more rules - changes display in editors ([#20758](https://github.com/astral-sh/ruff/pull/20758),[#20734](https://github.com/astral-sh/ruff/pull/20734))
|
||
|
||
### Documentation
|
||
|
||
- Update Python compatibility from 3.13 to 3.14 in README.md ([#20852](https://github.com/astral-sh/ruff/pull/20852))
|
||
- Update `lint.flake8-type-checking.quoted-annotations` docs ([#20765](https://github.com/astral-sh/ruff/pull/20765))
|
||
- Update setup instructions for Zed 0.208.0+ ([#20902](https://github.com/astral-sh/ruff/pull/20902))
|
||
- \[`flake8-datetimez`\] Clarify docs for several rules ([#20778](https://github.com/astral-sh/ruff/pull/20778))
|
||
- Fix typo in `RUF015` description ([#20873](https://github.com/astral-sh/ruff/pull/20873))
|
||
|
||
### Other changes
|
||
|
||
- Reduce binary size ([#20863](https://github.com/astral-sh/ruff/pull/20863))
|
||
- Improved error recovery for unclosed strings (including f- and t-strings) ([#20848](https://github.com/astral-sh/ruff/pull/20848))
|
||
|
||
### Contributors
|
||
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@Paillat-dev](https://github.com/Paillat-dev)
|
||
- [@terror](https://github.com/terror)
|
||
- [@pieterh-oai](https://github.com/pieterh-oai)
|
||
- [@MichaReiser](https://github.com/MichaReiser)
|
||
- [@TaKO8Ki](https://github.com/TaKO8Ki)
|
||
- [@ageorgou](https://github.com/ageorgou)
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@mgaitan](https://github.com/mgaitan)
|
||
- [@augustelalande](https://github.com/augustelalande)
|
||
- [@dylwil3](https://github.com/dylwil3)
|
||
- [@Lee-W](https://github.com/Lee-W)
|
||
- [@injust](https://github.com/injust)
|
||
- [@CarrotManMatt](https://github.com/CarrotManMatt)
|
||
|
||
## 0.14.0
|
||
|
||
Released on 2025-10-07.
|
||
|
||
### Breaking changes
|
||
|
||
- Update default and latest Python versions for 3.14 ([#20725](https://github.com/astral-sh/ruff/pull/20725))
|
||
|
||
### Preview features
|
||
|
||
- \[`flake8-bugbear`\] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (`B006`) ([#20024](https://github.com/astral-sh/ruff/pull/20024))
|
||
- \[`refurb`\] Add fixes for `FURB101` and `FURB103` ([#20520](https://github.com/astral-sh/ruff/pull/20520))
|
||
- \[`ruff`\] Extend `FA102` with listed PEP 585-compatible APIs ([#20659](https://github.com/astral-sh/ruff/pull/20659))
|
||
|
||
### Bug fixes
|
||
|
||
- \[`flake8-annotations`\] Fix return type annotations to handle shadowed builtin symbols (`ANN201`, `ANN202`, `ANN204`, `ANN205`, `ANN206`) ([#20612](https://github.com/astral-sh/ruff/pull/20612))
|
||
- \[`flynt`\] Fix f-string quoting for mixed quote joiners (`FLY002`) ([#20662](https://github.com/astral-sh/ruff/pull/20662))
|
||
- \[`isort`\] Fix inserting required imports before future imports (`I002`) ([#20676](https://github.com/astral-sh/ruff/pull/20676))
|
||
- \[`ruff`\] Handle argfile expansion errors gracefully ([#20691](https://github.com/astral-sh/ruff/pull/20691))
|
||
- \[`ruff`\] Skip `RUF051` if `else`/`elif` block is present ([#20705](https://github.com/astral-sh/ruff/pull/20705))
|
||
- \[`ruff`\] Improve handling of intermixed comments inside from-imports ([#20561](https://github.com/astral-sh/ruff/pull/20561))
|
||
|
||
### Documentation
|
||
|
||
- \[`flake8-comprehensions`\] Clarify fix safety documentation (`C413`) ([#20640](https://github.com/astral-sh/ruff/pull/20640))
|
||
|
||
### Contributors
|
||
|
||
- [@danparizher](https://github.com/danparizher)
|
||
- [@terror](https://github.com/terror)
|
||
- [@TaKO8Ki](https://github.com/TaKO8Ki)
|
||
- [@ntBre](https://github.com/ntBre)
|
||
- [@njhearp](https://github.com/njhearp)
|
||
- [@amyreese](https://github.com/amyreese)
|
||
- [@IDrokin117](https://github.com/IDrokin117)
|
||
- [@chirizxc](https://github.com/chirizxc)
|
||
|
||
## 0.13.x
|
||
|
||
See [changelogs/0.13.x](./changelogs/0.13.x.md)
|
||
|
||
## 0.12.x
|
||
|
||
See [changelogs/0.12.x](./changelogs/0.12.x.md)
|
||
|
||
## 0.11.x
|
||
|
||
See [changelogs/0.11.x](./changelogs/0.11.x.md)
|
||
|
||
## 0.10.x
|
||
|
||
See [changelogs/0.10.x](./changelogs/0.10.x.md)
|
||
|
||
## 0.9.x
|
||
|
||
See [changelogs/0.9.x](./changelogs/0.9.x.md)
|
||
|
||
## 0.8.x
|
||
|
||
See [changelogs/0.8.x](./changelogs/0.8.x.md)
|
||
|
||
## 0.7.x
|
||
|
||
See [changelogs/0.7.x](./changelogs/0.7.x.md)
|
||
|
||
## 0.6.x
|
||
|
||
See [changelogs/0.6.x](./changelogs/0.6.x.md)
|
||
|
||
## 0.5.x
|
||
|
||
See [changelogs/0.5.x](./changelogs/0.5.x.md)
|
||
|
||
## 0.4.x
|
||
|
||
See [changelogs/0.4.x](./changelogs/0.4.x.md)
|
||
|
||
## 0.3.x
|
||
|
||
See [changelogs/0.3.x](./changelogs/0.3.x.md)
|
||
|
||
## 0.2.x
|
||
|
||
See [changelogs/0.2.x](./changelogs/0.2.x.md)
|
||
|
||
## 0.1.x
|
||
|
||
See [changelogs/0.1.x](./changelogs/0.1.x.md)
|