Release Notes
Preview features
- [
flake8-errmsg
] ExtendEM101
to support byte strings (#18867) - [
flake8-use-pathlib
] Add autofix forPTH202
(#18763) - [
pygrep-hooks
] AddAsyncMock
methods toinvalid-mock-access
(PGH005
) (#18547) - [
pylint
] Ignore__init__.py
files in (PLC0414
) (#18400) - [
ruff
] TriggerRUF037
for empty string and byte strings (#18862) - [formatter] Fix missing blank lines before decorated classes in
.pyi
files (#18888)
Bug fixes
- Avoid generating diagnostics with per-file ignores (#18801)
- Handle parenthesized arguments in
remove_argument
(#18805) - [
flake8-logging
] Avoid false positive forexc_info=True
outsidelogger.exception
(LOG014
) (#18737) - [
flake8-pytest-style
] Enforcepytest
import for decorators (#18779) - [
flake8-pytest-style
] Mark autofix forPT001
andPT023
as unsafe if there's comments in the decorator (#18792) - [
flake8-pytest-style
]PT001
/PT023
fix makes syntax error on parenthesized decorator (#18782) - [
flake8-raise
] Make fix unsafe if it deletes comments (RSE102
) (#18788) - [
flake8-simplify
] FixSIM911
autofix creating a syntax error (#18793) - [
flake8-simplify
] Fix false negatives for shadowed bindings (SIM910
,SIM911
) (#18794) - [
flake8-simplify
] Preserve original behavior forexcept ()
and bareexcept
(SIM105
) (#18213) - [
flake8-pyi
] FixPYI041
's fix causingTypeError
withNone | None | ...
(#18637) - [
perflint
] FixPERF101
autofix creating a syntax error and mark autofix as unsafe if there are comments in thelist
call expr (#18803) - [
perflint
] Fix false negative inPERF401
(#18866) - [
pylint
] Avoid flattening nestedmin
/max
when outer call has single argument (PLW3301
) (#16885) - [
pylint
] FixPLC2801
autofix creating a syntax error (#18857) - [
pylint
] MarkPLE0241
autofix as unsafe if there's comments in the base classes (#18832) - [
pylint
] SuppressPLE2510
/PLE2512
/PLE2513
/PLE2514
/PLE2515
autofix if the text contains an odd number of backslashes (#18856) - [
refurb
] Detect more exotic float literals inFURB164
(#18925) - [
refurb
] FixFURB163
autofix creating a syntax error foryield
expressions (#18756) - [
refurb
] MarkFURB129
autofix as unsafe if there's comments in thereadlines
call (#18858) - [
ruff
] Fix false positives and negatives inRUF010
(#18690) - Fix casing of
analyze.direction
variant names (#18892)
Rule changes
- Fix f-string interpolation escaping in generated fixes (#18882)
- [
flake8-return
] MarkRET501
fix unsafe if comments are inside (#18780) - [
flake8-async
] Fix detection for large integer sleep durations inASYNC116
rule (#18767) - [
flake8-async
] Mark autofix forASYNC115
as unsafe if the call expression contains comments (#18753) - [
flake8-bugbear
] Mark autofix forB004
as unsafe if thehasattr
call expr contains comments (#18755) - [
flake8-comprehension
] Mark autofix forC420
as unsafe if there's comments inside the dict comprehension (#18768) - [
flake8-comprehensions
] Handle template strings for comprehension fixes (#18710) - [
flake8-future-annotations
] Add autofix (FA100
) (#18903) - [
pyflakes
] MarkF504
/F522
/F523
autofix as unsafe if there's a call with side effect (#18839) - [
pylint
] Allow fix with comments and document performance implications (PLW3301
) (#18936) - [
pylint
] Detect more exoticNaN
literals inPLW0177
(#18630) - [
pylint
] FixPLC1802
autofix creating a syntax error and mark autofix as unsafe if there's comments in thelen
call (#18836) - [
pyupgrade
] Extend version detection to includesys.version_info.major
(UP036
) (#18633) - [
ruff
] Add lint ruleRUF064
for callingchmod
with non-octal integers (#18541) - [
ruff
] Addedcls.__dict__.get('__annotations__')
check (RUF063
) (#18233) - [
ruff
] Frozendataclass
default should be valid (RUF009
) (#18735)
Server
- Consider virtual path for various server actions (#18910)
Documentation
- Add fix safety sections (#[18940](https://github.com/astral-sh/ruff/pull/18940),[#18841](https://github.com/astral-sh/ruff/pull/18841),[#18802](https://github.com/astral-sh/ruff/pull/18802),[#18837](https://github.com/astral-sh/ruff/pull/18837),[#18800](https://github.com/astral-sh/ruff/pull/18800),[#18415](https://github.com/astral-sh/ruff/pull/18415),[#18853](https://github.com/astral-sh/ruff/pull/18853),[#18842](https://github.com/18940,#18841,#18802,#18837,#18800,#18415,#18853,/issues/18842))
- Use updated pre-commit id (#18718)
- [
perflint
] Small docs improvement toPERF401
(#18786) - [
pyupgrade
]: Usesuper()
, not__super__
in error messages (UP008
) (#18743) - [
flake8-pie
] Small docs fix toPIE794
(#18829) - [
flake8-pyi
] Correctcollections-named-tuple
example to use PascalCase assignment (#16884) - [
flake8-pie
] Add note on type checking benefits tounnecessary-dict-kwargs
(PIE804
) (#18666) - [
pycodestyle
] Clarify PEP 8 relationship towhitespace-around-operator
rules (#18870)
Other changes
- Disallow newlines in format specifiers of single quoted f- or t-strings (#18708)
- [
flake8-logging
] Add fix safety section toLOG002
(#18840) - [
pyupgrade
] Add fix safety section toUP010
(#18838)
Contributors
- @AlexWaygood
- @Andrej730
- @BurntSushi
- @GideonBear
- @InSyncWithFoo
- @JosiahKane
- @LaBatata101
- @LyricalToxic
- @MeGaGiGaGon
- @MichaReiser
- @RazerM
- @VascoSch92
- @alpaylan
- @carljm
- @charliermarsh
- @chirizxc
- @danparizher
- @dcreager
- @dericcrago
- @dhruvmanila
- @dylwil3
- @gopoto
- @hmvp
- @krikera
- @lubaskinc0de
- @mashehu
- @med1844
- @njhearp
- @ntBre
- @renovate
- @robsdedude
- @sharkdp
- @sobolevn
- @suneettipirneni
- @yunchipang
- @zanieb
Install ruff 0.12.1
Install prebuilt binaries via shell script
:::sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
:::sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-installer.ps1 | iex"