Release Notes
Preview features
- [
flake8-errmsg
] Extend EM101
to support byte strings (#18867)
- [
flake8-use-pathlib
] Add autofix for PTH202
(#18763)
- [
pygrep-hooks
] Add AsyncMock
methods to invalid-mock-access
(PGH005
) (#18547)
- [
pylint
] Ignore __init__.py
files in (PLC0414
) (#18400)
- [
ruff
] Trigger RUF037
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 for exc_info=True
outside logger.exception
(LOG014
) (#18737)
- [
flake8-pytest-style
] Enforce pytest
import for decorators (#18779)
- [
flake8-pytest-style
] Mark autofix for PT001
and PT023
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
] Fix SIM911
autofix creating a syntax error (#18793)
- [
flake8-simplify
] Fix false negatives for shadowed bindings (SIM910
, SIM911
) (#18794)
- [
flake8-simplify
] Preserve original behavior for except ()
and bare except
(SIM105
) (#18213)
- [
flake8-pyi
] Fix PYI041
's fix causing TypeError
with None | None | ...
(#18637)
- [
perflint
] Fix PERF101
autofix creating a syntax error and mark autofix as unsafe if there are comments in the list
call expr (#18803)
- [
perflint
] Fix false negative in PERF401
(#18866)
- [
pylint
] Avoid flattening nested min
/max
when outer call has single argument (PLW3301
) (#16885)
- [
pylint
] Fix PLC2801
autofix creating a syntax error (#18857)
- [
pylint
] Mark PLE0241
autofix as unsafe if there's comments in the base classes (#18832)
- [
pylint
] Suppress PLE2510
/PLE2512
/PLE2513
/PLE2514
/PLE2515
autofix if the text contains an odd number of backslashes (#18856)
- [
refurb
] Detect more exotic float literals in FURB164
(#18925)
- [
refurb
] Fix FURB163
autofix creating a syntax error for yield
expressions (#18756)
- [
refurb
] Mark FURB129
autofix as unsafe if there's comments in the readlines
call (#18858)
- [
ruff
] Fix false positives and negatives in RUF010
(#18690)
- Fix casing of
analyze.direction
variant names (#18892)
Rule changes
- Fix f-string interpolation escaping in generated fixes (#18882)
- [
flake8-return
] Mark RET501
fix unsafe if comments are inside (#18780)
- [
flake8-async
] Fix detection for large integer sleep durations in ASYNC116
rule (#18767)
- [
flake8-async
] Mark autofix for ASYNC115
as unsafe if the call expression contains comments (#18753)
- [
flake8-bugbear
] Mark autofix for B004
as unsafe if the hasattr
call expr contains comments (#18755)
- [
flake8-comprehension
] Mark autofix for C420
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
] Mark F504
/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 exotic NaN
literals in PLW0177
(#18630)
- [
pylint
] Fix PLC1802
autofix creating a syntax error and mark autofix as unsafe if there's comments in the len
call (#18836)
- [
pyupgrade
] Extend version detection to include sys.version_info.major
(UP036
) (#18633)
- [
ruff
] Add lint rule RUF064
for calling chmod
with non-octal integers (#18541)
- [
ruff
] Added cls.__dict__.get('__annotations__')
check (RUF063
) (#18233)
- [
ruff
] Frozen dataclass
default should be valid (RUF009
) (#18735)
Server
- Consider virtual path for various server actions (#18910)
Documentation
- Add fix safety sections (#18940,#18841,#18802,#18837,#18800,#18415,#18853,#18842)
- Use updated pre-commit id (#18718)
- [
perflint
] Small docs improvement to PERF401
(#18786)
- [
pyupgrade
]: Use super()
, not __super__
in error messages (UP008
) (#18743)
- [
flake8-pie
] Small docs fix to PIE794
(#18829)
- [
flake8-pyi
] Correct collections-named-tuple
example to use PascalCase assignment (#16884)
- [
flake8-pie
] Add note on type checking benefits to unnecessary-dict-kwargs
(PIE804
) (#18666)
- [
pycodestyle
] Clarify PEP 8 relationship to whitespace-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 to LOG002
(#18840)
- [
pyupgrade
] Add fix safety section to UP010
(#18838)
Contributors
Install ruff 0.12.1
Install prebuilt binaries via shell script
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
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-installer.ps1 | iex"
Download ruff 0.12.1