Releases: astral-sh/ruff
Releases · astral-sh/ruff
0.7.4
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"
Download ruff 0.7.4
File | Platform | Checksum |
---|---|---|
ruff-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
ruff-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
ruff-aarch64-pc-windows-msvc.zip | ARM64 Windows | checksum |
ruff-i686-pc-windows-msvc.zip | x86 Windows | checksum |
ruff-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
ruff-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
ruff-i686-unknown-linux-gnu.tar.gz | x86 Linux | checksum |
ruff-powerpc64-unknown-linux-gnu.tar.gz | PPC64 Linux | checksum |
ruff-powerpc64le-unknown-linux-gnu.tar.gz | PPC64LE Linux | checksum |
ruff-s390x-unknown-linux-gnu.tar.gz | S390x Linux | checksum |
ruff-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
ruff-armv7-unknown-linux-gnueabihf.tar.gz | ARMv7 Linux | checksum |
ruff-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
ruff-i686-unknown-linux-musl.tar.gz | x86 MUSL Linux | checksum |
ruff-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
[ruff-arm-unknown-linux-musleabihf.tar.gz](h... |
0.7.3
Release Notes
Preview features
- Formatter: Disallow single-line implicit concatenated strings (#13928)
- [
flake8-pyi
] Include all Python file types forPYI006
andPYI066
(#14059) - [
flake8-simplify
] Implementsplit-of-static-string
(SIM905
) (#14008) - [
refurb
] Implementsubclass-builtin
(FURB189
) (#14105) - [
ruff
] Improve diagnostic messages and docs (RUF031
,RUF032
,RUF034
) (#14068)
Rule changes
- Detect items that hash to same value in duplicate sets (
B033
,PLC0208
) (#14064) - [
eradicate
] Better detection of IntelliJ language injection comments (ERA001
) (#14094) - [
flake8-pyi
] Add autofix fordocstring-in-stub
(PYI021
) (#14150) - [
flake8-pyi
] Updateduplicate-literal-member
(PYI062
) to alawys provide an autofix (#14188) - [
pyflakes
] Detect items that hash to same value in duplicate dictionaries (F601
) (#14065) - [
ruff
] Fix false positive for decorators (RUF028
) (#14061)
Bug fixes
- Avoid parsing joint rule codes as distinct codes in
# noqa
(#12809) - [
eradicate
] ignore# language=
in commented-out-code rule (ERA001) (#14069) - [
flake8-bugbear
] - do not runmutable-argument-default
on stubs (B006
) (#14058) - [
flake8-builtins
] Skip lambda expressions inbuiltin-argument-shadowing (A002)
(#14144) - [
flake8-comprehension
] Also remove trailing comma while fixingC409
andC419
(#14097) - [
flake8-simplify
] Allowopen
without context manager inreturn
statement (SIM115
) (#14066) - [
pylint
] Respect hash-equivalent literals initeration-over-set
(PLC0208
) (#14063) - [
pylint
] Update known dunder methods for Python 3.13 (PLW3201
) (#14146) - [
pyupgrade
] - ignore kwarg unpacking forUP044
(#14053) - [
refurb
] Parse more exotic decimal strings inverbose-decimal-constructor
(FURB157
) (#14098)
Documentation
- Add links to missing related options within rule documentations (#13971)
- Add rule short code to mkdocs tags to allow searching via rule codes (#14040)
Install ruff 0.7.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.7.3/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.3/ruff-installer.ps1 | iex"
Download ruff 0.7.3
0.7.2
Release Notes
Preview features
- Fix formatting of single with-item with trailing comment (#14005)
- [
pyupgrade
] Add PEP 646Unpack
conversion to*
with fix (UP044
) (#13988)
Rule changes
- Regenerate
known_stdlibs.rs
with stdlibs 2024.10.25 (#13963) - [
flake8-no-pep420
] Skip namespace package enforcement for PEP 723 scripts (INP001
) (#13974)
Server
- Fix server panic when undoing an edit (#14010)
Bug fixes
- Fix issues in discovering ruff in pip build environments (#13881)
- [
flake8-type-checking
] Fix false positive forsingledispatchmethod
(TCH003
) (#13941) - [
flake8-type-checking
] Treat return type ofsingledispatch
as runtime-required (TCH003
) (#13957)
Documentation
- [
flake8-simplify
] Include caveats of enablingif-else-block-instead-of-if-exp
(SIM108
) (#14019)
Install ruff 0.7.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.7.2/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.2/ruff-installer.ps1 | iex"
Download ruff 0.7.2
0.7.1
Release Notes
Preview features
- Fix
E221
andE222
to flag missing or extra whitespace around==
operator (#13890) - Formatter: Alternate quotes for strings inside f-strings in preview (#13860)
- Formatter: Join implicit concatenated strings when they fit on a line (#13663)
- [
pylint
] Restrictiteration-over-set
to only work on sets of literals (PLC0208
) (#13731)
Rule changes
- [
flake8-type-checking
] Support auto-quoting when annotations contain quotes (#11811)
Server
- Avoid indexing the workspace for single-file mode (#13770)
Bug fixes
- Make
ARG002
compatible withEM101
when raisingNotImplementedError
(#13714)
Other changes
- Introduce more Docker tags for Ruff (similar to uv) (#13274)
Contributors
- @Aditya-PS-05
- @AlexWaygood
- @Glyphack
- @Lexxxzy
- @MichaReiser
- @TomerBin
- @Watercycle
- @cake-monotone
- @carljm
- @dhruvmanila
- @diceroll123
- @mihaic
- @ndmitchell
- @pilleye
- @renovate
- @rtpg
- @samypr100
- @sharkdp
Install ruff 0.7.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.7.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.7.1/ruff-installer.ps1 | iex"
Download ruff 0.7.1
0.7.0
Release Notes
Check out the blog post for a migration guide and overview of the changes!
Breaking changes
- The pytest rules
PT001
andPT023
now default to omitting the decorator parentheses when there are no arguments
(#12838, #13292).
This was a change that we attempted to make in Ruff v0.6.0, but only partially made due to an error on our part.
See the blog post for more details. - The
useless-try-except
rule (in ourtryceratops
category) has been recoded fromTRY302
to
TRY203
(#13502). This ensures Ruff's code is consistent with
the same rule in thetryceratops
linter. - The
lint.allow-unused-imports
setting has been removed (#13677). Use
lint.pyflakes.allow-unused-imports
instead.
Formatter preview style
- Normalize implicit concatenated f-string quotes per part (#13539)
Preview linter features
- [
refurb
] implementhardcoded-string-charset
(FURB156) (#13530) - [
refurb
] Count codepoints not bytes forslice-to-remove-prefix-or-suffix (FURB188)
(#13631)
Rule changes
- [
pylint
] MarkPLE1141
fix as unsafe (#13629) - [
flake8-async
] Consider async generators to be "checkpoints" forcancel-scope-no-checkpoint
(ASYNC100
) (#13639) - [
flake8-bugbear
] Do not suggest setting parameterstrict=
toFalse
inB905
diagnostic message (#13656) - [
flake8-todos
] Only flag the word "TODO", not words starting with "todo" (TD006
) (#13640) - [
pycodestyle
] Fix whitespace-related false positives and false negatives inside type-parameter lists (E231
,E251
) (#13704) - [
flake8-simplify
] Stabilize preview behavior forSIM115
so that the rule can detect files
being opened from a wider range of standard-library functions (#12959).
CLI
- Add explanation of fixable in
--statistics
command (#13774)
Bug fixes
- [
pyflakes
] Allowipytest
cell magic (F401
) (#13745) - [
flake8-use-pathlib
] FixPTH123
false positive whenopen
is passed a file descriptor (#13616) - [
flake8-bandit
] Detect patterns from multi line SQL statements (S608
) (#13574) - [
flake8-pyi
] - Fix dropped expressions inPYI030
autofix (#13727)
Contributors
- @AlexWaygood
- @DataEnggNerd
- @Lexxxzy
- @MichaReiser
- @Slyces
- @alex-700
- @autinerd
- @cake-monotone
- @carljm
- @dhruvmanila
- @diceroll123
- @dylwil3
- @github-actions
- @pilleye
- @qdegraaf
- @renovate
- @rtpg
- @sbrugman
- @sharkdp
- @zanieb
Install ruff 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.7.0/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.0/ruff-installer.ps1 | iex"
Download ruff 0.7.0
0.6.9
Release Notes
Preview features
- Fix codeblock dynamic line length calculation for indented docstring examples (#13523)
- [
refurb
] MarkFURB118
fix as unsafe (#13613)
Rule changes
- [
pydocstyle
] Don't raiseD208
when last line is non-empty (#13372) - [
pylint
] Preserve trivia (i.e. comments) inPLR5501
autofix (#13573)
Configuration
- [
pyflakes
] Addallow-unused-imports
setting forunused-import
rule (F401
) (#13601)
Bug fixes
- Support ruff discovery in pip build environments (#13591)
- [
flake8-bugbear
] Avoid short circuitingB017
for multiple context managers (#13609) - [
pylint
] Do not offer an invalid fix forPLR1716
when the comparisons contain parenthesis (#13527) - [
pyupgrade
] FixUP043
to apply tocollections.abc.Generator
andcollections.abc.AsyncGenerator
(#13611) - [
refurb
] Fix handling of slices in tuples forFURB118
, e.g.,x[:, 1]
(#13518)
Documentation
- Update GitHub Action link to
astral-sh/ruff-action
(#13551)
Install ruff 0.6.9
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.9/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.9/ruff-installer.ps1 | iex"
Download ruff 0.6.9
0.6.8
Release Notes
Preview features
- Remove unnecessary parentheses around
match case
clauses (#13510) - Parenthesize overlong
if
guards inmatch..case
clauses (#13513) - Detect basic wildcard imports in
ruff analyze graph
(#13486) - [
pylint
] Implementboolean-chained-comparison
(R1716
) (#13435)
Rule changes
- [
lake8-simplify
] DetectSIM910
when using variadic keyword arguments, i.e.,**kwargs
(#13503) - [
pyupgrade
] Avoid false negatives with non-reference shadowed bindings of loop variables (UP028
) (#13504)
Bug fixes
- Detect tuples bound to variadic positional arguments i.e.
*args
(#13512) - Exit gracefully on broken pipe errors (#13485)
- Avoid panic when analyze graph hits broken pipe (#13484)
Performance
Contributors
- @MichaReiser
- @TomerBin
- @charliermarsh
- @diceroll123
- @dylwil3
- @haarisr
- @renovate
- @sbrugman
- @vincevannoort
- @zanieb
Install ruff 0.6.8
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.8/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.8/ruff-installer.ps1 | iex"
Download ruff 0.6.8
0.6.7
Release Notes
Preview features
- Add Python version support to ruff analyze CLI (#13426)
- Add
exclude
support toruff analyze
(#13425) - Fix parentheses around return type annotations (#13381)
Rule changes
- [
pycodestyle
] Fix: Don't autofix if the first line ends in a question mark? (D400) (#13399)
Bug fixes
- Respect
lint.exclude
in ruff check--add-noqa
(#13427)
Performance
- Avoid tracking module resolver files in Salsa (#13437)
- Use
forget
for module resolver database (#13438)
Install ruff 0.6.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.7/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.7/ruff-installer.ps1 | iex"
Download ruff 0.6.7
0.6.6
Release Notes
Preview features
- [
refurb
] Skipslice-to-remove-prefix-or-suffix
(FURB188
) when non-trivial slice steps are present (#13405) - Add a subcommand to generate dependency graphs (#13402)
Formatter
- Fix placement of inline parameter comments (#13379)
Server
- Fix off-by one error in the
LineIndex::offset
calculation (#13407)
Bug fixes
- [
fastapi
] Respect FastAPI aliases in route definitions (#13394) - [
pydocstyle
] Respect word boundaries when detecting function signature in docs (#13388)
Documentation
- Add backlinks to rule overview linter (#13368)
- Fix documentation for editor vim plugin ALE (#13348)
- Fix rendering of
FURB188
docs (#13406)
Install ruff 0.6.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.6/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.6/ruff-installer.ps1 | iex"
Download ruff 0.6.6
0.6.5
Release Notes
Preview features
- [
pydoclint
] IgnoreDOC201
when function name is "new" (#13300) - [
refurb
] Implementslice-to-remove-prefix-or-suffix
(FURB188
) (#13256)
Rule changes
- [
eradicate
] Ignore script-comments with multiple end-tags (ERA001
) (#13283) - [
pyflakes
] Improve error message forUndefinedName
when a builtin was added in a newer version than specified in Ruff config (F821
) (#13293)
Server
- Add support for extensionless Python files for server (#13326)
- Fix configuration inheritance for configurations specified in the LSP settings (#13285)
Bug fixes
- [
ruff
] Handle unary operators indecimal-from-float-literal
(RUF032
) (#13275)
CLI
- Only include rules with diagnostics in SARIF metadata (#13268)
Playground
- Add "Copy as pyproject.toml/ruff.toml" and "Paste from TOML" (#13328)
- Fix errors not shown for restored snippet on page load (#13262)
Contributors
- @AlexWaygood
- @MichaReiser
- @RussellLuo
- @Slyces
- @augustelalande
- @calumy
- @carljm
- @dhruvmanila
- @dizzy57
- @dylwil3
- @renovate
Install ruff 0.6.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.5/ruff-installer.ps1 | iex"