Release Notes
Preview features
- Recognize all symbols named
TYPE_CHECKING
for in_type_checking_block
(#15719)
- [
flake8-comprehensions
] Handle builtins at top of file correctly for unnecessary-dict-comprehension-for-iterable
(C420
) (#15837)
- [
flake8-logging
] .exception()
and exc_info=
outside exception handlers (LOG004
, LOG014
) (#15799)
- [
flake8-pyi
] Fix incorrect behaviour of custom-typevar-return-type
preview-mode autofix if typing
was already imported (PYI019
) (#15853)
- [
flake8-pyi
] Fix more complex cases (PYI019
) (#15821)
- [
flake8-pyi
] Make PYI019
autofixable for .py
files in preview mode as well as stubs (#15889)
- [
flake8-pyi
] Remove type parameter correctly when it is the last (PYI019
) (#15854)
- [
pylint
] Fix missing parens in unsafe fix for unnecessary-dunder-call
(PLC2801
) (#15762)
- [
pyupgrade
] Better messages and diagnostic range (UP015
) (#15872)
- [
pyupgrade
] Rename private type parameters in PEP 695 generics (UP049
) (#15862)
- [
refurb
] Also report non-name expressions (FURB169
) (#15905)
- [
refurb
] Mark fix as unsafe if there are comments (FURB171
) (#15832)
- [
ruff
] Classes with mixed type variable style (RUF053
) (#15841)
- [
airflow
] BashOperator
has been moved to airflow.providers.standard.operators.bash.BashOperator
(AIR302
) (#15922)
- [
flake8-pyi
] Add autofix for unused-private-type-var (PYI018
) (#15999)
- [
flake8-pyi
] Significantly improve accuracy of PYI019
if preview mode is enabled (#15888)
Rule changes
- Preserve triple quotes and prefixes for strings (#15818)
- [
flake8-comprehensions
] Skip when TypeError
present from too many (kw)args for C410
,C411
, and C418
(#15838)
- [
flake8-pyi
] Rename PYI019
and improve its diagnostic message (#15885)
- [
pep8-naming
] Ignore @override
methods (N803
) (#15954)
- [
pyupgrade
] Reuse replacement logic from UP046
and UP047
to preserve more comments (UP040
) (#15840)
- [
ruff
] Analyze deferred annotations before enforcing mutable-(data)class-default
and function-call-in-dataclass-default-argument
(RUF008
,RUF009
,RUF012
) (#15921)
- [
pycodestyle
] Exempt sys.path += ...
calls (E402
) (#15980)
Configuration
- Config error only when
flake8-import-conventions
alias conflicts with isort.required-imports
bound name (#15918)
- Workaround Even Better TOML crash related to
allOf
(#15992)
Bug fixes
- [
flake8-comprehensions
] Unnecessary list
comprehension (rewrite as a set
comprehension) (C403
) - Handle extraneous parentheses around list comprehension (#15877)
- [
flake8-comprehensions
] Handle trailing comma in fixes for unnecessary-generator-list/set
(C400
,C401
) (#15929)
- [
flake8-pyi
] Fix several correctness issues with custom-type-var-return-type
(PYI019
) (#15851)
- [
pep8-naming
] Consider any number of leading underscore for N801
(#15988)
- [
pyflakes
] Visit forward annotations in TypeAliasType
as types (F401
) (#15829)
- [
pylint
] Correct min/max auto-fix and suggestion for (PL1730
) (#15930)
- [
refurb
] Handle unparenthesized tuples correctly (FURB122
, FURB142
) (#15953)
- [
refurb
] Avoid None | None
as well as better detection and fix (FURB168
) (#15779)
Documentation
- Add deprecation warning for
ruff-lsp
related settings (#15850)
- Docs (
linter.md
): clarify that Python files are always searched for in subdirectories (#15882)
- Fix a typo in
non_pep695_generic_class.rs
(#15946)
- Improve Docs: Pylint subcategories' codes (#15909)
- Remove non-existing
lint.extendIgnore
editor setting (#15844)
- Update black deviations (#15928)
- Mention
UP049
in UP046
and UP047
, add See also
section to UP040
(#15956)
- Add instance variable examples to
RUF012
(#15982)
- Explain precedence for
ignore
and select
config (#15883)
Contributors
Install ruff 0.9.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.ps1 | iex"
Download ruff 0.9.5