-
-
Notifications
You must be signed in to change notification settings - Fork 540
Update dependency ruff to v0.12.5 #1991
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9d0b6ca to
4025956
Compare
4025956 to
1748464
Compare
fe342d3 to
e1a82e8
Compare
e1a82e8 to
75db41d
Compare
75db41d to
9a982b2
Compare
9a982b2 to
1a866af
Compare
1a866af to
48a5bc1
Compare
48a5bc1 to
a116a70
Compare
a116a70 to
8445e01
Compare
8445e01 to
536900a
Compare
536900a to
221b724
Compare
221b724 to
60d9613
Compare
60d9613 to
d59ea8e
Compare
d59ea8e to
eb97b3b
Compare
wren
approved these changes
Jul 29, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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:
0.11.3->0.12.5Release Notes
astral-sh/ruff (ruff)
v0.12.5Compare Source
Preview features
flake8-use-pathlib] Add autofix forPTH101,PTH104,PTH105,PTH121(#19404)ruff] Support byte strings (RUF055) (#18926)Bug fixes
unreachablepanic in parser (#19183)flake8-pyi] Skip fix if allUnionmembers areNone(PYI016) (#19416)perflint] Parenthesize generator expressions (PERF401) (#19325)pylint] Handle empty comments after line continuation (PLR2044) (#19405)Rule changes
pep8-naming] FixN802false positives forCGIHTTPRequestHandlerandSimpleHTTPRequestHandler(#19432)v0.12.4Compare Source
Preview features
flake8-type-checking,pyupgrade,ruff] Addfrom __future__ import annotationswhen it would allow new fixes (TC001,TC002,TC003,UP037,RUF013) (#19100)flake8-use-pathlib] Add autofix forPTH109(#19245)pylint] Detect indirectpathlib.Pathusages forunspecified-encoding(PLW1514) (#19304)Bug fixes
flake8-bugbear] FixB017false negatives for keyword exception arguments (#19217)flake8-use-pathlib] Fix false negative on directPath()instantiation (PTH210) (#19388)flake8-django] FixDJ008false positive for abstract models with type-annotatedabstractfield (#19221)isort] FixI002import insertion after docstring with multiple string statements (#19222)isort] Treat form feed as valid whitespace before a semicolon (#19343)pydoclint] FixSyntaxErrorfrom fixes with line continuations (D201,D202) (#19246)refurb]FURB164fix should validate arguments and should usually be marked unsafe (#19136)Rule changes
flake8-use-pathlib] Skip single dots forinvalid-pathlib-with-suffix(PTH210) on versions >= 3.14 (#19331)pep8_naming] Avoid false positives on standard library functions with uppercase names (N802) (#18907)pycodestyle] Handle brace escapes for t-strings in logical lines (#19358)pylint] Extend invalid string character rules to include t-strings (#19355)ruff] Allowstrictkwarg when checking forstarmap-zip(RUF058) in Python 3.14+ (#19333)Documentation
flake8-type-checking] MakeTC010docs example more realistic (#19356)v0.12.3Compare Source
Preview features
flake8-bugbear] Support non-context-manager calls inB017(#19063)flake8-use-pathlib] Add autofixes forPTH100,PTH106,PTH107,PTH108,PTH110,PTH111,PTH112,PTH113,PTH114,PTH115,PTH117,PTH119,PTH120(#19213)flake8-use-pathlib] Add autofixes forPTH203,PTH204,PTH205(#18922)Bug fixes
flake8-return] Fix false-positive for variables used inside nested functions inRET504(#18433)flake8-type-checking] Fix syntax error introduced by fix (TC008) (#19150)pyupgrade] Keyword arguments insupershould suppress theUP008fix (#19131)Documentation
flake8-pyi] Make example error out-of-the-box (PYI007,PYI008) (#19103)flake8-simplify] Make example error out-of-the-box (SIM116) (#19111)flake8-type-checking] Make example error out-of-the-box (TC001) (#19151)flake8-use-pathlib] Make example error out-of-the-box (PTH210) (#19189)pycodestyle] Make example error out-of-the-box (E272) (#19191)pycodestyle] Make example not raise unnecessarySyntaxError(E114) (#19190)pydoclint] Make example error out-of-the-box (DOC501) (#19218)pylint,pyupgrade] Fix syntax errors in examples (PLW1501,UP028) (#19127)pylint] Updatemissing-maxsplit-argdocs and error to suggest proper usage (PLC0207) (#18949)flake8-bandit] Make example error out-of-the-box (S412) (#19241)v0.12.2Compare Source
Preview features
flake8-pyi] ExpandOptional[A]toA | None(PYI016) (#18572)pyupgrade] MarkUP008fix safe if no comments are in range (#18683)Bug fixes
flake8-comprehensions] FixC420to prepend whitespace when needed (#18616)perflint] FixPERF403panic on attribute or subscription loop variable (#19042)pydocstyle] FixD413infinite loop for parenthesized docstring (#18930)pylint] FixPLW0108autofix introducing a syntax error when the lambda's body contains an assignment expression (#18678)refurb] Fix false positive on empty tuples (FURB168) (#19058)ruff] Allow morefieldcalls fromattrs(RUF009) (#19021)ruff] Fix syntax error introduced for an empty string followed by a u-prefixed string (UP025) (#18899)Rule changes
flake8-executable] Allowuvxin shebang line (EXE003) (#18967)pandas] Avoid flaggingPD002ifpandasis not imported (#18963)pyupgrade] Avoid PEP-604 unions withtyping.NamedTuple(UP007,UP045) (#18682)Documentation
import-outside-top-level (PLC0415)andlint.flake8-tidy-imports.banned-module-level-imports(#18733)format.skip-magic-trailing-commaexample (#19095)airflow] MakeAIR302example error out-of-the-box (#18988)airflow] MakeAIR312example error out-of-the-box (#18989)flake8-annotations] MakeANN401example error out-of-the-box (#18974)flake8-async] MakeASYNC100example error out-of-the-box (#18993)flake8-async] MakeASYNC105example error out-of-the-box (#19002)flake8-async] MakeASYNC110example error out-of-the-box (#18975)flake8-async] MakeASYNC210example error out-of-the-box (#18977)flake8-async] MakeASYNC220,ASYNC221, andASYNC222examples error out-of-the-box (#18978)flake8-async] MakeASYNC251example error out-of-the-box (#18990)flake8-bandit] MakeS201example error out-of-the-box (#19017)flake8-bandit] MakeS604andS609examples error out-of-the-box (#19049)flake8-bugbear] MakeB028example error out-of-the-box (#19054)flake8-bugbear] MakeB911example error out-of-the-box (#19051)flake8-datetimez] MakeDTZ011example error out-of-the-box (#19055)flake8-datetimez] MakeDTZ901example error out-of-the-box (#19056)flake8-pyi] MakePYI032example error out-of-the-box (#19061)flake8-pyi] Make example error out-of-the-box (PYI014,PYI015) (#19097)flake8-pyi] Make example error out-of-the-box (PYI042) (#19101)flake8-pyi] Make example error out-of-the-box (PYI059) (#19080)flake8-pyi] Make example error out-of-the-box (PYI062) (#19079)flake8-pytest-style] Make example error out-of-the-box (PT023) (#19104)flake8-pytest-style] Make example error out-of-the-box (PT030) (#19105)flake8-quotes] Make example error out-of-the-box (Q003) (#19106)flake8-simplify] Make example error out-of-the-box (SIM110) (#19113)flake8-simplify] Make example error out-of-the-box (SIM113) (#19109)flake8-simplify] Make example error out-of-the-box (SIM401) (#19110)pyflakes] Fix backslash in docs (F621) (#19098)pylint] FixPLC0415example (#18970)v0.12.1Compare Source
Preview features
flake8-errmsg] ExtendEM101to support byte strings (#18867)flake8-use-pathlib] Add autofix forPTH202(#18763)pygrep-hooks] AddAsyncMockmethods toinvalid-mock-access(PGH005) (#18547)pylint] Ignore__init__.pyfiles in (PLC0414) (#18400)ruff] TriggerRUF037for empty string and byte strings (#18862).pyifiles (#18888)Bug fixes
remove_argument(#18805)flake8-logging] Avoid false positive forexc_info=Trueoutsidelogger.exception(LOG014) (#18737)flake8-pytest-style] Enforcepytestimport for decorators (#18779)flake8-pytest-style] Mark autofix forPT001andPT023as unsafe if there's comments in the decorator (#18792)flake8-pytest-style]PT001/PT023fix makes syntax error on parenthesized decorator (#18782)flake8-raise] Make fix unsafe if it deletes comments (RSE102) (#18788)flake8-simplify] FixSIM911autofix creating a syntax error (#18793)flake8-simplify] Fix false negatives for shadowed bindings (SIM910,SIM911) (#18794)flake8-simplify] Preserve original behavior forexcept ()and bareexcept(SIM105) (#18213)flake8-pyi] FixPYI041's fix causingTypeErrorwithNone | None | ...(#18637)perflint] FixPERF101autofix creating a syntax error and mark autofix as unsafe if there are comments in thelistcall expr (#18803)perflint] Fix false negative inPERF401(#18866)pylint] Avoid flattening nestedmin/maxwhen outer call has single argument (PLW3301) (#16885)pylint] FixPLC2801autofix creating a syntax error (#18857)pylint] MarkPLE0241autofix as unsafe if there's comments in the base classes (#18832)pylint] SuppressPLE2510/PLE2512/PLE2513/PLE2514/PLE2515autofix if the text contains an odd number of backslashes (#18856)refurb] Detect more exotic float literals inFURB164(#18925)refurb] FixFURB163autofix creating a syntax error foryieldexpressions (#18756)refurb] MarkFURB129autofix as unsafe if there's comments in thereadlinescall (#18858)ruff] Fix false positives and negatives inRUF010(#18690)analyze.directionvariant names (#18892)Rule changes
flake8-return] MarkRET501fix unsafe if comments are inside (#18780)flake8-async] Fix detection for large integer sleep durations inASYNC116rule (#18767)flake8-async] Mark autofix forASYNC115as unsafe if the call expression contains comments (#18753)flake8-bugbear] Mark autofix forB004as unsafe if thehasattrcall expr contains comments (#18755)flake8-comprehension] Mark autofix forC420as unsafe if there's comments inside the dict comprehension (#18768)flake8-comprehensions] Handle template strings for comprehension fixes (#18710)flake8-future-annotations] Add autofix (FA100) (#18903)pyflakes] MarkF504/F522/F523autofix as unsafe if there's a call with side effect (#18839)pylint] Allow fix with comments and document performance implications (PLW3301) (#18936)pylint] Detect more exoticNaNliterals inPLW0177(#18630)pylint] FixPLC1802autofix creating a syntax error and mark autofix as unsafe if there's comments in thelencall (#18836)pyupgrade] Extend version detection to includesys.version_info.major(UP036) (#18633)ruff] Add lint ruleRUF064for callingchmodwith non-octal integers (#18541)ruff] Addedcls.__dict__.get('__annotations__')check (RUF063) (#18233)ruff] Frozendataclassdefault should be valid (RUF009) (#18735)Server
Documentation
perflint] Small docs improvement toPERF401(#18786)pyupgrade]: Usesuper(), not__super__in error messages (UP008) (#18743)flake8-pie] Small docs fix toPIE794(#18829)flake8-pyi] Correctcollections-named-tupleexample to use PascalCase assignment (#16884)flake8-pie] Add note on type checking benefits tounnecessary-dict-kwargs(PIE804) (#18666)pycodestyle] Clarify PEP 8 relationship towhitespace-around-operatorrules (#18870)Other changes
flake8-logging] Add fix safety section toLOG002(#18840)pyupgrade] Add fix safety section toUP010(#18838)v0.12.0Compare Source
Check out the blog post for a migration
guide and overview of the changes!
Breaking changes
Detection of more syntax errors
Ruff now detects version-related syntax errors, such as the use of the
matchstatement on Python versions before 3.10, and syntax errors emitted by
CPython's compiler, such as irrefutable
matchpatterns before the finalcasearm.New default Python version handling for syntax errors
Ruff will default to the latest supported Python version (3.13) when
checking for the version-related syntax errors mentioned above to prevent
false positives in projects without a Python version configured. The default
in all other cases, like applying lint rules, is unchanged and remains at the
minimum supported Python version (3.9).
Updated f-string formatting
Ruff now formats multi-line f-strings with format specifiers to avoid adding a
line break after the format specifier. This addresses a change to the Python
grammar in version 3.13.4 that made such a line break a syntax error.
rust-toolchain.tomlis no longer included in source distributionsThe
rust-toolchain.tomlis used to specify a higher Rust version than Ruff'sminimum supported Rust version (MSRV) for development and building release
artifacts. However, when present in source distributions, it would also cause
downstream package maintainers to pull in the same Rust toolchain, even if
their available toolchain was MSRV-compatible.
Removed Rules
The following rules have been removed:
suspicious-xmle-tree-usage(
S320)Deprecated Rules
The following rules have been deprecated:
pandas-df-variable-nameStabilization
The following rules have been stabilized and are no longer in preview:
for-loop-writes(FURB122)check-and-remove-from-set(FURB132)verbose-decimal-constructor(FURB157)fromisoformat-replace-z(FURB162)int-on-sliced-str(FURB166)exc-info-outside-except-handler(LOG014)import-outside-top-level(PLC0415)unnecessary-dict-index-lookup(PLR1733)nan-comparison(PLW0177)eq-without-hash(PLW1641)pytest-parameter-with-default-argument(PT028)pytest-warns-too-broad(PT030)pytest-warns-with-multiple-statements(PT031)invalid-formatter-suppression-comment(RUF028)dataclass-enum(RUF049)class-with-mixed-type-vars(RUF053)unnecessary-round(RUF057)starmap-zip(RUF058)non-pep604-annotation-optional] (UP045)non-pep695-generic-class(UP046)non-pep695-generic-function(UP047)private-type-parameter(UP049)The following behaviors have been stabilized:
collection-literal-concatenation] (RUF005) now recognizes slices, inaddition to list literals and variables.
readlines-in-for] (FURB129) is now marked as always safe.if-else-block-instead-of-if-exp] (SIM108) will now further simplifyexpressions to use
orinstead of anifexpression, where possible.unused-noqa] (RUF100) now checks for file-levelnoqacomments as wellas inline comments.
subprocess-without-shell-equals-true] (S603) now accepts literal strings,as well as lists and tuples of literal strings, as trusted input.
boolean-type-hint-positional-argument] (FBT001) now applies to types thatinclude
bool, likebool | intortyping.Optional[bool], in addition toplain
boolannotations.non-pep604-annotation-union] (UP007) has now been split into two rules.UP007now applies only totyping.Union, while[
non-pep604-annotation-optional] (UP045) checks for use oftyping.Optional.UP045has also been stabilized in this release, but youmay need to update existing
include,ignore, ornoqasettings toaccommodate this change.
Preview features
ruff] Check for non-context-manager use ofpytest.raises,pytest.warns, andpytest.deprecated_call(RUF061) (#17368)Bug fixes
readlines(#18542)\rand\r\nhandling in t- and f-string debug texts (#18673)}when f-string expression has a format specifier (#18704)flake8-pyi] Avoid syntax error in the case of starred and keyword arguments (PYI059) (#18611)flake8-return] FixRET504autofix generating a syntax error (#18428)pep8-naming] Suppress fix forN804andN805if the recommended name is already used (#18472)pycodestyle] Avoid causing a syntax error in expressions spanning multiple lines (E731) (#18479)pyupgrade] SuppressUP008ifsuperis shadowed (#18688)refurb] Parenthesize lambda and ternary expressions (FURB122,FURB142) (#18592)ruff] Handle extra arguments todeque(RUF037) (#18614)ruff] Preserve parentheses arounddequein fix forunnecessary-empty-iterable-within-deque-call(RUF037) (#18598)ruff] Validate arguments before offering a fix (RUF056) (#18631)ruff] Skip fix forRUF059if dummy name is already bound (#18509)pylint] FixPLW0128to check assignment targets in square brackets and after asterisks (#18665)Rule changes
returnstatements (B909) (#18408)ty:comments as pragma comments (#18532)flake8-pyi] Applycustom-typevar-for-selfto string annotations (PYI019) (#18311)pyupgrade] Don't offer a fix forOptional[None](UP007,UP045)(#18545)pyupgrade] Fixsuper(__class__, self)detection (UP008) (#18478)refurb] Make the fix forFURB163unsafe forlog2,log10,*args, and deleted comments (#18645)Server
Documentation
*from glob pattern example forper-file-target-version(#18709)pylint] De-emphasize__hash__ = Parent.__hash__(PLW1641) (#18613)refurb] Add a note about float literal handling (FURB157) (#18615)v0.11.13Compare Source
Release Notes
Preview features
airflow] Add unsafe fix for module moved cases (AIR301,AIR311,AIR312,AIR302) (#18367,#18366,#18363,#18093)refurb] Add coverage ofsetandfrozensetcalls (FURB171) (#18035)refurb] MarkFURB180fix unsafe when class has bases (#18149)Bug fixes
perflint] Fix missing parentheses for lambda and ternary conditions (PERF401,PERF403) (#18412)pyupgrade] ApplyUP035only on py313+ forget_type_hints()(#18476)pyupgrade] Make fix unsafe if it deletes comments (UP004,UP050) (#18393, #18390)Rule changes
fastapi] Avoid false positive for class dependencies (FAST003) (#18271)Documentation
Other changes
Contributors
Install ruff 0.11.13
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-installer.ps1 | iex"Download ruff 0.11.13
v0.11.12Compare Source
Release Notes
Preview features
airflow] Revise fix titles (AIR3) (#18215)pylint] Implementmissing-maxsplit-arg(PLC0207) (#17454)pyupgrade] New ruleUP050(useless-class-metaclass-type) (#18334)flake8-use-pathlib] Replaceos.symlinkwithPath.symlink_to(PTH211) (#18337)Bug fixes
flake8-bugbear] Ignore__debug__attribute inB010(#18357)flake8-async] Fixanyio.sleepargument name (ASYNC115,ASYNC116) (#18262)refurb] FixFURB129autofix generating invalid syntax (#18235)Rule changes
flake8-implicit-str-concat] Add autofix forISC003(#18256)pycodestyle] Improve the diagnostic message forE712(#18328)flake8-2020] Fix diagnostic message for!=comparisons (YTT201) (#18293)pyupgrade] Make fix unsafe if it deletes comments (UP010) (#18291)Documentation
flake8-bugbear] Add fix safety section (B006) (#17652)Contributors
Install ruff 0.11.12
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-installer.ps1 | iex"Download ruff 0.11.12
v0.11.11Compare Source
Release Notes
Preview features
airflow] Add autofixes forAIR302andAIR312(#17942)airflow] Move rules fromAIR312toAIR302(#17940)airflow] UpdateAIR301andAIR311with the latest Airflow implementations (#17985)flake8-simplify] Enable fix in preview mode (SIM117) (#18208)Bug fixes
[]and_(#18147)pylint] FixPLW1514not recognizing theencodingpositional argument ofcodecs.open(#18109)CLI
Documentation
flake8-print] Improve print/pprint docs forT201andT203(#18130)flake8-simplify] Add fix safety section (SIM110,SIM210) (#18114,#18100)pylint] Fix docs example that produced different output (PLW0603) (#18216)Contributors
Install ruff 0.11.11
Install prebuilt binaries via shell script
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-installer.ps1 | iex"Download ruff 0.11.11