Release Notes
Preview features
- [
flake8-datetimez
] Detect usages ofdatetime.max
/datetime.min
(DTZ901
) (#14288) - [
flake8-logging
] Implementroot-logger-calls
(LOG015
) (#14302) - [
flake8-no-pep420
] Detect empty implicit namespace packages (INP001
) (#14236) - [
flake8-pyi
] Add "replace withSelf
" fix (PYI019
) (#14238) - [
perflint
] Implement quick-fix formanual-list-comprehension
(PERF401
) (#13919) - [
pylint
] Implementshallow-copy-environ
(W1507
) (#14241) - [
ruff
] Implementnone-not-at-end-of-union
(RUF036
) (#14314) - [
ruff
] Implementationunsafe-markup-call
fromflake8-markupsafe
plugin (RUF035
) (#14224) - [
ruff
] Report problems forattrs
dataclasses (RUF008
,RUF009
) (#14327)
Rule changes
- [
flake8-boolean-trap
] Exclude dunder methods that define operators (FBT001
) (#14203) - [
flake8-pyi
] Add "replace withSelf
" fix (PYI034
) (#14217) - [
flake8-pyi
] Always autofixduplicate-union-members
(PYI016
) (#14270) - [
flake8-pyi
] Improve autofix for nested and mixed type unions forunnecessary-type-union
(PYI055
) (#14272) - [
flake8-pyi
] Mark fix as unsafe when type annotation contains comments forduplicate-literal-member
(PYI062
) (#14268)
Server
- Use the current working directory to resolve settings from
ruff.configuration
(#14352)
Bug fixes
- Avoid conflicts between
PLC014
(useless-import-alias
) andI002
(missing-required-import
) by consideringlint.isort.required-imports
forPLC014
(#14287) - [
flake8-type-checking
] Skip quoting annotation if it becomes invalid syntax (TCH001
) - [
flake8-pyi
] Avoid usingtyping.Self
in stub files pre-Python 3.11 (PYI034
) (#14230) - [
flake8-pytest-style
] Flagpytest.raises
call with keyword argumentexpected_exception
(PT011
) (#14298) - [
flake8-simplify
] Infer "unknown" truthiness for literal iterables whose items are all unpacks (SIM222
) (#14263) - [
flake8-type-checking
] Fix false positives fortyping.Annotated
(TCH001
) (#14311) - [
pylint
] Allowawait
at the top-level scope of a notebook (PLE1142
) (#14225) - [
pylint
] Fix miscellaneous issues inawait-outside-async
detection (PLE1142
) (#14218) - [
pyupgrade
] Avoid applying PEP 646 rewrites in invalid contexts (UP044
) (#14234) - [
pyupgrade
] Detect permutations in redundant open modes (UP015
) (#14255) - [
refurb
] Avoid triggeringhardcoded-string-charset
for reordered sets (FURB156
) (#14233) - [
refurb
] Further special cases added toverbose-decimal-constructor
(FURB157
) (#14216) - [
refurb
] UseUserString
instead of non-existentUserStr
(FURB189
) (#14209) - [
ruff
] Avoid treating lowercase letters as# noqa
codes (RUF100
) (#14229) - [
ruff
] Do not report whenOptional
has no type arguments (RUF013
) (#14181)
Documentation
- Add "Notebook behavior" section for
F704
,PLE1142
(#14266) - Document comment policy around fix safety (#14300)
Contributors
- @AlexWaygood
- @Daverball
- @Glyphack
- @InSyncWithFoo
- @MichaReiser
- @carljm
- @charliermarsh
- @dhruvmanila
- @dylwil3
- @github-actions
- @harupy
- @nijel
- @pgiraud
- @randolf-scholz
- @renovate
- @sbrugman
- @sharkdp
- @w0nder1ng
Install ruff 0.7.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.7.4/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.7.4/ruff-installer.ps1 | iex"