Releases: astral-sh/ruff
0.6.2
Release Notes
Preview features
- [
flake8-simplify
] Extendopen-file-with-context-handler
to work with other standard-library IO modules (SIM115
) (#12959) - [
ruff
] Avoidunused-async
for functions with FastAPI route decorator (RUF029
) (#12938) - [
ruff
] Ignorefstring-missing-syntax
(RUF027
) forfastAPI
paths (#12939) - [
ruff
] Implement check for Decimal called with a float literal (RUF032) (#12909)
Rule changes
- [
flake8-bugbear
] Update diagnostic message when expression is at the end of function (B015
) (#12944) - [
flake8-pyi
] Skip type annotations instring-or-bytes-too-long
(PYI053
) (#13002) - [
flake8-type-checking
] Always recognise relative imports as first-party (#12994) - [
flake8-unused-arguments
] Ignore unused arguments on stub functions (ARG001
) (#12966) - [
pylint
] Ignore augmented assignment forself-cls-assignment
(PLW0642
) (#12957)
Server
- Show full context in error log messages (#13029)
Bug fixes
- [
pep8-naming
] Don't flagfrom
imports following conventional import names (N817
) (#12946) - [
pylint
] - Allow__new__
methods to havecls
as their first argument even if decorated with@staticmethod
forbad-staticmethod-argument
(PLW0211
) (#12958)
Documentation
- Add
hyperfine
installation instructions; updatehyperfine
code samples (#13034) - Expand note to use Ruff with other language server in Kate (#12806)
- Update example for
PT001
as per the new default behavior (#13019) - [
perflint
] Improve docs fortry-except-in-loop
(PERF203
) (#12947) - [
pydocstyle
] Add reference tolint.pydocstyle.ignore-decorators
setting to rule docs (#12996)
Contributors
- @AlexWaygood
- @FinchPowers
- @InSyncWithFoo
- @MichaReiser
- @Skylion007
- @TomerBin
- @carljm
- @charliermarsh
- @dhruvmanila
- @diceroll123
- @dsal3389
- @dylwil3
- @kbaskett248
- @lengau
- @mkniewallner
- @olp-cs
- @renovate
- @tfardet
Install ruff 0.6.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.2/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.2/ruff-installer.ps1 | iex"
Download ruff 0.6.2
0.6.1
Release Notes
This is a hotfix release to address an issue with ruff-pre-commit
. In v0.6, Ruff changed its behavior to lint and format Jupyter notebooks by default; however, due to an oversight, these files were still excluded by default if Ruff was run via pre-commit, leading to inconsistent behavior. This has now been fixed.
Preview features
- [
fastapi
] Implementfast-api-unused-path-parameter
(FAST003
) (#12638)
Rule changes
- [
pylint
] Renametoo-many-positional
totoo-many-positional-arguments
(R0917
) (#12905)
Server
- Fix crash when applying "fix-all" code-action to notebook cells (#12929)
Other changes
- [
flake8-naming
]: Respect import conventions (N817
) (#12922)
Contributors
Install ruff 0.6.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.1/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.1/ruff-installer.ps1 | iex"
Download ruff 0.6.1
0.6.0
Release Notes
Check out the blog post for a migration guide and overview of the changes!
Breaking changes
See also, the "Remapped rules" section which may result in disabled rules.
- Lint and format Jupyter Notebook by default (#12878).
- Detect imports in
src
layouts by default forisort
rules (#12848) - The pytest rules
PT001
andPT023
now default to omitting the decorator parentheses when there are no arguments (#12838).
Deprecations
The following rules are now deprecated:
pytest-missing-fixture-name-underscore
(PT004
)pytest-incorrect-fixture-name-underscore
(PT005
)unpacked-list-comprehension
(UP027
)
Remapped rules
The following rules have been remapped to new rule codes:
unnecessary-dict-comprehension-for-iterable
:RUF025
toC420
Stabilization
The following rules have been stabilized and are no longer in preview:
singledispatch-method
(PLE1519
)singledispatchmethod-function
(PLE1520
)bad-staticmethod-argument
(PLW0211
)if-stmt-min-max
(PLR1730
)invalid-bytes-return-type
(PLE0308
)invalid-hash-return-type
(PLE0309
)invalid-index-return-type
(PLE0305
)invalid-length-return-type
(E303
)self-or-cls-assignment
(PLW0642
)byte-string-usage
(PYI057
)duplicate-literal-member
(PYI062
)redirected-noqa
(RUF101
)
The following behaviors have been stabilized:
cancel-scope-no-checkpoint
(ASYNC100
): Supportasyncio
andanyio
context mangers.async-function-with-timeout
(ASYNC109
): Supportasyncio
andanyio
context mangers.async-busy-wait
(ASYNC110
): Supportasyncio
andanyio
context mangers.async-zero-sleep
(ASYNC115
): Supportanyio
context mangers.long-sleep-not-forever
(ASYNC116
): Supportanyio
context mangers.
The following fixes have been stabilized:
superfluous-else-return
(RET505
)superfluous-else-raise
(RET506
)superfluous-else-continue
(RET507
)superfluous-else-break
(RET508
)
Preview features
- [
flake8-simplify
] Further simplify to binary in preview for (SIM108
) (#12796) - [
pyupgrade
] Show violations without auto-fix (UP031
) (#11229)
Rule changes
- [
flake8-import-conventions
] Addxml.etree.ElementTree
to default conventions (#12455) - [
flake8-pytest-style
] Add a space after comma in CSV output (PT006
) (#12853)
Server
- Show a message for incorrect settings (#12781)
Bug fixes
- [
flake8-async
] Do not lint yield in context manager (ASYNC100
) (#12896) - [
flake8-comprehensions
] Do not lintasync for
comprehensions (C419
) (#12895) - [
flake8-return
] Only add returnNone
at end of a function (RET503
) (#11074) - [
flake8-type-checking
] Avoid treatingdataclasses.KW_ONLY
as typing-only (TCH003
) (#12863) - [
pep8-naming
] Treattype(Protocol)
et al as metaclass base (N805
) (#12770) - [
pydoclint
] Don't enforce returns and yields in abstract methods (DOC201
,DOC202
) (#12771) - [
ruff
] Skip tuples with slice expressions in (RUF031
) (#12768) - [
ruff
] Ignore unparenthesized tuples in subscripts when the subscript is a type annotation or type alias (RUF031
) (#12762) - [
ruff
] Ignore template strings passed to logging andbuiltins._()
calls (RUF027
) (#12889) - [
ruff
] Do not remove parens for tuples with starred expressions in Python <=3.10 (RUF031
) (#12784) - Evaluate default parameter values for a function in that function's enclosing scope (#12852)
Other changes
- Respect VS Code cell metadata when detecting the language of Jupyter Notebook cells (#12864)
- Respect
kernelspec
notebook metadata when detecting the preferred language for a Jupyter Notebook (#12875)
Install ruff 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.6.0/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.6.0/ruff-installer.ps1 | iex"
Download ruff 0.6.0
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](https://github.com/astral-sh/ruff/releases/download/0.6.0/ruff-armv7-unkno... |
0.5.7
Release Notes
Preview features
- [
flake8-comprehensions
] Account for list and set comprehensions inunnecessary-literal-within-tuple-call
(C409
) (#12657) - [
flake8-pyi
] Add autofix forfuture-annotations-in-stub
(PYI044
) (#12676) - [
flake8-return
] Avoid syntax error when auto-fixingRET505
with mixed indentation (space and tabs) (#12740) - [
pydoclint
] Adddocstring-missing-yields
(DOC402
) anddocstring-extraneous-yields
(DOC403
) (#12538) - [
pydoclint
] AvoidDOC201
if docstring begins with "Return", "Returns", "Yield", or "Yields" (#12675) - [
pydoclint
] Deduplicate collected exceptions after traversing function bodies (DOC501
) (#12642) - [
pydoclint
] IgnoreDOC
errors for stub functions (#12651) - [
pydoclint
] Teach rules to understand reraised exceptions as being explicitly raised (DOC501
,DOC502
) (#12639) - [
ruff
] Implementincorrectly-parenthesized-tuple-in-subscript
(RUF031
) (#12480) - [
ruff
] MarkRUF023
fix as unsafe if__slots__
is not a set and the binding is used elsewhere (#12692)
Rule changes
- [
refurb
] Add autofix forimplicit-cwd
(FURB177
) (#12708) - [
ruff
] Add autofix forzip-instead-of-pairwise
(RUF007
) (#12663) - [
tryceratops
] AddBaseException
toraise-vanilla-class
rule (TRY002
) (#12620)
Server
- Ignore non-file workspace URL; Ruff will display a warning notification in this case (#12725)
CLI
- Fix cache invalidation for nested
pyproject.toml
files (#12727)
Bug fixes
- [
flake8-async
] Fix false positives with multipleasync with
items (ASYNC100
) (#12643) - [
flake8-bandit
] Avoid false-positives for list concatenations in SQL construction (S608
) (#12720) - [
flake8-bugbear
] Treatreturn
as equivalent tobreak
(B909
) (#12646) - [
flake8-comprehensions
] Set comprehensions not a violation forsum
inunnecessary-comprehension-in-call
(C419
) (#12691) - [
flake8-simplify
] Parenthesize conditions based on precedence when merging if arms (SIM114
) (#12737) - [
pydoclint
] Try both 'Raises' section styles when convention is unspecified (DOC501
) (#12649)
Contributors
- @AlexWaygood
- @DavideRagazzon
- @InSyncWithFoo
- @MichaReiser
- @augustelalande
- @bluetech
- @carljm
- @cclauss
- @charliermarsh
- @dhruvmanila
- @diceroll123
- @dylwil3
- @ember91
- @epenet
- @renovate
Install ruff 0.5.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.7/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.7/ruff-installer.ps1 | iex"
Download ruff 0.5.7
0.5.6
Release Notes
Ruff 0.5.6 automatically enables linting and formatting of notebooks in preview mode.
You can opt-out of this behavior by adding *.ipynb
to the extend-exclude
setting.
[tool.ruff]
extend-exclude = ["*.ipynb"]
Preview features
- Enable notebooks by default in preview mode (#12621)
- [
flake8-builtins
] Implement import, lambda, and module shadowing (#12546) - [
pydoclint
] Adddocstring-missing-returns
(DOC201
) anddocstring-extraneous-returns
(DOC202
) (#12485)
Rule changes
- [
flake8-return
] Exempt cached properties and other property-like decorators from explicit return rule (RET501
) (#12563)
Server
- Make server panic hook more error resilient (#12610)
- Use
$/logTrace
for server trace logs in Zed and VS Code (#12564) - Keep track of deleted cells for reorder change request (#12575)
Configuration
- [
flake8-implicit-str-concat
] Always allow explicit multi-line concatenations when implicit concatenations are banned (#12532)
Bug fixes
- [
flake8-async
] Avoid flaggingasyncio.timeout
s as unused when the context manager includesasyncio.TaskGroup
(#12605) - [
flake8-slots
] Avoid recommending__slots__
for classes that inherit from more thannamedtuple
(#12531) - [
isort
] Avoid marking required imports as unused (#12537) - [
isort
] Preserve trailing inline comments on import-from statements (#12498) - [
pycodestyle
] Add newlines before comments (E305
) (#12606) - [
pycodestyle
] Don't attach comments with mismatched indents (#12604) - [
pyflakes
] Fix preview-mode bugs inF401
when attempting to autofix unused first-party submodule imports in an__init__.py
file (#12569) - [
pylint
] Respect start index inunnecessary-list-index-lookup
(#12603) - [
pyupgrade
] Avoid recommending no-argument super inslots=True
dataclasses (#12530) - [
pyupgrade
] Use colon rather than dot formatting for integer-only types (#12534) - Fix NFKC normalization bug when removing unused imports (#12571)
Other changes
- Consider more stdlib decorators to be property-like (#12583)
- Improve handling of metaclasses in various linter rules (#12579)
- Improve consistency between linter rules in determining whether a function is property (#12581)
Install ruff 0.5.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.6/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.6/ruff-installer.ps1 | iex"
Download ruff 0.5.6
0.5.5
Release Notes
Preview features
- [
fastapi
] Implementfastapi-redundant-response-model
(FAST001
) andfastapi-non-annotated-dependency
(FAST002
) (#11579) - [
pydoclint
] Implementdocstring-missing-exception
(DOC501
) anddocstring-extraneous-exception
(DOC502
) (#11471)
Rule changes
- [
numpy
] Fix NumPy 2.0 rule fornp.alltrue
andnp.sometrue
(#12473) - [
numpy
] IgnoreNPY201
insideexcept
blocks for compatibility with older numpy versions (#12490) - [
pep8-naming
] Avoid applyingignore-names
toself
andcls
function names (N804
,N805
) (#12497)
Formatter
- Fix incorrect placement of leading function comment with type params (#12447)
Server
- Do not bail code action resolution when a quick fix is requested (#12462)
Bug fixes
- Fix
Ord
implementation ofcmp_fix
(#12471) - Raise syntax error for unparenthesized generator expression in multi-argument call (#12445)
- [
pydoclint
] Fix panic inDOC501
reported in #12428 (#12435) - [
flake8-bugbear
] Allow singleton tuples with starred expressions inB013
(#12484)
Documentation
- Add Eglot setup guide for Emacs editor (#12426)
- Add note about the breaking change in
nvim-lspconfig
(#12507) - Add note to include notebook files for native server (#12449)
- Add setup docs for Zed editor (#12501)
Contributors
- @AlexWaygood
- @IvanIsCoding
- @MichaReiser
- @TomerBin
- @UriyaHarpeness
- @augustelalande
- @carljm
- @charliermarsh
- @dhruvmanila
- @dylwil3
- @foxmean
- @mtsokol
- @osiewicz
- @renovate
- @thejcannon
Install ruff 0.5.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.5/ruff-installer.ps1 | iex"
Download ruff 0.5.5
0.5.4
Release Notes
Rule changes
- [
ruff
] RenameRUF007
tozip-instead-of-pairwise
(#12399)
Bug fixes
- [
flake8-builtins
] Avoid shadowing diagnostics for@override
methods (#12415) - [
flake8-comprehensions
] Insert parentheses for multi-argument generators (#12422) - [
pydocstyle
] Handle escaped docstrings within docstring (D301
) (#12192)
Documentation
Install ruff 0.5.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.4/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.4/ruff-installer.ps1 | iex"
Download ruff 0.5.4
0.5.3
Release Notes
Ruff 0.5.3 marks the stable release of the Ruff language server and introduces revamped documentation, including setup guides for your editor of choice and the language server itself.
Preview features
- Formatter: Insert empty line between suite and alternative branch after function/class definition (#12294)
- [
pyupgrade
] Implementunnecessary-default-type-args
(UP043
) (#12371)
Rule changes
- [
flake8-bugbear
] Detect enumerate iterations inloop-iterator-mutation
(B909
) (#12366) - [
flake8-bugbear
] Removediscard
,remove
, andpop
allowance forloop-iterator-mutation
(B909
) (#12365) - [
pylint
] Allowrepeated-equality-comparison
for mixed operations (PLR1714
) (#12369) - [
pylint
] Ignoreself
andcls
when counting arguments (PLR0913
) (#12367) - [
pylint
] Use UTF-8 as default encoding inunspecified-encoding
fix (PLW1514
) (#12370)
Server
- Build settings index in parallel for the native server (#12299)
- Use fallback settings when indexing the project (#12362)
- Consider
--preview
flag forserver
subcommand for the linter and formatter (#12208)
Bug fixes
- [
flake8-comprehensions
] Allow additional arguments forsum
andmax
comprehensions (C419
) (#12364) - [
pylint
] Avoid dropping extra boolean operations inrepeated-equality-comparison
(PLR1714
) (#12368) - [
pylint
] Consider expression before statement when determining binding kind (PLR1704
) (#12346)
Documentation
- Add docs for Ruff language server (#12344)
- Migrate to standalone docs repo (#12341)
- Update versioning policy for editor integration (#12375)
Other changes
- Publish Wasm API to npm (#12317)
Contributors
- @AlexWaygood
- @MichaReiser
- @cake-monotone
- @carljm
- @charliermarsh
- @dhruvmanila
- @github-actions
- @konstin
- @mattrunyon
- @renovate
Install ruff 0.5.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.3/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.3/ruff-installer.ps1 | iex"
Download ruff 0.5.3
0.5.2
Release Notes
Preview features
- Use
space
separator before parenthesized expressions in comprehensions with leading comments (#12282) - [
flake8-async
] UpdateASYNC100
to includeanyio
andasyncio
(#12221) - [
flake8-async
] UpdateASYNC109
to includeanyio
andasyncio
(#12236) - [
flake8-async
] UpdateASYNC110
to includeanyio
andasyncio
(#12261) - [
flake8-async
] UpdateASYNC115
to includeanyio
andasyncio
(#12262) - [
flake8-async
] UpdateASYNC116
to includeanyio
andasyncio
(#12266)
Rule changes
- [
flake8-return
] Exempt properties from explicit return rule (RET501
) (#12243) - [
numpy
] Addnp.NAN
-to-np.nan
diagnostic (#12292) - [
refurb
] Makelist-reverse-copy
an unsafe fix (#12303)
Server
- Consider
include
andextend-include
settings in native server (#12252) - Include nested configurations in settings reloading (#12253)
CLI
- Omit code frames for fixes with empty ranges (#12304)
- Warn about formatter incompatibility for
D203
(#12238)
Bug fixes
- Make cache-write failures non-fatal on Windows (#12302)
- Treat
not
operations as boolean tests (#12301) - [
flake8-bandit
] AvoidS310
violations for HTTP-safe f-strings (#12305) - [
flake8-bandit
] Support explicit string concatenations in S310 HTTP detection (#12315) - [
flake8-bandit
] fix S113 false positive for httpx withouttimeout
argument (#12213) - [
pycodestyle
] Remove "non-obvious" allowance for E721 (#12300) - [
pyflakes
] Considerwith
blocks as single-item branches for redefinition analysis (#12311) - [
refurb
] Restrict forwarding fornewline
argument inopen()
calls to Python versions >= 3.10 (#12244)
Documentation
- Update help and documentation to reflect
--output-format full
default (#12248)
Performance
- Use more threads when discovering Python files (#12258)
Install ruff 0.5.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.2/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.2/ruff-installer.ps1 | iex"
Download ruff 0.5.2
0.5.1
Release Notes
Preview features
- [
flake8-bugbear
] Implement mutable-contextvar-default (B039) (#12113) - [
pycodestyle
] Whitespace after decorator (E204
) (#12140) - [
pytest
] ReversePT001
andPT0023
defaults (#12106)
Rule changes
- Enable token-based rules on source with syntax errors (#11950)
- [
flake8-bandit
] Detecthttpx
forS113
(#12174) - [
numpy
] UpdateNPY201
to include exception deprecations (#12065) - [
pylint
] Generate autofix forduplicate-bases
(PLE0241
) (#12105)
Server
- Avoid syntax error notification for source code actions (#12148)
- Consider the content of the new cells during notebook sync (#12203)
- Fix replacement edit range computation (#12171)
Bug fixes
- Disable auto-fix when source has syntax errors (#12134)
- Fix cache key collisions for paths with separators (#12159)
- Make
requires-python
inference robust to==
(#12091) - Use char-wise width instead of
str
-width (#12135) - [
pycodestyle
] AvoidE275
if keyword followed by comma (#12136) - [
pycodestyle
] AvoidE275
if keyword is followed by a semicolon (#12095) - [
pylint
] Skip dummy variables forPLR1704
(#12190)
Performance
Contributors
- @AlexWaygood
- @MichaReiser
- @Peiffap
- @ThomasFaivre
- @bersace
- @charliermarsh
- @dhruvmanila
- @github-actions
- @jkauerl
- @mkniewallner
- @mtsokol
- @renovate
- @snowsignal
- @tjkuson
- @zanieb
Install ruff 0.5.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.1/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.1/ruff-installer.ps1 | iex"