Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v0.3.5
->v0.5.2
==0.3.5
->==0.5.2
Note: The
pre-commit
manager in Renovate is not supported by thepre-commit
maintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
charliermarsh/ruff-pre-commit (charliermarsh/ruff-pre-commit)
v0.5.2
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.5.2
v0.5.1
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.5.1
v0.5.0
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/0.5.0
v0.4.10
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.10
v0.4.9
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.9
v0.4.8
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.8
v0.4.7
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.7
v0.4.6
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.6
v0.4.5
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.5
v0.4.4
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.4
v0.4.3
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.3
v0.4.2
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.2
v0.4.1
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.1
v0.4.0
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.4.0
v0.3.7
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.3.7
v0.3.6
Compare Source
See: https://github.com/astral-sh/ruff/releases/tag/v0.3.6
astral-sh/ruff (ruff)
v0.5.2
Compare Source
Preview features
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
include
andextend-include
settings in native server (#12252)CLI
D203
(#12238)Bug fixes
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
--output-format full
default (#12248)Performance
v0.5.1
Compare Source
Preview features
flake8-bugbear
] Implement mutable-contextvar-default (B039) (#12113)pycodestyle
] Whitespace after decorator (E204
) (#12140)pytest
] ReversePT001
andPT0023
defaults (#12106)Rule changes
flake8-bandit
] Detecthttpx
forS113
(#12174)numpy
] UpdateNPY201
to include exception deprecations (#12065)pylint
] Generate autofix forduplicate-bases
(PLE0241
) (#12105)Server
Bug fixes
requires-python
inference robust to==
(#12091)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
parse_identifier
(#12103)CompactString
forIdentifier
AST node (#12101)v0.5.0
Compare Source
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.
ALL
now excludes deprecated rules--strip-components=1
when untarring./latest
URLs on GitHub.Deprecations
The following rules are now deprecated:
syntax-error
(E999
): Syntax errors are now always shownRemapped rules
The following rules have been remapped to new rule codes:
blocking-http-call-in-async-function
:ASYNC100
toASYNC210
open-sleep-or-subprocess-in-async-function
:ASYNC101
split intoASYNC220
,ASYNC221
,ASYNC230
, andASYNC251
blocking-os-call-in-async-function
:ASYNC102
has been merged intoASYNC220
andASYNC221
trio-timeout-without-await
:TRIO100
toASYNC100
trio-sync-call
:TRIO105
toASYNC105
trio-async-function-with-timeout
:TRIO109
toASYNC109
trio-unneeded-sleep
:TRIO110
toASYNC110
trio-zero-sleep-call
:TRIO115
toASYNC115
repeated-isinstance-calls
:PLR1701
toSIM101
Stabilization
The following rules have been stabilized and are no longer in preview:
mutable-fromkeys-value
(RUF024
)default-factory-kwarg
(RUF026
)django-extra
(S610
)manual-dict-comprehension
(PERF403
)print-empty-string
(FURB105
)readlines-in-for
(FURB129
)if-expr-min-max
(FURB136
)bit-count
(FURB161
)redundant-log-base
(FURB163
)regex-flag-alias
(FURB167
)isinstance-type-none
(FURB168
)type-none-comparison
(FURB169
)implicit-cwd
(FURB177
)hashlib-digest-hex
(FURB181
)list-reverse-copy
(FURB187
)bad-open-mode
(PLW1501
)empty-comment
(PLR2044
)global-at-module-level
(PLW0604
)misplaced-bare-raise
(PLE0744
)non-ascii-import-name
(PLC2403
)non-ascii-name
(PLC2401
)nonlocal-and-global
(PLE0115
)potential-index-error
(PLE0643
)redeclared-assigned-name
(PLW0128
)redefined-argument-from-local
(PLR1704
)repeated-keyword-argument
(PLE1132
)super-without-brackets
(PLW0245
)unnecessary-list-index-lookup
(PLR1736
)useless-exception-statement
(PLW0133
)useless-with-lock
(PLW2101
)The following behaviors have been stabilized:
is-literal
(F632
) now warns for identity checks against list, set or dictionary literalsneedless-bool
(SIM103
) now detectsif
expressions with implicitelse
branchesmodule-import-not-at-top-of-file
(E402
) now allowsos.environ
modifications between import statementstype-comparison
(E721
) now allows idioms such astype(x) is int
yoda-condition
(SIM300
) now flags a wider range of expressionsRemovals
The following deprecated settings have been removed:
output-format=text
; useoutput-format=concise
oroutput-format=full
tab-size
; useindent-width
The following deprecated CLI options have been removed:
--show-source
; use--output-format=full
--no-show-source
; use--output-format=concise
The following deprecated CLI commands have been removed:
ruff <path>
; useruff check <path>
ruff --clean
; useruff clean
ruff --generate-shell-completion
; useruff generate-shell-completion
Preview features
ruff
] Addassert-with-print-message
rule (#11981)CLI
--statistics
(#11697)full
by default (#12010)Rule changes
ruff
] Fix false positives ifgettext
is imported using an alias (RUF027
) (#12025)npy
] Updatetrapz
andin1d
deprecation (NPY201
) (#11948)flake8-bandit
] Modify diagnostic ranges for shell-related rules (#10667)Server
logFile
(#11945)Bug fixes
pycodestyle
] AvoidE203
for f-string debug expression (#12024)pep8-naming
] Match import-name ignores against both name and alias (N812
,N817
) (#12033)pyflakes
] Detect assignments that shadow definitions (F811
) (#11961)Parser
Other changes
v0.4.10
Compare Source
Parser
Rule changes
flake8-copyright
] UpdateCPY001
to check the first 4096 bytes instead of 1024 (#11927)pycodestyle
] UpdateE999
to show all syntax errors instead of just the first one (#11900)Server
Security
v0.4.9
Compare Source
Preview features
pylint
] Implementconsider-dict-items
(C0206
) (#11688)refurb
] Implementrepeated-global
(FURB154
) (#11187)Rule changes
pycodestyle
] Adapt fix forE203
to work identical toruff format
(#10999)Formatter
Server
ruff server
(#11800)ruff.printDebugInformation
command (#11831)CLI
Bug fixes
refurb
] Avoid suggesting starmap when arguments are used outside call (FURB140
) (#11830)flake8-bugbear
] Avoid panic inB909
when checking large loop blocks (#11772)refurb
] Fix misbehavior ofoperator.itemgetter
when getter param is a tuple (FURB118
) (#11774)v0.4.8
Compare Source
Performance
Preview features
flake8-bugbear
] Implementreturn-in-generator
(B901
) (#11644)flake8-pyi
] ImplementPYI063
(#11699)pygrep_hooks
] Check blanket ignores via file-level pragmas (PGH004
) (#11540)Rule changes
pyupgrade
] UpdateUP035
for Python 3.13 and the latest version oftyping_extensions
(#11693)numpy
] UpdateNPY001
rule for NumPy 2.0 (#11735)Server
CLI
--output-format
flag (#11682)Bug fixes
pyupgrade
] Write empty string in lieu of panic when fixingUP032
(#11696)flake8-simplify
] Simplify double negatives inSIM103
(#11684)type
statements (#11720)v0.4.7
Compare Source
Preview features
flake8-pyi
] ImplementPYI064
(#11325)flake8-pyi
] ImplementPYI066
(#11541)flake8-pyi
] ImplementPYI057
(#11486)pyflakes
] EnableF822
in__init__.py
files by default (#11370)Formatter
Server
ruff server
(#11590)ruff server
(#11615)Bug fixes
flake8-comprehension
] Strip parentheses around generators inC400
(#11607)repeated-isinstance-calls
as unsafe on Python 3.10 and later (#11622)v0.4.6
Compare Source
Breaking changes
Preview features
flake8-async
] Sleep with >24 hour interval should usually sleep forever (ASYNC116
) (#11498)Rule changes
numpy
] Add missing functions to NumPy 2.0 migration rule (#11528)mccabe
] Consider irrefutable pattern similar toif .. else
forC901
(#11565)match
-case
statements forC901
,PLR0912
, andPLR0915
(#11521)UP032
) (#11524)flake8-bandit
]request-without-timeout
should warn forrequests.request
(#11548)flake8-self
] Ignore sunder accesses inflake8-self
rules (#11546)pyupgrade
] Lint forTypeAliasType
usages (UP040
) (#11530)Server
ruff server
configuration discovery (#11551)ruff server
correctly treats.pyi
files as stub files (#11535)ruff server
searches for configuration in parent directories (#11537)ruff server
: An empty code action filter no longer returns notebook source actions (#11526)Bug fixes
flake8-logging-format
] Fix autofix title inlogging-warn
(G010
) (#11514)refurb
] Avoid recommendingoperator.itemgetter
with dependence on lambda arguments (#11574)flake8-simplify
] Avoid recommending context manager in__enter__
implementations (#11575)--output-file
(#11550)singledispatch
arguments as runtime-required (#11523)v0.4.5
Compare Source
Ruff's language server is now in Beta
v0.4.5
marks the official Beta release ofruff server
, an integrated language server built into Ruff.ruff server
supports the same feature set asruff-lsp
, powering linting, formatting, andcode fixes in Ruff's editor integrations -- but with superior performance and
no installation required. We'd love your feedback!
You can enable
ruff server
in the VS Code extension today.To read more about this exciting milestone, check out our blog post!
Rule changes
flake8-future-annotations
] Rewordfuture-rewritable-type-annotation
(FA100
) message (#11381)pycodestyle
] Consider soft keywords forE27
rules (#11446)pyflakes
] Recommend adding unused import bindings to__all__
(#11314)pyflakes
] Update documentation and deprecateignore_init_module_imports
(#11436)pyupgrade
] Mark quotes as unnecessary for non-evaluated annotations (#11485)Formatter
quote-style = preserve
(#11490)Server
noqa
comment code actions (#11276)CLI
--output-format
as a CLI option forruff config
(#11438)Bug fixes
PLE0237
for property with setter (#11377)TCH005
forif
stmt withelif
/else
block (#11376)__future__
annotations as required for non-evaluated type annotations (#11414)flake8-pie
] Preserve parentheses inunnecessary-dict-kwargs
(#11372)pylint
] Ignore__slots__
with dynamic values (#11488)pylint
] Removetry
body from branch counting (#11487)refurb
] Respect operator precedence inFURB110
(#11464)Documentation
--preview
to the README (#11395)pycodestyle
] Clarify motivation forE713
andE714
(#11483)pyflakes
] Update docs to describe WAI behavior (F541) (#11362)pylint
] Clearly indicate what is counted as a branch (#11423)v0.4.4
Compare Source
Preview features
pycodestyle
] Ignore end-of-line comments when determining blank line rules (#11342)pylint
] Detectpathlib.Path.open
calls inunspecified-encoding
(PLW1514
) (#11288)flake8-pyi
] ImplementPYI059
(generic-not-last-base-class
) (#11233)flake8-pyi
] ImplementPYI062
(duplicate-literal-member
) (#11269)Rule changes
flake8-boolean-trap
] Allow passing booleans as positional-only arguments in code such asset(True)
(#11287)flake8-bugbear
] Ignore enum classes incached-instance-method
(B019
) (#11312)Server
ruff server
hanging after Neovim closes (#11291)Bug fixes
pylint
] Considerwith
statements fortoo-many-branches
(PLR0912
) (#11321)flake8-blind-except
,tryceratops
] Respect logged and re-raised expressions in nested statements (BLE001
,TRY201
) (#11301)__all__ = builtins.list(["foo", "bar"])
as valid__all__
definitions (#11335)v0.4.3
Compare Source
Enhancements
Preview features
refurb
] Use function range forreimplemented-operator
diagnostics (#11271)refurb
] Ignore methods inreimplemented-operator
(FURB118
) (#11270)refurb
] Implementfstring-number-format
(FURB116
) (#10921)ruff
] Implementredirected-noqa
(RUF101
) (#11052)pyflakes
] Distinguish between first-party and third-party imports for fix suggestions (#11168)Rule changes
flake8-bugbear
] Ignore non-abstract class attributes when enforcingB024
(#11210)flake8-logging
] Include inline instantiations when detecting loggers (#11154)pylint
] Also emitPLR0206
for properties with variadic parameters (#11200)ruff
] Detect duplicate codes as part ofunused-noqa
(RUF100
) (#10850)Formatter
LSP
ruff server
setup guide for Helix (#11183)ruff server
no longer hangs after shutdown (#11222)ruff server
reads from a configuration TOML file in the user configuration directory if no local configuration exists (#11225)ruff server
respectsper-file-ignores
configuration (#11224)ruff server
: Support a custom TOML configuration file (#11140)ruff server
: Support setting to prioritize project configuration over editor configuration (#11086)Bug fixes
pyflakes
] Prioritizeredefined-while-unused
overunused-import
(#11173)ruff
] Respectasync
expressions in comprehension bodies (#11219)pygrep_hooks
] Fixblanket-noqa
panic when last line has noqa with no newline (PGH004
) (#11108)perflint
] Ignore list-copy recommendations for asyncfor
loops (#11250)pyflakes
] Improveinvalid-print-syntax
documentation (#11171)Performance
v0.4.2
Compare Source
Rule changes
flake8-pyi
] Allow for overloaded__exit__
and__aexit__
definitions (PYI036
) (#11057)pyupgrade
] Catch usages of"%s" % var
and provide an unsafe fix (UP031
) (#11019)refurb
] Implement new rule that suggests min/max oversorted()
(FURB192
) (#10868)Server
noqa
codes (#11096)Bug fixes
macos-12
for building release wheels to enable macOS 11 compatibility (#11146)flake8-blind-expect
] Allow raise from inBLE001
(#11131)flake8-pyi
] Allow simple assignments toNone
in enum class scopes (PYI026
) (#11128)flake8-simplify
] Avoid raisingSIM911
for non-zip
attribute calls (#11126)refurb
] Avoidoperator.itemgetter
suggestion for single-item tuple (#11095)ruff
] Respect per-file-ignores forRUF100
with no other diagnostics (#11058)ruff
] Fix async comprehension false positive (RUF029
) (#11070)Documentation
flake8-bugbear
] Document explicitly disabling strict zip (B905
) (#11040)flake8-type-checking
] Mentionlint.typing-modules
inTCH001
,TCH002
, andTCH003
(#11144)isort
] Improve documentation around customisort
sections (#11050)pylint
] Fix documentation oversight forinvalid-X-returns
(#11094)Performance
matchit
to resolve per-file settings (#11111)v0.4.1
Compare Source
Preview features
pylint
] Implementinvalid-hash-returned
(PLE0309
) (#10961)pylint
] Implementinvalid-index-returned
(PLE0305
) (#10962)Bug fixes
pylint
] AllowNoReturn
-like functions for__str__
,__len__
, etc. (PLE0307
) (#11017)ruff
] Ignore stub functions inunused-async
(RUF029
) (#11026)v0.4.0
Compare Source
A new, hand-written parser
Ruff's new parser is >2x faster, which translates to a 20-40% speedup for all linting and formatting invocations.
There's a lot to say about this exciting change, so check out the blog post for more details!
See #10036 for implementation details.
A new language server in Rust
With this release, we also want to highlight our new language server.
ruff server
is a Rust-powered languageserver that comes built-in with Ruff. It can be used with any editor that supports the Language Server Protocol (LSP).
It uses a multi-threaded, lock-free architecture inspired by
rust-analyzer
and it will open the door for a lotof exciting features. It’s also faster than our previous Python-based language server
-- but you probably guessed that already.
ruff server
is only in alpha, but it has a lot of features that you can try out today:ruff.applyAutofix
,ruff.applyFormat
, andruff.applyOrganizeImports
source.fixAll
andsource.organizeImports
source actionsTo setup
ruff server
with your editor, refer to the README.md.Preview features
pycodestyle
] Do not triggerE3
rules ondef
s following a function/method with a dummy body (#10704)pylint
] Implementinvalid-bytes-returned
(E0308
) (#10959)pylint
] Implementinvalid-length-returned
(E0303
) (#10963)pylint
] Implementself-cls-assignment
(W0642
) (#9267)pylint
] Omit stubs frominvalid-bool
andinvalid-str-return-type
(#11008)ruff
] New ruleunused-async
(RUF029
) to detect unneededasync
keywords on functions (#9966)Rule changes
flake8-bandit
] Allowurllib.request.urlopen
calls with staticRequest
argument (S310
) (#10964)flake8-bugbear
] Treatraise NotImplemented
-only bodies as stub functions (B006
) (#10990)flake8-slots
] Respect same-fileEnum
subclasses (SLOT000
) (#11006)pylint
] Support inverted comparisons (PLR1730
) (#10920)Linter
--show-settings
(#11003)BuiltinTypeChecker
(#10976)RuleTable::any_enabled
(#10971)Server
This section is devoted to updates for our new language server, written in Rust.
Configuration
RUFF_OUTPUT_FILE
environment variable support (#10992)Bug fixes
non-augmented-assignment
for reversed, non-commutative operators (PLR6104
) (#10909)PLR6104
) (#10912)per-file-ignores
forRUF100
on blanket# noqa
(#10908)if
expression for parenthesized with items parsing (#11010)FOR_TARGET
context for all kinds of parentheses (#11009)v0.3.7
Compare Source
Preview features
flake8-bugbear
] Implementloop-iterator-mutation
(B909
) (#9578)pylint
] Implement rule to prefer augmented assignment (PLR6104
) (#9932)Bug fixes
pylint
] Recodenan-comparison
rule toW0177
(#10894)pylint
] Reverse min-max logic inif-stmt-min-max
(#10890)v0.3.6
Compare Source
Preview features
pylint
] Implementbad-staticmethod-argument
(PLW0211
) (#10781)pylint
] Implementif-stmt-min-max
(PLR1730
,PLR1731
) (#10002)pyupgrade
] Replacestr,Enum
multiple inheritance withStrEnum
UP042
(#10713)refurb
] Implementif-expr-instead-of-or-operator
(FURB110
) (#10687)refurb
] Implementint-on-sliced-str
(FURB166
) (#10650)refurb
] Implementwrite-whole-file
(FURB103
) (#10802)refurb
] Supportitemgetter
inreimplemented-operator
(FURB118
) (#10526)flake8_comprehensions
] Addsum
/min
/max
to unnecessary comprehension check (C419
) (#10759)Rule changes
pydocstyle
] Require capitalizing docstrings where the first sentence is a single word (D403
) (#10776)pycodestyle
] Ignore annotated lambdas in class scopes (E731
) (#10720)flake8-pyi
] Various improvements to PYI034 (#10807)flake8-slots
] Flag subclasses of call-basedtyping.NamedTuple
s as well as subclasses ofcollections.namedtuple()
(SLOT002
) (#10808)pyflakes
] Allow forward references in class bases in stub files (F821
) (#10779)pygrep-hooks
] Improveblanket-noqa
error message (PGH004
) (#10851)CLI
FORCE_COLOR
env var (#10839)Configuration
[extend-]per-file-ignores
(#10852)Bug fixes
flake8-import-conventions
] Accept non-aliased (but correct) import inunconventional-import-alias
(ICN001
) (#10729)flake8-quotes
] Add semantic model flag when inside f-string replacement field (#10766)pep8-naming
] Recursively resolveTypeDicts
for N815 violations (#10719)flake8-quotes
] RespectQ00*
ignores inflake8-quotes
rules (#10728)flake8-simplify
] Show negated condition inneedless-bool
diagnostics (SIM103
) (#10854)ruff
] Use within-scope shadowed bindings inasyncio-dangling-task
(RUF006
) (#10793)flake8-pytest-style
] Fix single-tuple conversion inpytest-parametrize-values-wrong-type
(PT007
) (#10862)flake8-return
] Ignore assignments to annotated variables inunnecessary-assign
(RET504
) (#10741)refurb
] Do not allow any keyword arguments forread-whole-file
inrb
mode (FURB101
) (#10803)pylint
] Don't recommend decorating staticmethods with@singledispatch
(PLE1519
,PLE1520
) (#10637)pydocstyle
] Use section name range for all section-related docstring diagnostics (#10740)# noqa
directives on__all__
openers (#10798)Configuration
📅 Schedule: Branch creation - "on the first day of the month" in timezone America/Chicago, Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate. View repository job log here.