mirror of
https://github.com/astral-sh/ruff
synced 2026-01-21 13:30:49 -05:00
31 KiB
31 KiB
Changelog
0.14.13
Released on 2026-01-15.
This is a follow-up release to 0.14.12. Because of an issue publishing the WASM packages, there is no GitHub release or Git tag for 0.14.12, although the package was published to PyPI. The contents of the 0.14.13 release are identical to 0.14.12.
0.14.12
Released on 2026-01-15.
Preview features
- [
flake8-blind-except] Allow more logging methods (BLE001) (#22057) - [
ruff] Respectlint.pydocstyle.property-decoratorsinRUF066(#22515)
Bug fixes
- Fix configuration path in
--show-settings(#22478) - Respect
fmt: skipfor multiple statements on the same logical line (#22119)
Rule changes
- [
pydocstyle] Update Rust crate imperative to v1.0.7 (D401) (#22519) - [
isort] Insert imports in alphabetical order (I002) (#22493)
Documentation
- Add llms.txt support for documentation (#22463)
- Use prek in documentation and CI (#22505)
- [
flake8-pytest-style] Addcheckparameter example toPT017docs (#22546) - [
ruff] Make example error out-of-the-box (RUF103) (#22558) - [
ruff] documentRUF100trailing comment fix behavior (#22479)
Other changes
- wasm: Require explicit logging initialization (#22587)
Contributors
- @terror
- @harupy
- @Jkhall81
- @dhruvmanila
- @lubaskinc0de
- @zanieb
- @MeGaGiGaGon
- @charliermarsh
- @renovate
- @dylwil3
- @MichaReiser
- @11happy
0.14.11
Released on 2026-01-08.
Preview features
- Consolidate diagnostics for matched disable/enable suppression comments (#22099)
- Report diagnostics for invalid/unmatched range suppression comments (#21908)
- [
airflow] Passing positional argument intoairflow.lineage.hook.HookLineageCollector.create_assetis not allowed (AIR303) (#22046) - [
refurb] MarkFURB192fix as always unsafe (#22210) - [
ruff] Addnon-empty-init-module(RUF067) (#22143)
Bug fixes
- Fix GitHub format for multi-line diagnostics (#22108)
- [
flake8-unused-arguments] Mark**kwargsinTypeVaras used (ARG001) (#22214)
Rule changes
- Add
help:subdiagnostics for several Ruff rules that can sometimes appear to disagree withty(#22331) - [
pylint] DemotePLW1510fix to display-only (#22318) - [
pylint] Ignore identical members (PLR1714) (#22220) - [
pylint] Improve diagnostic range forPLC0206(#22312) - [
ruff] Improve fix title forRUF102invalid rule code (#22100) - [
flake8-simplify]: Avoid unnecessary builtins import forSIM105(#22358)
Configuration
- Allow Python 3.15 as valid
target-versionvalue in preview (#22419) - Check
required-versionbefore parsing rules (#22410) - Include configured
srcdirectories when resolving graphs (#22451)
Documentation
- Update
T201suggestion to not use root logger to satisfyLOG015(#22059) - Fix
iterexample in unsafe fixes doc (#22118) - [
flake8_print] better suggestion forbasicConfiginT201docs (#22101) - [
pylint] Restore the fix safety docs forPLW0133(#22211) - Fix Jupyter notebook discovery info for editors (#22447)
Contributors
- @charliermarsh
- @ntBre
- @cenviity
- @njhearp
- @cbachhuber
- @jelle-openai
- @AlexWaygood
- @ValdonVitija
- @BurntSushi
- @Jkhall81
- @PeterJCLaw
- @harupy
- @amyreese
- @sjyangkevin
- @woodruffw
0.14.10
Released on 2025-12-18.
Preview features
- [formatter] Fluent formatting of method chains (#21369)
- [formatter] Keep lambda parameters on one line and parenthesize the body if it expands (#21385)
- [
flake8-implicit-str-concat] New rule to prevent implicit string concatenation in collections (ISC004) (#21972) - [
flake8-use-pathlib] Make fixes unsafe when types change in compound statements (PTH104,PTH105,PTH109,PTH115) (#22009) - [
refurb] Extend support forPath.open(FURB101,FURB103) (#21080)
Bug fixes
- [
pyupgrade] Fix parsing named Unicode escape sequences (UP032) (#21901)
Rule changes
- [
eradicate] Ignoreruff:disableandruff:enablecomments inERA001(#22038) - [
flake8-pytest-style] Allowmatchandcheckkeyword arguments without an expected exception type (PT010) (#21964) - [syntax-errors] Annotated name cannot be global (#20868)
Documentation
- Add
uvandtyto the Ruff README (#21996) - Document known lambda formatting deviations from Black (#21954)
- Update
setup.md(#22024) - [
flake8-bandit] Fix broken link (S704) (#22039)
Other changes
- Fix playground Share button showing "Copied!" before clipboard copy completes (#21942)
Contributors
- @dylwil3
- @charliecloudberry
- @charliermarsh
- @chirizxc
- @ntBre
- @zanieb
- @amyreese
- @hauntsaninja
- @11happy
- @mahiro72
- @MichaReiser
- @phongddo
- @PeterJCLaw
0.14.9
Released on 2025-12-11.
Preview features
- [
ruff] NewRUF100diagnostics for unused range suppressions (#21783) - [
pylint] Detect subclasses of builtin exceptions (PLW0133) (#21382)
Bug fixes
- Fix comment placement in lambda parameters (#21868)
- Skip over trivia tokens after re-lexing (#21895)
- [
flake8-bandit] Fix false positive when using non-standardCSafeLoaderpath (S506). (#21830) - [
flake8-bugbear] Accept immutable slice default arguments (B008) (#21823)
Rule changes
- [
pydocstyle] SuppressD417for parameters withUnpackannotations (#21816)
Performance
- Use
memchrfor computing line indexes (#21838)
Documentation
- Document
*.pywis included by default in preview (#21885) - Document range suppressions, reorganize suppression docs (#21884)
- Update mkdocs-material to 9.7.0 (Insiders now free) (#21797)
Contributors
0.14.8
Released on 2025-12-04.
Preview features
- [
flake8-bugbear] Catchyieldexpressions within other statements (B901) (#21200) - [
flake8-use-pathlib] Mark fixes unsafe for return type changes (PTH104,PTH105,PTH109,PTH115) (#21440)
Bug fixes
- Fix syntax error false positives for
awaitoutside functions (#21763) - [
flake8-simplify] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (SIM222,SIM223) (#21479)
Documentation
- Suggest using
--output-fileoption in GitLab integration (#21706)
Other changes
- [syntax-error] Default type parameter followed by non-default type parameter (#21657)
Contributors
0.14.7
Released on 2025-11-28.
Preview features
- [
flake8-bandit] Handle string literal bindings in suspicious-url-open-usage (S310) (#21469) - [
pylint] FixPLR1708false positives on nested functions (#21177) - [
pylint] Fix suppression for empty dict without tuple key annotation (PLE1141) (#21290) - [
ruff] Add ruleRUF066to detect unnecessary class properties (#21535) - [
ruff] Catch more dummy variable uses (RUF052) (#19799)
Bug fixes
- [server] Set severity for non-rule diagnostics (#21559)
- [
flake8-implicit-str-concat] Avoid invalid fix in (ISC003) (#21517) - [
parser] Fix panic when parsing IPython escape command expressions (#21480)
CLI
- Show partial fixability indicator in statistics output (#21513)
Contributors
- @mikeleppane
- @senekor
- @ShaharNaveh
- @JumboBear
- @prakhar1144
- @tsvikas
- @danparizher
- @chirizxc
- @AlexWaygood
- @MichaReiser
0.14.6
Released on 2025-11-21.
Preview features
- [
flake8-bandit] Support new PySNMP API paths (S508,S509) (#21374)
Bug fixes
- Adjust own-line comment placement between branches (#21185)
- Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value (#20418)
- Fix panic when formatting comments in unary expressions (#21501)
- Respect
fmt: skipfor compound statements on a single line (#20633) - [
refurb] FixFURB103autofix (#21454) - [
ruff] Fix false positive for complex conversion specifiers inlogging-eager-conversion(RUF065) (#21464)
Rule changes
- [
ruff] Avoid false positive onClassVarreassignment (RUF012) (#21478)
CLI
- Render hyperlinks for lint errors (#21514)
- Add a
ruff analyzeoption to skip over imports inTYPE_CHECKINGblocks (#21472)
Documentation
- Limit
eglot-formathook to eglot-managed Python buffers (#21459) - Mention
force-excludein "Configuration > Python file discovery" (#21500)
Contributors
0.14.5
Released on 2025-11-13.
Preview features
- [
flake8-simplify] ApplySIM113when index variable is of typeint(#21395) - [
pydoclint] Fix false positive when Sphinx directives follow a "Raises" section (DOC502) (#20535) - [
pydoclint] Support NumPy-style comma-separated parameters (DOC102) (#20972) - [
refurb] Auto-fix annotated assignments (FURB101) (#21278) - [
ruff] Ignorestr()when not used for simple conversion (RUF065) (#21330)
Bug fixes
- Fix syntax error false positive on alternative
matchpatterns (#21362) - [
flake8-simplify] Fix false positive for iterable initializers with generator arguments (SIM222) (#21187) - [
pyupgrade] Fix false positive on relative imports from local.builtinsmodule (UP029) (#21309) - [
pyupgrade] Consistently set the deprecated tag (UP035) (#21396)
Rule changes
- [
refurb] Detect empty f-strings (FURB105) (#21348)
CLI
- Add option to provide a reason to
--add-noqa(#21294) - Add upstream linter URL to
ruff linter --output-format=json(#21316) - Add color to
--help(#21337)
Documentation
- Add a new "Opening a PR" section to the contribution guide (#21298)
- Added the PyScripter IDE to the list of "Who is using Ruff?" (#21402)
- Update PyCharm setup instructions (#21409)
- [
flake8-annotations] Add link toallow-star-arg-anyoption (ANN401) (#21326)
Other changes
- [
configuration] Improve error message whenline-lengthexceedsu16::MAX(#21329)
Contributors
- @njhearp
- @11happy
- @hugovk
- @Gankra
- @ntBre
- @pyscripter
- @danparizher
- @MichaReiser
- @henryiii
- @charliecloudberry
0.14.4
Released on 2025-11-06.
Preview features
- [formatter] Allow newlines after function headers without docstrings (#21110)
- [formatter] Avoid extra parentheses for long
matchpatterns withascaptures (#21176) - [
refurb] Expand fix safety for keyword arguments andDecimals (FURB164) (#21259) - [
refurb] Preserve argument ordering in autofix (FURB103) (#20790)
Bug fixes
- [server] Fix missing diagnostics for notebooks (#21156)
- [
flake8-bugbear] Ignore non-NFKC attribute names inB009andB010(#21131) - [
refurb] Fix false negative for underscores before sign inDecimalconstructor (FURB157) (#21190) - [
ruff] Fix false positives on starred arguments (RUF057) (#21256)
Rule changes
- [
airflow] extend deprecated argumentconcurrencyinairflow..DAG(AIR301) (#21220)
Documentation
- Improve
extenddocs (#21135) - [
flake8-comprehensions] Fix typo inC416documentation (#21184) - Revise Ruff setup instructions for Zed editor (#20935)
Other changes
- Make
ruff analyze graphwork with jupyter notebooks (#21161)
Contributors
- @chirizxc
- @Lee-W
- @musicinmybrain
- @MichaReiser
- @tjkuson
- @danparizher
- @renovate
- @ntBre
- @gauthsvenkat
- @LoicRiegel
0.14.3
Released on 2025-10-30.
Preview features
- Respect
--output-formatwith--watch(#21097) - [
pydoclint] Fix false positive on explicit exception re-raising (DOC501,DOC502) (#21011) - [
pyflakes] Revert to stable behavior if imports for module lie in alternate branches forF401(#20878) - [
pylint] Implementstop-iteration-return(PLR1708) (#20733) - [
ruff] Add support for additional eager conversion patterns (RUF065) (#20657)
Bug fixes
- Fix finding keyword range for clause header after statement ending with semicolon (#21067)
- Fix syntax error false positive on nested alternative patterns (#21104)
- [
ISC001] Fix panic when string literals are unclosed (#21034) - [
flake8-django] ApplyDJ001to annotated fields (#20907) - [
flake8-pyi] FixPYI034to not trigger on metaclasses (PYI034) (#20881) - [
flake8-type-checking] FixTC003false positive withfuture-annotations(#21125) - [
pyflakes] Fix false positive for__class__in lambda expressions within class definitions (F821) (#20564) - [
pyupgrade] Fix false positive forTypeVarwith default on Python <3.13 (UP046,UP047) (#21045)
Rule changes
- Add missing docstring sections to the numpy list (#20931)
- [
airflow] Extendairflow.models..Paramcheck (AIR311) (#21043) - [
airflow] Warn thatairflow....DAG.create_dagrunhas been removed (AIR301) (#21093) - [
refurb] Preserve digit separators inDecimalconstructor (FURB157) (#20588)
Server
- Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics (#21105)
Documentation
- [
flake8-bandit] Fix correct example forS308(#21128)
Other changes
- Clearer error message when
line-lengthgoes beyond threshold (#21072)
Contributors
- @danparizher
- @jvacek
- @ntBre
- @augustelalande
- @prakhar1144
- @TaKO8Ki
- @dylwil3
- @fatelei
- @ShaharNaveh
- @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)
Bug fixes
- Avoid reusing nested, interpolated quotes before Python 3.12 (#20930)
- Catch syntax errors in nested interpolations before Python 3.12 (#20949)
- [
fastapi] Handle ellipsis defaults inFAST002autofix (#20810) - [
flake8-simplify] SkipSIM911when unknown arguments are present (#20697) - [
pyupgrade] Always parenthesize assignment expressions in fix forf-string(UP032) (#21003) - [
pyupgrade] FixUP032conversion for decimal ints with underscores (#21022) - [
fastapi] Skip autofix for keyword and__debug__path params (FAST003) (#20960)
Rule changes
- [
flake8-bugbear] SkipB905andB912for fewer than two iterables and no starred arguments (#20998) - [
ruff] UseDiagnosticTagfor morepyflakesandpandasrules (#20801)
CLI
- Improve JSON output from
ruff rule(#20168)
Documentation
Other changes
- [syntax-errors] Name is parameter and global (#20426)
- [syntax-errors] Alternative
matchpatterns bind different names (#20682)
Contributors
0.14.1
Released on 2025-10-16.
Preview features
- [formatter] Remove parentheses around multiple exception types on Python 3.14+ (#20768)
- [
flake8-bugbear] Omit annotation in preview fix forB006(#20877) - [
flake8-logging-format] Avoid dropping implicitly concatenated pieces in theG004fix (#20793) - [
pydoclint] Implementdocstring-extraneous-parameter(DOC102) (#20376) - [
pyupgrade] ExtendUP019to detecttyping_extensions.Text(UP019) (#20825) - [
pyupgrade] Fix false negative forTypeVarwith default argument innon-pep695-generic-class(UP046) (#20660)
Bug fixes
- Fix false negatives in
Truthiness::from_exprfor lambdas, generators, and f-strings (#20704) - Fix syntax error false positives for escapes and quotes in f-strings (#20867)
- Fix syntax error false positives on parenthesized context managers (#20846)
- [
fastapi] Fix false positives for path parameters that FastAPI doesn't recognize (FAST003) (#20687) - [
flake8-pyi] Fix operator precedence by adding parentheses when needed (PYI061) (#20508) - [
ruff] Suppress diagnostic for f-string interpolations with debug text (RUF010) (#20525)
Rule changes
- [
airflow] Add warning toairflow.datasets.DatasetEventusage (AIR301) (#20551) - [
flake8-bugbear] MarkB905andB912fixes as unsafe (#20695) - Use
DiagnosticTagfor more rules - changes display in editors (#20758,#20734)
Documentation
- Update Python compatibility from 3.13 to 3.14 in README.md (#20852)
- Update
lint.flake8-type-checking.quoted-annotationsdocs (#20765) - Update setup instructions for Zed 0.208.0+ (#20902)
- [
flake8-datetimez] Clarify docs for several rules (#20778) - Fix typo in
RUF015description (#20873)
Other changes
- Reduce binary size (#20863)
- Improved error recovery for unclosed strings (including f- and t-strings) (#20848)
Contributors
- @ntBre
- @Paillat-dev
- @terror
- @pieterh-oai
- @MichaReiser
- @TaKO8Ki
- @ageorgou
- @danparizher
- @mgaitan
- @augustelalande
- @dylwil3
- @Lee-W
- @injust
- @CarrotManMatt
0.14.0
Released on 2025-10-07.
Breaking changes
- Update default and latest Python versions for 3.14 (#20725)
Preview features
- [
flake8-bugbear] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (B006) (#20024) - [
refurb] Add fixes forFURB101andFURB103(#20520) - [
ruff] ExtendFA102with listed PEP 585-compatible APIs (#20659)
Bug fixes
- [
flake8-annotations] Fix return type annotations to handle shadowed builtin symbols (ANN201,ANN202,ANN204,ANN205,ANN206) (#20612) - [
flynt] Fix f-string quoting for mixed quote joiners (FLY002) (#20662) - [
isort] Fix inserting required imports before future imports (I002) (#20676) - [
ruff] Handle argfile expansion errors gracefully (#20691) - [
ruff] SkipRUF051ifelse/elifblock is present (#20705) - [
ruff] Improve handling of intermixed comments inside from-imports (#20561)
Documentation
- [
flake8-comprehensions] Clarify fix safety documentation (C413) (#20640)
Contributors
0.13.x
0.12.x
0.11.x
0.10.x
0.9.x
See changelogs/0.9.x
0.8.x
See changelogs/0.8.x
0.7.x
See changelogs/0.7.x
0.6.x
See changelogs/0.6.x
0.5.x
See changelogs/0.5.x
0.4.x
See changelogs/0.4.x
0.3.x
See changelogs/0.3.x
0.2.x
See changelogs/0.2.x
0.1.x
See changelogs/0.1.x