chore(deps): update dependency ruff to ^0.15.0 #2

Open
renovate-bot wants to merge 1 commit from renovate/ruff-0.x into main
Collaborator

This PR contains the following updates:

Package Change Age Confidence
ruff (source, changelog) ^0.8.5^0.15.0 age confidence

Release Notes

astral-sh/ruff (ruff)

v0.15.17

Compare Source

Released on 2026-06-11.

Preview features
  • Allow human-readable names in suppression comments (#​25614)
  • Fix handling of ignore comments within a disable/enable pair (#​25845)
  • Prioritize human-readable names in CLI output (#​25869)
  • Respect diagnostic start and parent ranges and trailing comments in ruff:ignore suppressions (#​25673)
  • [flake8-async] Add trio.as_safe_channel to safe decorators (ASYNC119) (#​25775)
  • [flake8-pytest-style] Also check pytest_asyncio fixtures (#​25375)
  • [ruff] Ban pytest autouse fixtures (RUF076) (#​25477)
  • [pyupgrade] Add from __future__ import annotations automatically (UP007, UP045) (#​23259)
Bug fixes
  • Fix diagnostic when ruff:enable or ruff:disable appears where ruff:ignore is expected (#​25700)
  • [pyupgrade] Preserve leading empty literals to avoid syntax errors (UP032) (#​25491)
Rule changes
  • [flake8-pytest-style] Clarify diagnostic message for single parameters (PT007) (#​25592)
  • [numpy] Drop autofix for np.in1d (NPY201) (#​25612)
  • [pylint] Exempt Python version comparisons (PLR2004) (#​25743)
Performance
  • Reserve AST Vecs with correct capacity for common cases (#​25451)
Formatter
  • Preserve whitespace for Quarto cell option comments (#​25641)
CLI
Other changes
  • Fix playground diagnostics scrollbars (#​25642)
Contributors

v0.15.16

Compare Source

Released on 2026-06-04.

Preview features
  • [flake8-async] Implement yield-in-context-manager-in-async-generator (ASYNC119) (#​24644)
  • [pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#​25440)
  • [ruff] Treat yield before break from a terminal loop as terminal (RUF075) (#​25447)
Bug fixes
  • [eradicate] Avoid flagging ruff:ignore comments as code (ERA001) (#​25537)
  • [eradicate] Fix ERA001/RUF100 conflict when noqa is on commented-out code (#​25414)
  • [pyflakes] Avoid removing the format call when it would change behavior (F523) (#​25320)
  • [pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510, PLE2512, PLE2513, PLE2514, PLE2515) (#​25544)
  • [pyupgrade] Avoid converting format calls with more kinds of side effects (UP032) (#​25484)
Rule changes
  • [flake8-pytest-style] Avoid fixes for ambiguous argnames and argvalues combinations (PT006) (#​24776)
Performance
  • Drop excess capacity from statement suites during parsing (#​25368)
Documentation
  • [pydocstyle] Improve discoverability of rules enabled for each convention (#​24973)
  • [ruff] Restore example code for Python versions before 3.15 (RUF017) (#​25439)
  • Fix typo bin/activebin/activate in tutorial (#​25473)
Other changes
  • Shrink additional parser AST collections (#​25465)
Contributors

v0.15.15

Compare Source

Released on 2026-05-28.

Preview features
  • Fix Markdown closing fence handling (#​25310)
  • [pyflakes] Report duplicate imports in typing.TYPE_CHECKING block (F811) (#​22560)
Bug fixes
  • [pyflakes] Treat function-scope bare annotations as locals per PEP 526 (F821) (#​21540)
Performance
  • Avoid redundant TokenValue drops in the lexer (#​25300)
  • Reduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens Vec size (#​25354)
  • Use ThinVec in AST to shrink Stmt (#​25361)
Documentation
  • Fix line-length example for --config option (#​25389)
  • [flake8-comprehensions] Document RecursionError edge case in __len__ (C416) (#​25286)
  • [mccabe] Improve example (C901) (#​25287)
  • [pyupgrade] Clarify fix safety docs (UP007, UP045) (#​25288)
  • [refurb] Document FURB192 exception change for empty sequences (#​25317)
  • [ruff] Document false negative for user-defined types (RUF013) (#​25289)
Formatter
  • Fix formatting of lambdas nested within f-strings (#​25398)
Server
  • Return code action for codeAction/resolve requests that contain no or no valid URL (#​25365)
Other changes
  • Expand semantic syntax errors for invalid walruses (#​25415)
Contributors

v0.15.14

Compare Source

Released on 2026-05-21.

Preview features
  • [airflow] Implement airflow-task-implicit-multiple-outputs (AIR202) (#​25152)
  • [flake8-use-pathlib] Mark PTH101 fix as unsafe when first argument is a class attribute annotated as int (#​25086)
  • [pylint] Implement too-many-try-statements (W0717) (#​23970)
  • [ruff] Add incorrect-decorator-order (RUF074) (#​23461)
  • [ruff] Add fallible-context-manager (RUF075) (#​22844)
Bug fixes
  • Fix lambda formatting in interpolated string expressions (#​25144)
  • Treat generic frozenset annotations as immutable (#​25251)
  • [flake8-type-checking] Avoid strict behavior when future-annotations are enabled (TC001, TC002, TC003) (#​25035)
  • [pylint] Avoid false positives in else clause (PLR1733) (#​25177)
Rule changes
  • [flake8-comprehensions] Skip C417 for lambdas with positional-only parameters (#​25272)
  • [flake8-simplify] Preserve f-string source verbatim in SIM101 fix (#​25061)
Performance
  • Avoid unnecessary parser lookahead for operators (#​25290)
Documentation
  • Update code example setting Neovim LSP log level (#​25284)
Other changes
Contributors

v0.15.13

Compare Source

Released on 2026-05-14.

Preview features
  • Add a rule to flag lazy imports that are eagerly evaluated (#​25016)
  • [pylint] Standardize diagnostic message (PLR0914, PLR0917) (#​24996)
Bug fixes
  • Fix F811 false positive for class methods (#​24933)
  • Fix setting selection for multi-folder workspace (#​24819)
  • [eradicate] Fix false positive for lines with leading whitespace (ERA001) (#​25122)
  • [flake8-pyi] Fix false positive for f-string debug specifier (PYI016) (#​24098)
Rule changes
  • Always include panic payload in panic diagnostic message (#​24873)
  • Restrict PYI034 for in-place operations to enclosing class (#​24511)
  • Improve error message for parameters that are declared global (#​24902)
  • Update known stdlib (#​25103)
Performance
  • [isort] Avoid constructing glob::Patterns for literal known modules (#​25123)
CLI
  • Add TOML examples to --config help text (#​25013)
  • Colorize ruff check 'All checks passed' (#​25085)
Configuration
  • Increase max allowed value of line-length setting (#​24962)
Documentation
  • Add D203 to rules that conflict with the formatter (#​25044)
  • Clarify COM819 and formatter interaction (#​25045)
  • Clarify that NotImplemented is a value, not an exception (F901) (#​25054)
  • Update number of lint rules supported (#​24942)
Other changes
  • Simplify the playground's markdown template (#​24924)
Contributors

v0.15.12

Compare Source

Released on 2026-04-24.

Preview features
  • Implement #ruff:file-ignore file-level suppressions (#​23599)
  • Implement #ruff:ignore logical-line suppressions (#​23404)
  • Revert preview changes to displayed diagnostic severity in LSP (#​24789)
  • [airflow] Implement task-branch-as-short-circuit (AIR004) (#​23579)
  • [flake8-bugbear] Fix break/continue handling in loop-iterator-mutation (B909) (#​24440)
  • [pylint] Fix PLC2701 for type parameter scopes (#​24576)
Rule changes
  • [pandas-vet] Suggest .array as well in PD011 (#​24805)
CLI
  • Respect default Unix permissions for cache files (#​24794)
Documentation
  • [pylint] Fix PLR0124 description not to claim self-comparison always returns the same value (#​24749)
  • [pyupgrade] Expand docs on reusable TypeVars and scoping (UP046) (#​24153)
  • Improve rules table accessibility (#​24711)
Contributors

v0.15.11

Compare Source

Released on 2026-04-16.

Preview features
  • [ruff] Ignore RUF029 when function is decorated with asynccontextmanager (#​24642)
  • [airflow] Implement airflow-xcom-pull-in-template-string (AIR201) (#​23583)
  • [flake8-bandit] Fix S103 false positives and negatives in mask analysis (#​24424)
Bug fixes
  • [flake8-async] Omit overridden methods for ASYNC109 (#​24648)
Documentation
  • [flake8-async] Add override mention to ASYNC109 docs (#​24666)
  • Update Neovim config examples to use vim.lsp.config (#​24577)
Contributors

v0.15.10

Compare Source

Released on 2026-04-09.

Preview features
  • [flake8-logging] Allow closures in except handlers (LOG004) (#​24464)
  • [flake8-self] Make SLF diagnostics robust to non-self-named variables (#​24281)
  • [flake8-simplify] Make the fix for collapsible-if safe in preview (SIM102) (#​24371)
Bug fixes
  • Avoid emitting multi-line f-string elements before Python 3.12 (#​24377)
  • Avoid syntax error from E502 fixes in f-strings and t-strings (#​24410)
  • Strip form feeds from indent passed to dedent_to (#​24381)
  • [pyupgrade] Fix panic caused by handling of octals (UP012) (#​24390)
  • Reject multi-line f-string elements before Python 3.12 (#​24355)
Rule changes
  • [ruff] Treat f-string interpolation as potential side effect (RUF019) (#​24426)
Server
  • Add support for custom file extensions (#​24463)
Documentation
  • Document adding fixes in CONTRIBUTING.md (#​24393)
  • Fix JSON typo in settings example (#​24517)
Contributors

v0.15.9

Compare Source

Released on 2026-04-02.

Preview features
  • [pyflakes] Flag annotated variable redeclarations as F811 in preview mode (#​24244)
  • [ruff] Allow dunder-named assignments in non-strict mode for RUF067 (#​24089)
Bug fixes
  • [flake8-errmsg] Avoid shadowing existing msg in fix for EM101 (#​24363)
  • [flake8-simplify] Ignore pre-initialization references in SIM113 (#​24235)
  • [pycodestyle] Fix W391 fixes for consecutive empty notebook cells (#​24236)
  • [pyupgrade] Fix UP008 nested class matching (#​24273)
  • [pyupgrade] Ignore strings with string-only escapes (UP012) (#​16058)
  • [ruff] RUF072: skip formfeeds on dedent (#​24308)
  • [ruff] Avoid re-using symbol in RUF024 fix (#​24316)
  • [ruff] Parenthesize expression in RUF050 fix (#​24234)
  • Disallow starred expressions as values of starred expressions (#​24280)
Rule changes
  • [flake8-simplify] Suppress SIM105 for except* before Python 3.12 (#​23869)
  • [pyflakes] Extend F507 to flag %-format strings with zero placeholders (#​24215)
  • [pyupgrade] UP018 should detect more unnecessarily wrapped literals (UP018) (#​24093)
  • [pyupgrade] Fix UP008 callable scope handling to support lambdas (#​24274)
  • [ruff] RUF010: Mark fix as unsafe when it deletes a comment (#​24270)
Formatter
  • Add nested-string-quote-style formatting option (#​24312)
Documentation
  • [flake8-bugbear] Clarify RUF071 fix safety for non-path string comparisons (#​24149)
  • [flake8-type-checking] Clarify import cycle wording for TC001/TC002/TC003 (#​24322)
Other changes
  • Avoid rendering fix lines with trailing whitespace after | (#​24343)
Contributors

v0.15.8

Compare Source

Released on 2026-03-26.

Preview features
  • [ruff] New rule unnecessary-if (RUF050) (#​24114)
  • [ruff] New rule useless-finally (RUF072) (#​24165)
  • [ruff] New rule f-string-percent-format (RUF073): warn when using % operator on an f-string (#​24162)
  • [pyflakes] Recognize frozendict as a builtin for Python 3.15+ (#​24100)
Bug fixes
  • [flake8-async] Use fully-qualified anyio.lowlevel import in autofix (ASYNC115) (#​24166)
  • [flake8-bandit] Check tuple arguments for partial paths in S607 (#​24080)
  • [pyflakes] Skip undefined-name (F821) for conditionally deleted variables (#​24088)
  • E501/W505/formatter: Exclude nested pragma comments from line width calculation (#​24071)
  • Fix %foo? parsing in IPython assignment expressions (#​24152)
  • analyze graph: resolve string imports that reference attributes, not just modules (#​24058)
Rule changes
  • [eradicate] ignore ty: ignore comments in ERA001 (#​24192)
  • [flake8-bandit] Treat sys.executable as trusted input in S603 (#​24106)
  • [flake8-self] Recognize Self annotation and self assignment in SLF001 (#​24144)
  • [pyflakes] F507: Fix false negative for non-tuple RHS in %-formatting (#​24142)
  • [refurb] Parenthesize generator arguments in FURB142 fixer (#​24200)
Performance
Server
  • Warn when Markdown files are skipped due to preview being disabled (#​24150)
Documentation
  • Clarify extend-ignore and extend-select settings documentation (#​24064)
  • Mention AI policy in PR template (#​24198)
Other changes
  • Use trusted publishing for NPM packages (#​24171)
Contributors

v0.15.7

Compare Source

Released on 2026-03-19.

Preview features
  • Display output severity in preview (#​23845)
  • Don't show noqa hover for non-Python documents (#​24040)
Rule changes
  • [pycodestyle] Recognize pyrefly: as a pragma comment (E501) (#​24019)
Server
  • Don't return code actions for non-Python documents (#​23905)
Documentation
  • Add company AI policy to contributing guide (#​24021)
  • Document editor features for Markdown code formatting (#​23924)
  • [pylint] Improve phrasing (PLC0208) (#​24033)
Other changes
  • Use PEP 639 license information (#​19661)
Contributors

v0.15.6

Compare Source

Released on 2026-03-12.

Preview features
  • Add support for lazy import parsing (#​23755)
  • Add support for star-unpacking of comprehensions (PEP 798) (#​23788)
  • Reject semantic syntax errors for lazy imports (#​23757)
  • Drop a few rules from the preview default set (#​23879)
  • [airflow] Flag Variable.get() calls outside of task execution context (AIR003) (#​23584)
  • [airflow] Flag runtime-varying values in DAG/task constructor arguments (AIR304) (#​23631)
  • [flake8-bugbear] Implement delattr-with-constant (B043) (#​23737)
  • [flake8-tidy-imports] Add TID254 to enforce lazy imports (#​23777)
  • [flake8-tidy-imports] Allow users to ban lazy imports with TID254 (#​23847)
  • [isort] Retain lazy keyword when sorting imports (#​23762)
  • [pyupgrade] Add from __future__ import annotations automatically (UP006) (#​23260)
  • [refurb] Support newline parameter in FURB101 for Python 3.13+ (#​23754)
  • [ruff] Add os-path-commonprefix (RUF071) (#​23814)
  • [ruff] Add unsafe fix for os-path-commonprefix (RUF071) (#​23852)
  • [ruff] Limit RUF036 to typing contexts; make it unsafe for non-typing-only (#​23765)
  • [ruff] Use starred unpacking for RUF017 in Python 3.15+ (#​23789)
Bug fixes
  • Fix --add-noqa creating unwanted leading whitespace (#​23773)
  • Fix --add-noqa breaking shebangs (#​23577)
  • [formatter] Fix lambda body formatting for multiline calls and subscripts (#​23866)
  • [formatter] Preserve required annotation parentheses in annotated assignments (#​23865)
  • [formatter] Preserve type-expression parentheses in the formatter (#​23867)
  • [flake8-annotations] Fix stack overflow in ANN401 on quoted annotations with escape sequences (#​23912)
  • [pep8-naming] Check naming conventions in match pattern bindings (N806, N815, N816) (#​23899)
  • [perflint] Fix comment duplication in fixes (PERF401, PERF403) (#​23729)
  • [pyupgrade] Properly trigger super change in nested class (UP008) (#​22677)
  • [ruff] Avoid syntax errors in RUF036 fixes (#​23764)
Rule changes
  • [flake8-bandit] Flag S501 with requests.request (#​23873)
  • [flake8-executable] Fix WSL detection in non-Docker containers (#​22879)
  • [flake8-print] Ignore pprint calls with stream= (#​23787)
Documentation
  • Update docs for Markdown code block formatting (#​23871)
  • [flake8-bugbear] Fix misleading description for B904 (#​23731)
Contributors

v0.15.5

Compare Source

Released on 2026-03-05.

Preview features
  • Discover Markdown files by default in preview mode (#​23434)
  • [perflint] Extend PERF102 to comprehensions and generators (#​23473)
  • [refurb] Fix FURB101 and FURB103 false positives when I/O variable is used later (#​23542)
  • [ruff] Add fix for none-not-at-end-of-union (RUF036) (#​22829)
  • [ruff] Fix false positive for re.split with empty string pattern (RUF055) (#​23634)
Bug fixes
  • [fastapi] Handle callable class dependencies with __call__ method (FAST003) (#​23553)
  • [pydocstyle] Fix numpy section ordering (D420) (#​23685)
  • [pyflakes] Fix false positive for names shadowing re-exports (F811) (#​23356)
  • [pyupgrade] Avoid inserting redundant None elements in UP045 (#​23459)
Documentation
  • Document extension mapping for Markdown code formatting (#​23574)
  • Update default Python version examples (#​23605)
Other changes
  • Publish releases to Astral mirror (#​23616)
Contributors

v0.15.4

Compare Source

Released on 2026-02-26.

This is a follow-up release to 0.15.3 that resolves a panic when the new rule PLR1712 was enabled with any rule that analyzes definitions, such as many of the ANN or D rules.

Bug fixes
  • Fix panic on access to definitions after analyzing definitions (#​23588)
  • [pyflakes] Suppress false positive in F821 for names used before del in stub files (#​23550)
Documentation
  • Clarify first-party import detection in Ruff (#​23591)
  • Fix incorrect import-heading example (#​23568)
Contributors

v0.15.3

Compare Source

Released on 2026-02-26.

Preview features
  • Drop explicit support for .qmd file extension (#​23572)

    This can now be enabled instead by setting the extension option:

    # ruff.toml
    extension = { qmd = "markdown" }
    
    # pyproject.toml
    [tool.ruff]
    extension = { qmd = "markdown" }
    
  • Include configured extensions in file discovery (#​23400)

  • [flake8-bandit] Allow suspicious imports in TYPE_CHECKING blocks (S401-S415) (#​23441)

  • [flake8-bugbear] Allow B901 in pytest hook wrappers (#​21931)

  • [flake8-import-conventions] Add missing conventions from upstream (ICN001, ICN002) (#​21373)

  • [pydocstyle] Add rule to enforce docstring section ordering (D420) (#​23537)

  • [pylint] Implement swap-with-temporary-variable (PLR1712) (#​22205)

  • [ruff] Add unnecessary-assign-before-yield (RUF070) (#​23300)

  • [ruff] Support file-level noqa in RUF102 (#​23535)

  • [ruff] Suppress diagnostic for invalid f-strings before Python 3.12 (RUF027) (#​23480)

  • [flake8-bandit] Don't flag BaseLoader/CBaseLoader as unsafe (S506) (#​23510)

Bug fixes
  • Avoid infinite loop between I002 and PYI025 (#​23352)
  • [pyflakes] Fix false positive for @overload from lint.typing-modules (F811) (#​23357)
  • [pyupgrade] Fix false positive for TypeVar default before Python 3.12 (UP046) (#​23540)
  • [pyupgrade] Fix handling of \N in raw strings (UP032) (#​22149)
Rule changes
  • Render sub-diagnostics in the GitHub output format (#​23455)

  • [flake8-bugbear] Tag certain B007 diagnostics as unnecessary (#​23453)

  • [ruff] Ignore unknown rule codes in RUF100 (#​23531)

    These are now flagged by RUF102 instead.

Documentation
  • Fix missing settings links for several linters (#​23519)
  • Update isort action comments heading (#​23515)
  • [pydocstyle] Fix double comma in description of D404 (#​23440)
Other changes
  • Update the Python module (notably find_ruff_bin) for parity with uv (#​23406)
Contributors

v0.15.2

Compare Source

Released on 2026-02-19.

Preview features
Bug fixes
  • [flake8-async] Fix in_async_context logic (#​23426)
  • [ruff] Fix for RUF102 should delete entire comment (#​23380)
  • [ruff] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (RUF027) (#​21069)
  • [flake8-bugbear] Fix B023 false positive for immediately-invoked lambdas (#​23294)
  • [parser] Fix false syntax error for match-like annotated assignments (#​23297)
  • [parser] Fix indentation tracking after line continuations (#​23417)
Rule changes
  • [flake8-executable] Allow global flags in uv shebangs (EXE003) (#​22582)
  • [pyupgrade] Fix handling of typing.{io,re} (UP035) (#​23131)
  • [ruff] Detect PLC0207 on chained str.split() calls (#​23275)
CLI
  • Remove invalid inline noqa warning (#​23270)
Configuration
  • Add extension mapping to configuration file options (#​23384)
Documentation
  • Add Q004 to the list of conflicting rules (#​23340)
  • [ruff] Expand lint.external docs and add sub-diagnostic (RUF100, RUF102) (#​23268)
Contributors

v0.15.1

Compare Source

Released on 2026-06-18.

Preview features
  • Handle nested ruff:ignore comments (#​25791)
  • Stop displaying severity in output (#​26050)
  • Use human-readable names in CLI output (#​25937)
  • Use human-readable names in LSP and playground diagnostics (#​26058)
  • [pydocstyle] Prevent property docstrings starting with verbs (D421) (#​23775)
  • [flake8-pyi] Extend PYI033 to Python files (#​26129)
Bug fixes
  • Detect equivalent numeric mapping keys (#​26009)
  • Detect mapping keys equivalent to booleans (#​25982)
  • Detect repeated signed and complex dictionary keys (#​26007)
Rule changes
  • [flake8-pyi] Rename PYI033 to legacy-type-comment (#​26131)
Performance
  • Use ThinVec for call keywords (#​25999)
  • Inline parser recovery context checks (#​26038)
  • Match parser keywords as bytes (#​26037)
  • Move value parsing out of lexing (#​25360)
Server
  • Render subdiagnostics and secondary annotations as related information (#​26011)
Documentation
  • Update fix availability for always-fixable rules (#​26091)
  • [flake8-tidy-imports] Add fix safety section (TID252) (#​17491)
Parser
  • Reject __debug__ lambda parameters (#​26022)
  • Reject _ as a match-pattern target (#​25977)
  • Reject multiple starred names in sequence patterns (#​25976)
  • Reject parenthesized star imports (#​26021)
  • Reject starred comprehension targets (#​26023)
  • Reject unparenthesized generator expressions in class bases (#​25978)
  • Reject yield expressions after commas (#​26024)
  • Validate function type parameter default order (#​25981)
Playground
Contributors

v0.15.0

Compare Source

Released on 2026-02-03.

Check out the blog post for a migration
guide and overview of the changes!

Breaking changes
  • Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes.

  • The linter now supports block suppression comments. For example, to suppress N803 for all parameters in this function:

    # ruff: disable[N803]
    def foo(
        legacyArg1,
        legacyArg2,
        legacyArg3,
        legacyArg4,
    ): ...
    # ruff: enable[N803]
    

    See the documentation for more details.

  • The ruff:alpine Docker image is now based on Alpine 3.23 (up from 3.21).

  • The ruff:debian and ruff:debian-slim Docker images are now based on Debian 13 "Trixie" instead of Debian 12 "Bookworm."

  • Binaries for the ppc64 (64-bit big-endian PowerPC) architecture are no longer included in our releases. It should still be possible to build Ruff manually for this platform, if needed.

  • Ruff now resolves all extended configuration files before falling back on a default Python version.

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

  • The --output-format flag is now respected when running Ruff in --watch mode, and the full output format is now used by default, matching the regular CLI output.
  • builtin-attribute-shadowing (A003) now detects the use of shadowed built-in names in additional contexts like decorators, default arguments, and other attribute definitions.
  • duplicate-union-member (PYI016) now considers typing.Optional when searching for duplicate union members.
  • split-static-string (SIM905) now offers an autofix when the maxsplit argument is provided, even without a sep argument.
  • dict-get-with-none-default (SIM910) now applies to more types of key expressions.
  • super-call-with-parameters (UP008) now has a safe fix when it will not delete comments.
  • unnecessary-default-type-args (UP043) now applies to stub (.pyi) files on Python versions before 3.13.
Formatter

This release introduces the new 2026 style guide, with the following changes:

  • Lambda parameters are now kept on the same line and lambda bodies will be parenthesized to let
    them break across multiple lines (#​21385)
  • Parentheses around tuples of exceptions in except clauses will now be removed on Python 3.14 and
    later (#​20768)
  • A single empty line is now permitted at the beginning of function bodies (#​21110)
  • Parentheses are avoided for long as captures in match statements (#​21176)
  • Extra spaces between escaped quotes and ending triple quotes can now be omitted (#​17216)
  • Blank lines are now enforced before classes with decorators in stub files (#​18888)
Preview features
Bug fixes
  • Fix suppression indentation matching (#​22903)
Rule changes
  • Customize where the fix_title sub-diagnostic appears (#​23044)
  • [FastAPI] Add sub-diagnostic explaining why a fix was unavailable (FAST002) (#​22565)
  • [flake8-annotations] Don't suggest NoReturn for functions raising NotImplementedError (ANN201, ANN202, ANN205, ANN206) (#​21311)
  • [pyupgrade] Make fix unsafe if it deletes comments (UP017) (#​22873)
  • [pyupgrade] Make fix unsafe if it deletes comments (UP020) (#​22872)
  • [pyupgrade] Make fix unsafe if it deletes comments (UP033) (#​22871)
  • [refurb] Do not add abc.ABC if already present (FURB180) (#​22234)
  • [refurb] Make fix unsafe if it deletes comments (FURB110) (#​22768)
  • [ruff] Add sub-diagnostics with permissions (RUF064) (#​22972)
Server
  • Identify notebooks by LSP didOpen instead of .ipynb file extension (#​22810)
CLI
  • Add --color CLI option to force colored output (#​22806)
Documentation
  • Document - stdin convention in CLI help text (#​22817)
  • [refurb] Change example to re.search with ^ anchor (FURB167) (#​22984)
  • Fix link to Sphinx code block directives (#​23041)
  • [pydocstyle] Clarify which quote styles are allowed (D300) (#​22825)
  • [flake8-bugbear] Improve docs for no-explicit-stacklevel (B028) (#​22538)
Other changes
Contributors

v0.14.14

Compare Source

Release Notes

Released on 2026-01-22.

Preview features
  • Preserve required parentheses in lambda bodies (#​22747)
  • Combine range suppression code diagnostics (#​22613)
  • [airflow] Second positional argument to Asset/Dataset should not be a dictionary (AIR303) (#​22453)
  • [ruff] Detect duplicate entries in __all__ (RUF068) (#​22114)
Bug fixes
  • [pyupgrade] Allow shadowing non-builtin bindings (UP029) (#​22749)
  • [pyupgrade] Apply UP045 to string arguments of typing.cast (#​22320)
  • [flake8-pie] Detect duplicated declared class fields in PIE794 (#​22717)
Rule changes
Documentation
  • Add --exit-non-zero-on-format to formatter exit codes section (#​22761)
  • Update contributing guide for adding a new rule (#​22779)
  • [FastAPI] Document fix safety for FAST001 (#​22655)
  • [flake8-async] Tweak explanation to focus on latency/efficiency tradeoff (ASYNC110) (#​22715)
  • [pandas-vet] Make example error out-of-the-box (PD002) (#​22561)
  • [refurb] Make the example work out of box (FURB101) (#​22770)
  • [refurb] Make the example work out of box (FURB103) (#​22769)
Contributors

Install ruff 0.14.14

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.ps1 | iex"

Download ruff 0.14.14

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.13

Release Notes

Released on 2026-01-15.

This is a follow-up release to 0.14.12. Because of an issue publishing the WASM packages, there is no GitHub release or Git tag for 0.14.12, although the package was published to PyPI. The contents of the 0.14.13 release are identical to 0.14.12.

0.14.12

Preview features
  • [flake8-blind-except] Allow more logging methods (BLE001) (#​22057)
  • [ruff] Respect lint.pydocstyle.property-decorators in RUF066 (#​22515)
Bug fixes
  • Fix configuration path in --show-settings (#​22478)
  • Respect fmt: skip for multiple statements on the same logical line (#​22119)
Rule changes
  • [pydocstyle] Update Rust crate imperative to v1.0.7 (D401) (#​22519)
  • [isort] Insert imports in alphabetical order (I002) (#​22493)
Documentation
  • Add llms.txt support for documentation (#​22463)
  • Use prek in documentation and CI (#​22505)
  • [flake8-pytest-style] Add check parameter example to PT017 docs (#​22546)
  • [ruff] Make example error out-of-the-box (RUF103) (#​22558)
  • [ruff] document RUF100 trailing comment fix behavior (#​22479)
Other changes
  • wasm: Require explicit logging initialization (#​22587)
Contributors

Install ruff 0.14.13

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.ps1 | iex"

Download ruff 0.14.13

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.11

Compare Source

Release Notes

Released on 2026-01-08.

Preview features
  • Consolidate diagnostics for matched disable/enable suppression comments (#​22099)
  • Report diagnostics for invalid/unmatched range suppression comments (#​21908)
  • [airflow] Passing positional argument into airflow.lineage.hook.HookLineageCollector.create_asset is not allowed (AIR303) (#​22046)
  • [refurb] Mark FURB192 fix as always unsafe (#​22210)
  • [ruff] Add non-empty-init-module (RUF067) (#​22143)
Bug fixes
  • Fix GitHub format for multi-line diagnostics (#​22108)
  • [flake8-unused-arguments] Mark **kwargs in TypeVar as used (ARG001) (#​22214)
Rule changes
  • Add help: subdiagnostics for several Ruff rules that can sometimes appear to disagree with ty (#​22331)
  • [pylint] Demote PLW1510 fix to display-only (#​22318)
  • [pylint] Ignore identical members (PLR1714) (#​22220)
  • [pylint] Improve diagnostic range for PLC0206 (#​22312)
  • [ruff] Improve fix title for RUF102 invalid rule code (#​22100)
  • [flake8-simplify]: Avoid unnecessary builtins import for SIM105 (#​22358)
Configuration
  • Allow Python 3.15 as valid target-version value in preview (#​22419)
  • Check required-version before parsing rules (#​22410)
  • Include configured src directories when resolving graphs (#​22451)
Documentation
  • Update T201 suggestion to not use root logger to satisfy LOG015 (#​22059)
  • Fix iter example in unsafe fixes doc (#​22118)
  • [flake8_print] better suggestion for basicConfig in T201 docs (#​22101)
  • [pylint] Restore the fix safety docs for PLW0133 (#​22211)
  • Fix Jupyter notebook discovery info for editors (#​22447)
Contributors

Install ruff 0.14.11

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.ps1 | iex"

Download ruff 0.14.11

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.10

Compare Source

Release Notes

Released on 2025-12-18.

Preview features
  • [formatter] Fluent formatting of method chains (#​21369)
  • [formatter] Keep lambda parameters on one line and parenthesize the body if it expands (#​21385)
  • [flake8-implicit-str-concat] New rule to prevent implicit string concatenation in collections (ISC004) (#​21972)
  • [flake8-use-pathlib] Make fixes unsafe when types change in compound statements (PTH104, PTH105, PTH109, PTH115) (#​22009)
  • [refurb] Extend support for Path.open (FURB101, FURB103) (#​21080)
Bug fixes
  • [pyupgrade] Fix parsing named Unicode escape sequences (UP032) (#​21901)
Rule changes
  • [eradicate] Ignore ruff:disable and ruff:enable comments in ERA001 (#​22038)
  • [flake8-pytest-style] Allow match and check keyword arguments without an expected exception type (PT010) (#​21964)
  • [syntax-errors] Annotated name cannot be global (#​20868)
Documentation
  • Add uv and ty to the Ruff README (#​21996)
  • Document known lambda formatting deviations from Black (#​21954)
  • Update setup.md (#​22024)
  • [flake8-bandit] Fix broken link (S704) (#​22039)
Other changes
  • Fix playground Share button showing "Copied!" before clipboard copy completes (#​21942)
Contributors

Install ruff 0.14.10

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.ps1 | iex"

Download ruff 0.14.10

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.9

Compare Source

Release Notes

Released on 2025-12-11.

Preview features
  • [ruff] New RUF100 diagnostics for unused range suppressions (#​21783)
  • [pylint] Detect subclasses of builtin exceptions (PLW0133) (#​21382)
Bug fixes
  • Fix comment placement in lambda parameters (#​21868)
  • Skip over trivia tokens after re-lexing (#​21895)
  • [flake8-bandit] Fix false positive when using non-standard CSafeLoader path (S506). (#​21830)
  • [flake8-bugbear] Accept immutable slice default arguments (B008) (#​21823)
Rule changes
  • [pydocstyle] Suppress D417 for parameters with Unpack annotations (#​21816)
Performance
  • Use memchr for computing line indexes (#​21838)
Documentation
  • Document *.pyw is included by default in preview (#​21885)
  • Document range suppressions, reorganize suppression docs (#​21884)
  • Update mkdocs-material to 9.7.0 (Insiders now free) (#​21797)
Contributors

Install ruff 0.14.9

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.9/ruff-installer.ps1 | iex"

Download ruff 0.14.9

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.8

Compare Source

Release Notes

Released on 2025-12-04.

Preview features
  • [flake8-bugbear] Catch yield expressions within other statements (B901) (#​21200)
  • [flake8-use-pathlib] Mark fixes unsafe for return type changes (PTH104, PTH105, PTH109, PTH115) (#​21440)
Bug fixes
  • Fix syntax error false positives for await outside functions (#​21763)
  • [flake8-simplify] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (SIM222, SIM223) (#​21479)
Documentation
  • Suggest using --output-file option in GitLab integration (#​21706)
Other changes
  • [syntax-error] Default type parameter followed by non-default type parameter (#​21657)
Contributors

Install ruff 0.14.8

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.8/ruff-installer.ps1 | iex"

Download ruff 0.14.8

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.7

Compare Source

Release Notes

Released on 2025-11-28.

Preview features
  • [flake8-bandit] Handle string literal bindings in suspicious-url-open-usage (S310) (#​21469)
  • [pylint] Fix PLR1708 false positives on nested functions (#​21177)
  • [pylint] Fix suppression for empty dict without tuple key annotation (PLE1141) (#​21290)
  • [ruff] Add rule RUF066 to detect unnecessary class properties (#​21535)
  • [ruff] Catch more dummy variable uses (RUF052) (#​19799)
Bug fixes
  • [server] Set severity for non-rule diagnostics (#​21559)
  • [flake8-implicit-str-concat] Avoid invalid fix in (ISC003) (#​21517)
  • [parser] Fix panic when parsing IPython escape command expressions (#​21480)
CLI
  • Show partial fixability indicator in statistics output (#​21513)
Contributors

Install ruff 0.14.7

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.7/ruff-installer.ps1 | iex"

Download ruff 0.14.7

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.6

Compare Source

Release Notes

Released on 2025-11-21.

Preview features
  • [flake8-bandit] Support new PySNMP API paths (S508, S509) (#​21374)
Bug fixes
  • Adjust own-line comment placement between branches (#​21185)
  • Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value (#​20418)
  • Fix panic when formatting comments in unary expressions (#​21501)
  • Respect fmt: skip for compound statements on a single line (#​20633)
  • [refurb] Fix FURB103 autofix (#​21454)
  • [ruff] Fix false positive for complex conversion specifiers in logging-eager-conversion (RUF065) (#​21464)
Rule changes
  • [ruff] Avoid false positive on ClassVar reassignment (RUF012) (#​21478)
CLI
  • Render hyperlinks for lint errors (#​21514)
  • Add a ruff analyze option to skip over imports in TYPE_CHECKING blocks (#​21472)
Documentation
  • Limit eglot-format hook to eglot-managed Python buffers (#​21459)
  • Mention force-exclude in "Configuration > Python file discovery" (#​21500)
Contributors

Install ruff 0.14.6

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.ps1 | iex"

Download ruff 0.14.6

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.5

Compare Source

Release Notes

Released on 2025-11-13.

Preview features
  • [flake8-simplify] Apply SIM113 when index variable is of type int (#​21395)
  • [pydoclint] Fix false positive when Sphinx directives follow a "Raises" section (DOC502) (#​20535)
  • [pydoclint] Support NumPy-style comma-separated parameters (DOC102) (#​20972)
  • [refurb] Auto-fix annotated assignments (FURB101) (#​21278)
  • [ruff] Ignore str() when not used for simple conversion (RUF065) (#​21330)
Bug fixes
  • Fix syntax error false positive on alternative match patterns (#​21362)
  • [flake8-simplify] Fix false positive for iterable initializers with generator arguments (SIM222) (#​21187)
  • [pyupgrade] Fix false positive on relative imports from local .builtins module (UP029) (#​21309)
  • [pyupgrade] Consistently set the deprecated tag (UP035) (#​21396)
Rule changes
  • [refurb] Detect empty f-strings (FURB105) (#​21348)
CLI
  • Add option to provide a reason to --add-noqa (#​21294)
  • Add upstream linter URL to ruff linter --output-format=json (#​21316)
  • Add color to --help (#​21337)
Documentation
  • Add a new "Opening a PR" section to the contribution guide (#​21298)
  • Added the PyScripter IDE to the list of "Who is using Ruff?" (#​21402)
  • Update PyCharm setup instructions (#​21409)
  • [flake8-annotations] Add link to allow-star-arg-any option (ANN401) (#​21326)
Other changes
  • [configuration] Improve error message when line-length exceeds u16::MAX (#​21329)
Contributors

Install ruff 0.14.5

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.ps1 | iex"

Download ruff 0.14.5

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.4

Compare Source

Release Notes

Released on 2025-11-06.

Preview features
  • [formatter] Allow newlines after function headers without docstrings (#​21110)
  • [formatter] Avoid extra parentheses for long match patterns with as captures (#​21176)
  • [refurb] Expand fix safety for keyword arguments and Decimals (FURB164) (#​21259)
  • [refurb] Preserve argument ordering in autofix (FURB103) (#​20790)
Bug fixes
  • [server] Fix missing diagnostics for notebooks (#​21156)
  • [flake8-bugbear] Ignore non-NFKC attribute names in B009 and B010 (#​21131)
  • [refurb] Fix false negative for underscores before sign in Decimal constructor (FURB157) (#​21190)
  • [ruff] Fix false positives on starred arguments (RUF057) (#​21256)
Rule changes
  • [airflow] extend deprecated argument concurrency in airflow..DAG (AIR301) (#​21220)
Documentation
  • Improve extend docs (#​21135)
  • [flake8-comprehensions] Fix typo in C416 documentation (#​21184)
  • Revise Ruff setup instructions for Zed editor (#​20935)
Other changes
  • Make ruff analyze graph work with jupyter notebooks (#​21161)
Contributors

Install ruff 0.14.4

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.4/ruff-installer.ps1 | iex"

Download ruff 0.14.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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.3

Compare Source

Release Notes

Released on 2025-10-30.

Preview features
  • Respect --output-format with --watch (#​21097)
  • [pydoclint] Fix false positive on explicit exception re-raising (DOC501, DOC502) (#​21011)
  • [pyflakes] Revert to stable behavior if imports for module lie in alternate branches for F401 (#​20878)
  • [pylint] Implement stop-iteration-return (PLR1708) (#​20733)
  • [ruff] Add support for additional eager conversion patterns (RUF065) (#​20657)
Bug fixes
  • Fix finding keyword range for clause header after statement ending with semicolon (#​21067)
  • Fix syntax error false positive on nested alternative patterns (#​21104)
  • [ISC001] Fix panic when string literals are unclosed (#​21034)
  • [flake8-django] Apply DJ001 to annotated fields (#​20907)
  • [flake8-pyi] Fix PYI034 to not trigger on metaclasses (PYI034) (#​20881)
  • [flake8-type-checking] Fix TC003 false positive with future-annotations (#​21125)
  • [pyflakes] Fix false positive for __class__ in lambda expressions within class definitions (F821) (#​20564)
  • [pyupgrade] Fix false positive for TypeVar with default on Python <3.13 (UP046,UP047) (#​21045)
Rule changes
  • Add missing docstring sections to the numpy list (#​20931)
  • [airflow] Extend airflow.models..Param check (AIR311) (#​21043)
  • [airflow] Warn that airflow....DAG.create_dagrun has been removed (AIR301) (#​21093)
  • [refurb] Preserve digit separators in Decimal constructor (FURB157) (#​20588)
Server
  • Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics (#​21105)
Documentation
  • [flake8-bandit] Fix correct example for S308 (#​21128)
Other changes
  • Clearer error message when line-length goes beyond threshold (#​21072)
Contributors

Install ruff 0.14.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.3/ruff-installer.ps1 | iex"

Download ruff 0.14.3

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.2

Compare Source

Release Notes

Released on 2025-10-23.

Preview features
  • [flake8-gettext] Resolve qualified names and built-in bindings (INT001, INT002, INT003) (#​19045)
Bug fixes
  • Avoid reusing nested, interpolated quotes before Python 3.12 (#​20930)
  • Catch syntax errors in nested interpolations before Python 3.12 (#​20949)
  • [fastapi] Handle ellipsis defaults in FAST002 autofix (#​20810)
  • [flake8-simplify] Skip SIM911 when unknown arguments are present (#​20697)
  • [pyupgrade] Always parenthesize assignment expressions in fix for f-string (UP032) (#​21003)
  • [pyupgrade] Fix UP032 conversion for decimal ints with underscores (#​21022)
  • [fastapi] Skip autofix for keyword and __debug__ path params (FAST003) (#​20960)
Rule changes
  • [flake8-bugbear] Skip B905 and B912 for fewer than two iterables and no starred arguments (#​20998)
  • [ruff] Use DiagnosticTag for more pyflakes and pandas rules (#​20801)
CLI
  • Improve JSON output from ruff rule (#​20168)
Documentation
Other changes
  • [syntax-errors] Name is parameter and global (#​20426)
  • [syntax-errors] Alternative match patterns bind different names (#​20682)
Contributors

Install ruff 0.14.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.2/ruff-installer.ps1 | iex"

Download ruff 0.14.2

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.1

Compare Source

Release Notes

Released on 2025-10-16.

Preview features
  • [formatter] Remove parentheses around multiple exception types on Python 3.14+ (#​20768)
  • [flake8-bugbear] Omit annotation in preview fix for B006 (#​20877)
  • [flake8-logging-format] Avoid dropping implicitly concatenated pieces in the G004 fix (#​20793)
  • [pydoclint] Implement docstring-extraneous-parameter (DOC102) (#​20376)
  • [pyupgrade] Extend UP019 to detect typing_extensions.Text (UP019) (#​20825)
  • [pyupgrade] Fix false negative for TypeVar with default argument in non-pep695-generic-class (UP046) (#​20660)
Bug fixes
  • Fix false negatives in Truthiness::from_expr for lambdas, generators, and f-strings (#​20704)
  • Fix syntax error false positives for escapes and quotes in f-strings (#​20867)
  • Fix syntax error false positives on parenthesized context managers (#​20846)
  • [fastapi] Fix false positives for path parameters that FastAPI doesn't recognize (FAST003) (#​20687)
  • [flake8-pyi] Fix operator precedence by adding parentheses when needed (PYI061) (#​20508)
  • [ruff] Suppress diagnostic for f-string interpolations with debug text (RUF010) (#​20525)
Rule changes
  • [airflow] Add warning to airflow.datasets.DatasetEvent usage (AIR301) (#​20551)
  • [flake8-bugbear] Mark B905 and B912 fixes as unsafe (#​20695)
  • Use DiagnosticTag for more rules - changes display in editors (#​20758,#​20734)
Documentation
  • Update Python compatibility from 3.13 to 3.14 in README.md (#​20852)
  • Update lint.flake8-type-checking.quoted-annotations docs (#​20765)
  • Update setup instructions for Zed 0.208.0+ (#​20902)
  • [flake8-datetimez] Clarify docs for several rules (#​20778)
  • Fix typo in RUF015 description (#​20873)
Other changes
  • Reduce binary size (#​20863)
  • Improved error recovery for unclosed strings (including f- and t-strings) (#​20848)
Contributors

Install ruff 0.14.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.1/ruff-installer.ps1 | iex"

Download ruff 0.14.1

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.14.0

Compare Source

Release Notes

Released on 2025-10-07.

Breaking changes
  • Update default and latest Python versions for 3.14 (#​20725)
Preview features
  • [flake8-bugbear] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (B006) (#​20024)
  • [refurb] Add fixes for FURB101 and FURB103 (#​20520)
  • [ruff] Extend FA102 with listed PEP 585-compatible APIs (#​20659)
Bug fixes
  • [flake8-annotations] Fix return type annotations to handle shadowed builtin symbols (ANN201, ANN202, ANN204, ANN205, ANN206) (#​20612)
  • [flynt] Fix f-string quoting for mixed quote joiners (FLY002) (#​20662)
  • [isort] Fix inserting required imports before future imports (I002) (#​20676)
  • [ruff] Handle argfile expansion errors gracefully (#​20691)
  • [ruff] Skip RUF051 if else/elif block is present (#​20705)
  • [ruff] Improve handling of intermixed comments inside from-imports (#​20561)
Documentation
  • [flake8-comprehensions] Clarify fix safety documentation (C413) (#​20640)
Contributors

Install ruff 0.14.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.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.14.0/ruff-installer.ps1 | iex"

Download ruff 0.14.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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.13.3

Compare Source

Release Notes

Released on 2025-10-02.

Preview features
  • Display diffs for ruff format --check and add support for different output formats (#​20443)
  • [pyflakes] Handle some common submodule import situations for unused-import (F401) (#​20200)
  • [ruff] Do not flag %r + repr() combinations (RUF065) (#​20600)
Bug fixes
  • [cli] Add conflict between --add-noqa and --diff options (#​20642)
  • [pylint] Exempt required imports from PLR0402 (#​20381)
  • [pylint] Fix missing max-nested-blocks in settings display (#​20574)
  • [pyupgrade] Prevent infinite loop with I002 and UP026 (#​20634)
Rule changes
  • [flake8-simplify] Improve help message clarity (SIM105) (#​20548)
Documentation
  • Add the The Basics title back to CONTRIBUTING.md (#​20624)
  • Fixed documentation for try_consider_else (#​20587)
  • [isort] Clarify dependency between order-by-type and case-sensitive settings (#​20559)
  • [pylint] Clarify fix safety to include left-hand hashability (PLR6201) (#​20518)
Other changes
  • [playground] Fix quick fixes for empty ranges in playground (#​20599)
Contributors

Install ruff 0.13.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.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.13.3/ruff-installer.ps1 | iex"

Download ruff 0.13.3

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.13.2

Compare Source

Release Notes

Released on 2025-09-25.

Preview features
  • [flake8-async] Implement blocking-path-method (ASYNC240) (#​20264)
  • [flake8-bugbear] Implement map-without-explicit-strict (B912) (#​20429)
  • [flake8-bultins] Detect class-scope builtin shadowing in decorators, default args, and attribute initializers (A003) (#​20178)
  • [ruff] Implement logging-eager-conversion (RUF065) (#​19942)
  • Include .pyw files by default when linting and formatting (#​20458)
Bug fixes
  • Deduplicate input paths (#​20105)
  • [flake8-comprehensions] Preserve trailing commas for single-element lists (C409) (#​19571)
  • [flake8-pyi] Avoid syntax error from conflict with PIE790 (PYI021) (#​20010)
  • [flake8-simplify] Correct fix for positive maxsplit without separator (SIM905) (#​20056)
  • [pyupgrade] Fix UP008 not to apply when __class__ is a local variable (#​20497)
  • [ruff] Fix B004 to skip invalid hasattr/getattr calls (#​20486)
  • [ruff] Replace -nan with nan when using the value to construct a Decimal (FURB164 ) (#​20391)
Documentation
  • Add 'Finding ways to help' to CONTRIBUTING.md (#​20567)
  • Update import path to ruff-wasm-web (#​20539)
  • [flake8-bandit] Clarify the supported hashing functions (S324) (#​20534)
Other changes
  • [playground] Allow hover quick fixes to appear for overlapping diagnostics (#​20527)
  • [playground] Fix non‑BMP code point handling in quick fixes and markers (#​20526)
Contributors

Install ruff 0.13.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.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.13.2/ruff-installer.ps1 | iex"

Download ruff 0.13.2

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.13.1

Compare Source

Release Notes

Released on 2025-09-18.

Preview features
  • [flake8-simplify] Detect unnecessary None default for additional key expression types (SIM910) (#​20343)
  • [flake8-use-pathlib] Add fix for PTH123 (#​20169)
  • [flake8-use-pathlib] Fix PTH101, PTH104, PTH105, PTH121 fixes (#​20143)
  • [flake8-use-pathlib] Make PTH111 fix unsafe because it can change behavior (#​20215)
  • [pycodestyle] Fix E301 to only trigger for functions immediately within a class (#​19768)
  • [refurb] Mark single-item-membership-test fix as always unsafe (FURB171) (#​20279)
Bug fixes
  • Handle t-strings for token-based rules and suppression comments (#​20357)
  • [flake8-bandit] Fix truthiness: dict-only ** displays not truthy for shell (S602, S604, S609) (#​20177)
  • [flake8-simplify] Fix diagnostic to show correct method name for str.rsplit calls (SIM905) (#​20459)
  • [flynt] Use triple quotes for joined raw strings with newlines (FLY002) (#​20197)
  • [pyupgrade] Fix false positive when class name is shadowed by local variable (UP008) (#​20427)
  • [pyupgrade] Prevent infinite loop with I002 and UP026 (#​20327)
  • [ruff] Recognize t-strings, generators, and lambdas in invalid-index-type (RUF016) (#​20213)
Rule changes
  • [RUF102] Respect rule redirects in invalid rule code detection (#​20245)
  • [flake8-bugbear] Mark the fix for unreliable-callable-check as always unsafe (B004) (#​20318)
  • [ruff] Allow dataclass attribute value instantiation from nested frozen dataclass (RUF009) (#​20352)
CLI
  • Add fixes to output-format=sarif (#​20300)
  • Treat panics as fatal diagnostics, sort panics last (#​20258)
Documentation
  • [ruff] Add analyze.string-imports-min-dots to settings (#​20375)
  • Update README.md with Albumentations new repository URL (#​20415)
Other changes
  • Bump MSRV to Rust 1.88 (#​20470)
  • Enable inline noqa for multiline strings in playground (#​20442)
Contributors

Install ruff 0.13.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.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.13.1/ruff-installer.ps1 | iex"

Download ruff 0.13.1

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.13.0

Compare Source

Release Notes

Check out the blog post for a migration guide and overview of the changes!

Breaking changes
  • Several rules can now add from __future__ import annotations automatically

    TC001, TC002, TC003, RUF013, and UP037 now add from __future__ import annotations as part of their fixes when the lint.future-annotations setting is enabled. This allows the rules to move more imports into TYPE_CHECKING blocks (TC001, TC002, and TC003), use PEP 604 union syntax on Python versions before 3.10 (RUF013), and unquote more annotations (UP037).

  • Full module paths are now used to verify first-party modules

    Ruff now checks that the full path to a module exists on disk before categorizing it as a first-party import. This change makes first-party import detection more accurate, helping to avoid false positives on local directories with the same name as a third-party dependency, for example. See the FAQ section on import categorization for more details.

  • Deprecated rules must now be selected by exact rule code

    Ruff will no longer activate deprecated rules selected by their group name or prefix. As noted below, the two remaining deprecated rules were also removed in this release, so this won't affect any current rules, but it will still affect any deprecations in the future.

  • The deprecated macOS configuration directory fallback has been removed

    Ruff will no longer look for a user-level configuration file at ~/Library/Application Support/ruff/ruff.toml on macOS. This feature was deprecated in v0.5 in favor of using the XDG specification (usually resolving to ~/.config/ruff/ruff.toml), like on Linux. The fallback and accompanying deprecation warning have now been removed.

Removed Rules

The following rules have been removed:

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

Preview features
  • [pyupgrade] Enable UP043 in stub files (#​20027)
Bug fixes
  • [pyupgrade] Apply UP008 only when the __class__ cell exists (#​19424)
  • [ruff] Fix empty f-string detection in in-empty-collection (RUF060) (#​20249)
Server
  • Add support for using uv as an alternative formatter backend (#​19665)
Documentation
  • [pep8-naming] Fix formatting of __all__ (N816) (#​20301)

Contributors

Install ruff 0.13.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.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.13.0/ruff-installer.ps1 | iex"

Download ruff 0.13.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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.12

Compare Source

Release Notes

Preview features
  • Show fixes by default (#​19919)
  • [airflow] Convert DatasetOrTimeSchedule(datasets=...) to AssetOrTimeSchedule(assets=...) (AIR311) (#​20202)
  • [airflow] Improve the AIR002 error message (#​20173)
  • [airflow] Move airflow.operators.postgres_operator.Mapping from AIR302 to AIR301 (#​20172)
  • [flake8-async] Implement blocking-input rule (ASYNC250) (#​20122)
  • [flake8-use-pathlib] Make PTH119 and PTH120 fixes unsafe because they can change behavior (#​20118)
  • [pylint] Add U+061C to PLE2502 (#​20106)
  • [ruff] Fix false negative for empty f-strings in deque calls (RUF037) (#​20109)
Bug fixes
  • Less confidently mark f-strings as empty when inferring truthiness (#​20152)
  • [fastapi] Fix false positive for paths with spaces around parameters (FAST003) (#​20077)
  • [flake8-comprehensions] Skip C417 when lambda contains yield/yield from (#​20201)
  • [perflint] Handle tuples in dictionary comprehensions (PERF403) (#​19934)
Rule changes
  • [pycodestyle] Preserve return type annotation for ParamSpec (E731) (#​20108)
Documentation

Contributors

Install ruff 0.12.12

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-installer.ps1 | iex"

Download ruff 0.12.12

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.11

Compare Source

Release Notes

Preview features
  • [airflow] Extend AIR311 and AIR312 rules (#​20082)
  • [airflow] Replace wrong path airflow.io.storage with airflow.io.store (AIR311) (#​20081)
  • [flake8-async] Implement blocking-http-call-httpx-in-async-function (ASYNC212) (#​20091)
  • [flake8-logging-format] Add auto-fix for f-string logging calls (G004) (#​19303)
  • [flake8-use-pathlib] Add autofix for PTH211 (#​20009)
  • [flake8-use-pathlib] Make PTH100 fix unsafe because it can change behavior (#​20100)
Bug fixes
  • [pyflakes, pylint] Fix false positives caused by __class__ cell handling (F841, PLE0117) (#​20048)
  • [pyflakes] Fix allowed-unused-imports matching for top-level modules (F401) (#​20115)
  • [ruff] Fix false positive for t-strings in default-factory-kwarg (RUF026) (#​20032)
  • [ruff] Preserve relative whitespace in multi-line expressions (RUF033) (#​19647)
Rule changes
  • [ruff] Handle empty t-strings in unnecessary-empty-iterable-within-deque-call (RUF037) (#​20045)
Documentation
  • Fix incorrect D413 links in docstrings convention FAQ (#​20089)
  • [flake8-use-pathlib] Update links to the table showing the correspondence between os and pathlib (#​20103)

Contributors

Install ruff 0.12.11

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-installer.ps1 | iex"

Download ruff 0.12.11

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.10

Compare Source

Release Notes

Preview features
  • [flake8-simplify] Implement fix for maxsplit without separator (SIM905) (#​19851)
  • [flake8-use-pathlib] Add fixes for PTH102 and PTH103 (#​19514)
Bug fixes
  • [isort] Handle multiple continuation lines after module docstring (I002) (#​19818)
  • [pyupgrade] Avoid reporting __future__ features as unnecessary when they are used (UP010) (#​19769)
  • [pyupgrade] Handle nested Optionals (UP045) (#​19770)
Rule changes
  • [pycodestyle] Make E731 fix unsafe instead of display-only for class assignments (#​19700)
  • [pyflakes] Add secondary annotation showing previous definition (F811) (#​19900)
Documentation

Contributors

Install ruff 0.12.10

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-installer.ps1 | iex"

Download ruff 0.12.10

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.9

Compare Source

Release Notes

Preview features
  • [airflow] Add check for airflow.secrets.cache.SecretCache (AIR301) (#​17707)
  • [ruff] Offer a safe fix for multi-digit zeros (RUF064) (#​19847)
Bug fixes
  • [flake8-blind-except] Fix BLE001 false-positive on raise ... from None (#​19755)
  • [flake8-comprehensions] Fix false positive for C420 with attribute, subscript, or slice assignment targets (#​19513)
  • [flake8-simplify] Fix handling of U+001C..U+001F whitespace (SIM905) (#​19849)
Rule changes
  • [pylint] Use lowercase hex characters to match the formatter (PLE2513) (#​19808)
Documentation
  • Fix lint.future-annotations link (#​19876)
Other changes
  • Build riscv64 binaries for release (#​19819)

  • Add rule code to error description in GitLab output (#​19896)

  • Improve rendering of the full output format (#​19415)

    Below is an example diff for F401:

    -unused.py:8:19: F401 [*] `pathlib` imported but unused
    +F401 [*] `pathlib` imported but unused
    +  --> unused.py:8:19
        |
      7 | # Unused, _not_ marked as required (due to the alias).
      8 | import pathlib as non_alias
    -   |                   ^^^^^^^^^ F401
    +   |                   ^^^^^^^^^
      9 |
     10 | # Unused, marked as required.
        |
    -   = help: Remove unused import: `pathlib`
    +help: Remove unused import: `pathlib`
    

    For now, the primary difference is the movement of the filename, line number, and column information to a second line in the header. This new representation will allow us to make further additions to Ruff's diagnostics, such as adding sub-diagnostics and multiple annotations to the same snippet.

Contributors

Install ruff 0.12.9

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.9/ruff-installer.ps1 | iex"

Download ruff 0.12.9

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-riscv64gc-unknown-linux-gnu.tar.gz RISCV 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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.8

Compare Source

Release Notes

Preview features
  • [flake8-use-pathlib] Expand PTH201 to check all PurePath subclasses (#​19440)
Bug fixes
  • [flake8-blind-except] Change BLE001 to correctly parse exception tuples (#​19747)
  • [flake8-errmsg] Exclude typing.cast from EM101 (#​19656)
  • [flake8-simplify] Fix raw string handling in SIM905 for embedded quotes (#​19591)
  • [flake8-import-conventions] Avoid false positives for NFKC-normalized __debug__ import aliases in ICN001 (#​19411)
  • [isort] Fix syntax error after docstring ending with backslash (I002) (#​19505)
  • [pylint] Mark PLC0207 fixes as unsafe when *args unpacking is present (#​19679)
  • [pyupgrade] Prevent infinite loop with I002 (UP010, UP035) (#​19413)
  • [ruff] Parenthesize generator expressions in f-strings (RUF010) (#​19434)
Rule changes
  • [eradicate] Don't flag pyrefly pragmas as unused code (ERA001) (#​19731)
Documentation
Other changes
  • Include column numbers in GitLab output format (#​19708)
  • Always expand tabs to four spaces in diagnostics (#​19618)
  • Update pre-commit's ruff id (#​19654)

Contributors

Install ruff 0.12.8

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.8/ruff-installer.ps1 | iex"

Download ruff 0.12.8

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.7

Release Notes

This is a follow-up release to 0.12.6. Because of an issue in the package metadata, 0.12.6 failed to publish fully to PyPI and has been yanked. Similarly, there is no GitHub release or Git tag for 0.12.6. The contents of the 0.12.7 release are identical to 0.12.6, except for the updated metadata.

0.12.6 Release Notes

Preview features
  • [flake8-commas] Add support for trailing comma checks in type parameter lists (COM812, COM819) (#​19390)
  • [pylint] Implement auto-fix for missing-maxsplit-arg (PLC0207) (#​19387)
  • [ruff] Offer fixes for RUF039 in more cases (#​19065)
Bug fixes
  • Support .pyi files in ruff analyze graph (#​19611)
  • [flake8-pyi] Preserve inline comment in ellipsis removal (PYI013) (#​19399)
  • [perflint] Ignore rule if target is global or nonlocal (PERF401) (#​19539)
  • [pyupgrade] Fix UP030 to avoid modifying double curly braces in format strings (#​19378)
  • [refurb] Ignore decorated functions for FURB118 (#​19339)
  • [refurb] Mark int and bool cases for Decimal.from_float as safe fixes (FURB164) (#​19468)
  • [ruff] Fix RUF033 for named default expressions (#​19115)
Rule changes
  • [flake8-blind-except] Change BLE001 to permit logging.critical(..., exc_info=True) (#​19520)
Performance
  • Add support for specifying minimum dots in detected string imports (#​19538)

Contributors

Install ruff 0.12.7

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.7/ruff-installer.ps1 | iex"

Download ruff 0.12.7

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.5

Compare Source

Release Notes

Preview features
  • [flake8-use-pathlib] Add autofix for PTH101, PTH104, PTH105, PTH121 (#​19404)
  • [ruff] Support byte strings (RUF055) (#​18926)
Bug fixes
  • Fix unreachable panic in parser (#​19183)
  • [flake8-pyi] Skip fix if all Union members are None (PYI016) (#​19416)
  • [perflint] Parenthesize generator expressions (PERF401) (#​19325)
  • [pylint] Handle empty comments after line continuation (PLR2044) (#​19405)
Rule changes
  • [pep8-naming] Fix N802 false positives for CGIHTTPRequestHandler and SimpleHTTPRequestHandler (#​19432)

Contributors

Install ruff 0.12.5

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-installer.ps1 | iex"

Download ruff 0.12.5

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.4

Compare Source

Release Notes

Preview features
  • [flake8-type-checking, pyupgrade, ruff] Add from __future__ import annotations when it would allow new fixes (TC001, TC002, TC003, UP037, RUF013) (#​19100)
  • [flake8-use-pathlib] Add autofix for PTH109 (#​19245)
  • [pylint] Detect indirect pathlib.Path usages for unspecified-encoding (PLW1514) (#​19304)
Bug fixes
  • [flake8-bugbear] Fix B017 false negatives for keyword exception arguments (#​19217)
  • [flake8-use-pathlib] Fix false negative on direct Path() instantiation (PTH210) (#​19388)
  • [flake8-django] Fix DJ008 false positive for abstract models with type-annotated abstract field (#​19221)
  • [isort] Fix I002 import insertion after docstring with multiple string statements (#​19222)
  • [isort] Treat form feed as valid whitespace before a semicolon (#​19343)
  • [pydoclint] Fix SyntaxError from fixes with line continuations (D201, D202) (#​19246)
  • [refurb] FURB164 fix should validate arguments and should usually be marked unsafe (#​19136)
Rule changes
  • [flake8-use-pathlib] Skip single dots for invalid-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] Allow strict kwarg when checking for starmap-zip (RUF058) in Python 3.14+ (#​19333)
Documentation

Contributors

Install ruff 0.12.4

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.4/ruff-installer.ps1 | iex"

Download ruff 0.12.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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.3

Compare Source

Release Notes

Preview features
  • [flake8-bugbear] Support non-context-manager calls in B017 (#​19063)
  • [flake8-use-pathlib] Add autofixes for PTH100, PTH106, PTH107, PTH108, PTH110, PTH111, PTH112, PTH113, PTH114, PTH115, PTH117, PTH119, PTH120 (#​19213)
  • [flake8-use-pathlib] Add autofixes for PTH203, PTH204, PTH205 (#​18922)
Bug fixes
  • [flake8-return] Fix false-positive for variables used inside nested functions in RET504 (#​18433)
  • Treat form feed as valid whitespace before a line continuation (#​19220)
  • [flake8-type-checking] Fix syntax error introduced by fix (TC008) (#​19150)
  • [pyupgrade] Keyword arguments in super should suppress the UP008 fix (#​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 unnecessary SyntaxError (E114) (#​19190)
  • [pydoclint] Make example error out-of-the-box (DOC501) (#​19218)
  • [pylint, pyupgrade] Fix syntax errors in examples (PLW1501, UP028) (#​19127)
  • [pylint] Update missing-maxsplit-arg docs and error to suggest proper usage (PLC0207) (#​18949)
  • [flake8-bandit] Make example error out-of-the-box (S412) (#​19241)

Contributors

Install ruff 0.12.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.3/ruff-installer.ps1 | iex"

Download ruff 0.12.3

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.2

Compare Source

Release Notes

Preview features
  • [flake8-pyi] Expand Optional[A] to A | None (PYI016) (#​18572)
  • [pyupgrade] Mark UP008 fix safe if no comments are in range (#​18683)
Bug fixes
  • [flake8-comprehensions] Fix C420 to prepend whitespace when needed (#​18616)
  • [perflint] Fix PERF403 panic on attribute or subscription loop variable (#​19042)
  • [pydocstyle] Fix D413 infinite loop for parenthesized docstring (#​18930)
  • [pylint] Fix PLW0108 autofix 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 more field calls from attrs (RUF009) (#​19021)
  • [ruff] Fix syntax error introduced for an empty string followed by a u-prefixed string (UP025) (#​18899)
Rule changes
  • [flake8-executable] Allow uvx in shebang line (EXE003) (#​18967)
  • [pandas] Avoid flagging PD002 if pandas is not imported (#​18963)
  • [pyupgrade] Avoid PEP-604 unions with typing.NamedTuple (UP007, UP045) (#​18682)
Documentation
  • Document link between import-outside-top-level (PLC0415) and lint.flake8-tidy-imports.banned-module-level-imports (#​18733)
  • Fix description of the format.skip-magic-trailing-comma example (#​19095)
  • [airflow] Make AIR302 example error out-of-the-box (#​18988)
  • [airflow] Make AIR312 example error out-of-the-box (#​18989)
  • [flake8-annotations] Make ANN401 example error out-of-the-box (#​18974)
  • [flake8-async] Make ASYNC100 example error out-of-the-box (#​18993)
  • [flake8-async] Make ASYNC105 example error out-of-the-box (#​19002)
  • [flake8-async] Make ASYNC110 example error out-of-the-box (#​18975)
  • [flake8-async] Make ASYNC210 example error out-of-the-box (#​18977)
  • [flake8-async] Make ASYNC220, ASYNC221, and ASYNC222 examples error out-of-the-box (#​18978)
  • [flake8-async] Make ASYNC251 example error out-of-the-box (#​18990)
  • [flake8-bandit] Make S201 example error out-of-the-box (#​19017)
  • [flake8-bandit] Make S604 and S609 examples error out-of-the-box (#​19049)
  • [flake8-bugbear] Make B028 example error out-of-the-box (#​19054)
  • [flake8-bugbear] Make B911 example error out-of-the-box (#​19051)
  • [flake8-datetimez] Make DTZ011 example error out-of-the-box (#​19055)
  • [flake8-datetimez] Make DTZ901 example error out-of-the-box (#​19056)
  • [flake8-pyi] Make PYI032 example 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] Fix PLC0415 example (#​18970)

Contributors

Install ruff 0.12.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.2/ruff-installer.ps1 | iex"

Download ruff 0.12.2

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.1

Compare Source

Release Notes

Preview features
  • [flake8-errmsg] Extend EM101 to support byte strings (#​18867)
  • [flake8-use-pathlib] Add autofix for PTH202 (#​18763)
  • [pygrep-hooks] Add AsyncMock methods to invalid-mock-access (PGH005) (#​18547)
  • [pylint] Ignore __init__.py files in (PLC0414) (#​18400)
  • [ruff] Trigger RUF037 for empty string and byte strings (#​18862)
  • [formatter] Fix missing blank lines before decorated classes in .pyi files (#​18888)
Bug fixes
  • Avoid generating diagnostics with per-file ignores (#​18801)
  • Handle parenthesized arguments in remove_argument (#​18805)
  • [flake8-logging] Avoid false positive for exc_info=True outside logger.exception (LOG014) (#​18737)
  • [flake8-pytest-style] Enforce pytest import for decorators (#​18779)
  • [flake8-pytest-style] Mark autofix for PT001 and PT023 as unsafe if there's comments in the decorator (#​18792)
  • [flake8-pytest-style] PT001/PT023 fix makes syntax error on parenthesized decorator (#​18782)
  • [flake8-raise] Make fix unsafe if it deletes comments (RSE102) (#​18788)
  • [flake8-simplify] Fix SIM911 autofix creating a syntax error (#​18793)
  • [flake8-simplify] Fix false negatives for shadowed bindings (SIM910, SIM911) (#​18794)
  • [flake8-simplify] Preserve original behavior for except () and bare except (SIM105) (#​18213)
  • [flake8-pyi] Fix PYI041's fix causing TypeError with None | None | ... (#​18637)
  • [perflint] Fix PERF101 autofix creating a syntax error and mark autofix as unsafe if there are comments in the list call expr (#​18803)
  • [perflint] Fix false negative in PERF401 (#​18866)
  • [pylint] Avoid flattening nested min/max when outer call has single argument (PLW3301) (#​16885)
  • [pylint] Fix PLC2801 autofix creating a syntax error (#​18857)
  • [pylint] Mark PLE0241 autofix as unsafe if there's comments in the base classes (#​18832)
  • [pylint] Suppress PLE2510/PLE2512/PLE2513/PLE2514/PLE2515 autofix if the text contains an odd number of backslashes (#​18856)
  • [refurb] Detect more exotic float literals in FURB164 (#​18925)
  • [refurb] Fix FURB163 autofix creating a syntax error for yield expressions (#​18756)
  • [refurb] Mark FURB129 autofix as unsafe if there's comments in the readlines call (#​18858)
  • [ruff] Fix false positives and negatives in RUF010 (#​18690)
  • Fix casing of analyze.direction variant names (#​18892)
Rule changes
  • Fix f-string interpolation escaping in generated fixes (#​18882)
  • [flake8-return] Mark RET501 fix unsafe if comments are inside (#​18780)
  • [flake8-async] Fix detection for large integer sleep durations in ASYNC116 rule (#​18767)
  • [flake8-async] Mark autofix for ASYNC115 as unsafe if the call expression contains comments (#​18753)
  • [flake8-bugbear] Mark autofix for B004 as unsafe if the hasattr call expr contains comments (#​18755)
  • [flake8-comprehension] Mark autofix for C420 as 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] Mark F504/F522/F523 autofix 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 exotic NaN literals in PLW0177 (#​18630)
  • [pylint] Fix PLC1802 autofix creating a syntax error and mark autofix as unsafe if there's comments in the len call (#​18836)
  • [pyupgrade] Extend version detection to include sys.version_info.major (UP036) (#​18633)
  • [ruff] Add lint rule RUF064 for calling chmod with non-octal integers (#​18541)
  • [ruff] Added cls.__dict__.get('__annotations__') check (RUF063) (#​18233)
  • [ruff] Frozen dataclass default should be valid (RUF009) (#​18735)
Server
  • Consider virtual path for various server actions (#​18910)
Documentation
Other changes
  • Disallow newlines in format specifiers of single quoted f- or t-strings (#​18708)
  • [flake8-logging] Add fix safety section to LOG002 (#​18840)
  • [pyupgrade] Add fix safety section to UP010 (#​18838)

Contributors

Install ruff 0.12.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.1/ruff-installer.ps1 | iex"

Download ruff 0.12.1

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.12.0

Compare Source

Release Notes

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 match
    statement on Python versions before 3.10, and syntax errors emitted by
    CPython's compiler, such as irrefutable match patterns before the final
    case arm.

  • 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.toml is no longer included in source distributions

    The rust-toolchain.toml is used to specify a higher Rust version than Ruff's
    minimum 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:

Deprecated Rules

The following rules have been deprecated:

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

Preview features
  • [ruff] Check for non-context-manager use of pytest.raises, pytest.warns, and pytest.deprecated_call (RUF061) (#​17368)
  • [syntax-errors] Raise unsupported syntax error for template strings prior to Python 3.14 (#​18664)
Bug fixes
  • Add syntax error when conversion flag does not immediately follow exclamation mark (#​18706)
  • Add trailing space around readlines (#​18542)
  • Fix \r and \r\n handling in t- and f-string debug texts (#​18673)
  • Hug closing } 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] Fix RET504 autofix generating a syntax error (#​18428)
  • [pep8-naming] Suppress fix for N804 and N805 if the recommended name is already used (#​18472)
  • [pycodestyle] Avoid causing a syntax error in expressions spanning multiple lines (E731) (#​18479)
  • [pyupgrade] Suppress UP008 if super is shadowed (#​18688)
  • [refurb] Parenthesize lambda and ternary expressions (FURB122, FURB142) (#​18592)
  • [ruff] Handle extra arguments to deque (RUF037) (#​18614)
  • [ruff] Preserve parentheses around deque in fix for unnecessary-empty-iterable-within-deque-call (RUF037) (#​18598)
  • [ruff] Validate arguments before offering a fix (RUF056) (#​18631)
  • [ruff] Skip fix for RUF059 if dummy name is already bound (#​18509)
  • [pylint] Fix PLW0128 to check assignment targets in square brackets and after asterisks (#​18665)
Rule changes
  • Fix false positive on mutations in return statements (B909) (#​18408)
  • Treat ty: comments as pragma comments (#​18532)
  • [flake8-pyi] Apply custom-typevar-for-self to string annotations (PYI019) (#​18311)
  • [pyupgrade] Don't offer a fix for Optional[None] (UP007, UP045) (#​18545)
  • [pyupgrade] Fix super(__class__, self) detection (UP008) (#​18478)
  • [refurb] Make the fix for FURB163 unsafe for log2, log10, *args, and deleted comments (#​18645)
Server
Documentation
  • Drop confusing second * from glob pattern example for per-file-target-version (#​18709)
  • Update Neovim configuration examples (#​18491)
  • [pylint] De-emphasize __hash__ = Parent.__hash__ (PLW1641) (#​18613)
  • [refurb] Add a note about float literal handling (FURB157) (#​18615)

Contributors

Install ruff 0.12.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.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.12.0/ruff-installer.ps1 | iex"

Download ruff 0.12.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
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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.13

Compare Source

Release Notes

Preview features
Bug fixes
  • [perflint] Fix missing parentheses for lambda and ternary conditions (PERF401, PERF403) (#​18412)
  • [pyupgrade] Apply UP035 only on py313+ for get_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
  • Update editor setup docs for Neovim and Vim (#​18324)
Other changes
  • Support Python 3.14 template strings (t-strings) in formatter and parser (#​17851)

Contributors

Install ruff 0.11.13

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-installer.sh | sh
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

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.12

Compare Source

Release Notes

Preview features
  • [airflow] Revise fix titles (AIR3) (#​18215)
  • [pylint] Implement missing-maxsplit-arg (PLC0207) (#​17454)
  • [pyupgrade] New rule UP050 (useless-class-metaclass-type) (#​18334)
  • [flake8-use-pathlib] Replace os.symlink with Path.symlink_to (PTH211) (#​18337)
Bug fixes
  • [flake8-bugbear] Ignore __debug__ attribute in B010 (#​18357)
  • [flake8-async] Fix anyio.sleep argument name (ASYNC115, ASYNC116) (#​18262)
  • [refurb] Fix FURB129 autofix generating invalid syntax (#​18235)
Rule changes
  • [flake8-implicit-str-concat] Add autofix for ISC003 (#​18256)
  • [pycodestyle] Improve the diagnostic message for E712 (#​18328)
  • [flake8-2020] Fix diagnostic message for != comparisons (YTT201) (#​18293)
  • [pyupgrade] Make fix unsafe if it deletes comments (UP010) (#​18291)
Documentation
  • Simplify rules table to improve readability (#​18297)
  • Update editor integrations link in README (#​17977)
  • [flake8-bugbear] Add fix safety section (B006) (#​17652)

Contributors

Install ruff 0.11.12

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-installer.sh | sh
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

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.11

Compare Source

Release Notes

Preview features
  • [airflow] Add autofixes for AIR302 and AIR312 (#​17942)
  • [airflow] Move rules from AIR312 to AIR302 (#​17940)
  • [airflow] Update AIR301 and AIR311 with the latest Airflow implementations (#​17985)
  • [flake8-simplify] Enable fix in preview mode (SIM117) (#​18208)
Bug fixes
  • Fix inconsistent formatting of match-case on [] and _ (#​18147)
  • [pylint] Fix PLW1514 not recognizing the encoding positional argument of codecs.open (#​18109)
CLI
  • Add full option name in formatter warning (#​18217)
Documentation
  • Fix rendering of admonition in docs (#​18163)
  • [flake8-print] Improve print/pprint docs for T201 and T203 (#​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
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-installer.sh | sh
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

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.10

Compare Source

Release Notes

Preview features
  • [ruff] Implement a recursive check for RUF060 (#​17976)
  • [airflow] Enable autofixes for AIR301 and AIR311 (#​17941)
  • [airflow] Apply try catch guard to all AIR3 rules (#​17887)
  • [airflow] Extend AIR311 rules (#​17913)
Bug fixes
  • [flake8-bugbear] Ignore B028 if skip_file_prefixes is present (#​18047)
  • [flake8-pie] Mark autofix for PIE804 as unsafe if the dictionary contains comments (#​18046)
  • [flake8-simplify] Correct behavior for str.split/rsplit with maxsplit=0 (SIM905) (#​18075)
  • [flake8-simplify] Fix SIM905 autofix for rsplit creating a reversed list literal (#​18045)
  • [flake8-use-pathlib] Suppress diagnostics for all os.* functions that have the dir_fd parameter (PTH) (#​17968)
  • [refurb] Mark autofix as safe only for number literals (FURB116) (#​17692)
Rule changes
  • [flake8-bandit] Skip S608 for expressionless f-strings (#​17999)
  • [flake8-pytest-style] Don't recommend usefixtures for parametrize values (PT019) (#​17650)
  • [pyupgrade] Add resource.error as deprecated alias of OSError (UP024) (#​17933)
CLI
Documentation
  • Update Neovim setup docs (#​18108)
  • [flake8-simplify] Add fix safety section (SIM103) (#​18086)
  • [flake8-simplify] Add fix safety section (SIM112) (#​18099)
  • [pylint] Add fix safety section (PLC0414) (#​17802)
  • [pylint] Add fix safety section (PLE4703) (#​17824)
  • [pylint] Add fix safety section (PLW1514) (#​17932)
  • [pylint] Add fix safety section (PLW3301) (#​17878)
  • [ruff] Add fix safety section (RUF007) (#​17755)
  • [ruff] Add fix safety section (RUF033) (#​17760)

Contributors

Install ruff 0.11.10

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-installer.ps1 | iex"

Download ruff 0.11.10

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.9

Compare Source

Release Notes

Preview features
  • Default to latest supported Python version for version-related syntax errors (#​17529)
  • Implement deferred annotations for Python 3.14 (#​17658)
  • [airflow] Fix SQLTableCheckOperator typo (AIR302) (#​17946)
  • [airflow] Remove airflow.utils.dag_parsing_context.get_parsing_context (AIR301) (#​17852)
  • [airflow] Skip attribute check in try catch block (AIR301) (#​17790)
  • [flake8-bandit] Mark tuples of string literals as trusted input in S603 (#​17801)
  • [isort] Check full module path against project root(s) when categorizing first-party imports (#​16565)
  • [ruff] Add new rule in-empty-collection (RUF060) (#​16480)
Bug fixes
  • Fix missing combine call for lint.typing-extensions setting (#​17823)
  • [flake8-async] Fix module name in ASYNC110, ASYNC115, and ASYNC116 fixes (#​17774)
  • [pyupgrade] Add spaces between tokens as necessary to avoid syntax errors in UP018 autofix (#​17648)
  • [refurb] Fix false positive for float and complex numbers in FURB116 (#​17661)
  • [parser] Flag single unparenthesized generator expr with trailing comma in arguments. (#​17893)
Documentation
  • Add instructions on how to upgrade to a newer Rust version (#​17928)
  • Update code of conduct email address (#​17875)
  • Add fix safety sections to PLC2801, PLR1722, and RUF013 (#​17825, #​17826, #​17759)
  • Add link to check-typed-exception from S110 and S112 (#​17786)
Other changes
  • Allow passing a virtual environment to ruff analyze graph (#​17743)

Contributors

Install ruff 0.11.9

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.9/ruff-installer.ps1 | iex"

Download ruff 0.11.9

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.8

Compare Source

Release Notes

Preview features
  • [airflow] Apply auto fixes to cases where the names have changed in Airflow 3 (AIR302, AIR311) (#​17553, #​17570, #​17571)
  • [airflow] Extend AIR301 rule (#​17598)
  • [airflow] Update existing AIR302 rules with better suggestions (#​17542)
  • [refurb] Mark fix as safe for readlines-in-for (FURB129) (#​17644)
  • [syntax-errors] nonlocal declaration at module level (#​17559)
  • [syntax-errors] Detect single starred expression assignment x = *y (#​17624)
Bug fixes
  • [flake8-pyi] Ensure Literal[None,] | Literal[None,] is not autofixed to None | None (PYI061) (#​17659)
  • [flake8-use-pathlib] Avoid suggesting Path.iterdir() for os.listdir with file descriptor (PTH208) (#​17715)
  • [flake8-use-pathlib] Fix PTH104 false positive when rename is passed a file descriptor (#​17712)
  • [flake8-use-pathlib] Fix PTH116 false positive when stat is passed a file descriptor (#​17709)
  • [flake8-use-pathlib] Fix PTH123 false positive when open is passed a file descriptor from a function call (#​17705)
  • [pycodestyle] Fix duplicated diagnostic in E712 (#​17651)
  • [pylint] Detect global declarations in module scope (PLE0118) (#​17411)
  • [syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#​17460)
Configuration
  • Add option to disable typing_extensions imports (#​17611)
Documentation
Other changes
  • Add Python 3.14 to configuration options (#​17647)
  • Make syntax error for unparenthesized except tuples version specific to before 3.14 (#​17660)

Contributors

Install ruff 0.11.8

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.8/ruff-installer.ps1 | iex"

Download ruff 0.11.8

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.7

Compare Source

Release Notes

Preview features
  • [airflow] Apply auto fixes to cases where the names have changed in Airflow 3 (AIR301) (#​17355)
  • [perflint] Implement fix for manual-dict-comprehension (PERF403) (#​16719)
  • [syntax-errors] Make duplicate parameter names a semantic error (#​17131)
Bug fixes
  • [airflow] Fix typos in provider package names (AIR302, AIR312) (#​17574)
  • [flake8-type-checking] Visit keyword arguments in checks involving typing.cast/typing.NewType arguments (#​17538)
  • [pyupgrade] Preserve parenthesis when fixing native literals containing newlines (UP018) (#​17220)
  • [refurb] Mark the FURB161 fix unsafe except for integers and booleans (#​17240)
Rule changes
  • [perflint] Allow list function calls to be replaced with a comprehension (PERF401) (#​17519)
  • [pycodestyle] Auto-fix redundant boolean comparison (E712) (#​17090)
  • [pylint] make fix unsafe if delete comments (PLR1730) (#​17459)
Documentation

Contributors

Install ruff 0.11.7

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.7/ruff-installer.ps1 | iex"

Download ruff 0.11.7

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.6

Compare Source

Release Notes

Preview features
  • Avoid adding whitespace to the end of a docstring after an escaped quote (#​17216)
  • [airflow] Extract AIR311 from AIR301 rules (AIR301, AIR311) (#​17310, #​17422)
Bug fixes
  • Raise syntax error when \ is at end of file (#​17409)

Contributors

Install ruff 0.11.6

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-installer.ps1 | iex"

Download ruff 0.11.6

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.5

Compare Source

Release Notes

Preview features
  • [airflow] Add missing AIR302 attribute check (#​17115)
  • [airflow] Expand module path check to individual symbols (AIR302) (#​17278)
  • [airflow] Extract AIR312 from AIR302 rules (AIR302, AIR312) (#​17152)
  • [airflow] Update oudated AIR301, AIR302 rules (#​17123)
  • [syntax-errors] Async comprehension in sync comprehension (#​17177)
  • [syntax-errors] Check annotations in annotated assignments (#​17283)
  • [syntax-errors] Extend annotation checks to await (#​17282)
Bug fixes
  • [flake8-pie] Avoid false positive for multiple assignment with auto() (PIE796) (#​17274)
Rule changes
  • [ruff] Fix RUF100 to detect unused file-level noqa directives with specific codes (#​17042) (#​17061)
  • [flake8-pytest-style] Avoid false positive for legacy form of pytest.raises (PT011) (#​17231)
Documentation
  • Fix formatting of "See Style Guide" link (#​17272)

Contributors

Install ruff 0.11.5

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-installer.ps1 | iex"

Download ruff 0.11.5

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.4

Compare Source

Release Notes

Preview features
  • [ruff] Implement invalid-rule-code as RUF102 (#​17138)
  • [syntax-errors] Detect duplicate keys in match mapping patterns (#​17129)
  • [syntax-errors] Detect duplicate attributes in match class patterns (#​17186)
  • [syntax-errors] Detect invalid syntax in annotations (#​17101)
Bug fixes
  • [syntax-errors] Fix multiple assignment error for class fields in match patterns (#​17184)
  • Don't skip visiting non-tuple slice in typing.Annotated subscripts (#​17201)

Contributors

Install ruff 0.11.4

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.4/ruff-installer.ps1 | iex"

Download ruff 0.11.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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.3

Compare Source

Release Notes

Preview features
  • [airflow] Add more autofixes for AIR302 (#​16876, #​16977, #​16976, #​16965)
  • [airflow] Move AIR301 to AIR002 (#​16978)
  • [airflow] Move AIR302 to AIR301 and AIR303 to AIR302 (#​17151)
  • [flake8-bandit] Mark str and list[str] literals as trusted input (S603) (#​17136)
  • [ruff] Support slices in RUF005 (#​17078)
  • [syntax-errors] Start detecting compile-time syntax errors (#​16106)
  • [syntax-errors] Duplicate type parameter names (#​16858)
  • [syntax-errors] Irrefutable case pattern before final case (#​16905)
  • [syntax-errors] Multiple assignments in case pattern (#​16957)
  • [syntax-errors] Single starred assignment target (#​17024)
  • [syntax-errors] Starred expressions in return, yield, and for (#​17134)
  • [syntax-errors] Store to or delete __debug__ (#​16984)
Bug fixes
  • Error instead of panic! when running Ruff from a deleted directory (#​16903) (#​17054)
  • [syntax-errors] Fix false positive for parenthesized tuple index (#​16948)
CLI
  • Check pyproject.toml correctly when it is passed via stdin (#​16971)
Configuration
  • [flake8-import-conventions] Add import numpy.typing as npt to default flake8-import-conventions.aliases (#​17133)
Documentation
  • [refurb] Document why UserDict, UserList, and UserString are preferred over dict, list, and str (FURB189) (#​16927)

Contributors

Install ruff 0.11.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.3/ruff-installer.ps1 | iex"

Download ruff 0.11.3

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.2

Compare Source

Release Notes

Preview features
  • [syntax-errors] Fix false-positive syntax errors emitted for annotations on variadic parameters before Python 3.11 (#​16878)

Contributors

Install ruff 0.11.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.2/ruff-installer.ps1 | iex"

Download ruff 0.11.2

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.1

Compare Source

Release Notes

Preview features
  • [airflow] Add chain, chain_linear and cross_downstream for AIR302 (#​16647)
  • [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#​16581)
  • [syntax-errors] PEP 701 f-strings before Python 3.12 (#​16543)
  • [syntax-errors] Parenthesized context managers before Python 3.9 (#​16523)
  • [syntax-errors] Star annotations before Python 3.11 (#​16545)
  • [syntax-errors] Star expression in index before Python 3.11 (#​16544)
  • [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#​16404)
Bug fixes
  • Server: Allow FixAll action in presence of version-specific syntax errors (#​16848)
  • [flake8-bandit] Allow raw strings in suspicious-mark-safe-usage (S308) #​16702 (#​16770)
  • [refurb] Avoid panicking unwrap in verbose-decimal-constructor (FURB157) (#​16777)
  • [refurb] Fix starred expressions fix (FURB161) (#​16550)
  • Fix --statistics reporting for unsafe fixes (#​16756)
Rule changes
  • [flake8-executables] Allow uv run in shebang line for shebang-missing-python (EXE003) (#​16849,#​16855)
CLI
Documentation
  • Update Ruff tutorial to avoid non-existent fix in __init__.py (#​16818)
  • [flake8-gettext] Swap format- and printf-in-get-text-func-call examples (INT002, INT003) (#​16769)

Contributors

Install ruff 0.11.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.1/ruff-installer.ps1 | iex"

Download ruff 0.11.1

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.11.0

Compare Source

Release Notes

This is a follow-up to release 0.10.0. The requires-python inference changes were unintentionally omitted from 0.10.0, and have been included here. This release also includes stabilization of the preview behavior for PGH004.

Breaking changes
  • Changes to how the Python version is inferred when a target-version is not specified (#​16319)

    In previous versions of Ruff, you could specify your Python version with:

    • The target-version option in a ruff.toml file or the [tool.ruff] section of a pyproject.toml file.
    • The project.requires-python field in a pyproject.toml file with a [tool.ruff] section.

    These options worked well in most cases, and are still recommended for fine control of the Python version. However, because of the way Ruff discovers config files, pyproject.toml files without a [tool.ruff] section would be ignored, including the requires-python setting. Ruff would then use the default Python version (3.9 as of this writing) instead, which is surprising when you've attempted to request another version.

    In v0.10, config discovery has been updated to address this issue:

    • If Ruff finds a ruff.toml file without a target-version, it will check
      for a pyproject.toml file in the same directory and respect its
      requires-python version, even if it does not contain a [tool.ruff]
      section.
    • If Ruff finds a user-level configuration, the requires-python field of the closest pyproject.toml in a parent directory will take precedence.
    • If there is no config file (ruff.tomlor pyproject.toml with a
      [tool.ruff] section) in the directory of the file being checked, Ruff will
      search for the closest pyproject.toml in the parent directories and use its
      requires-python setting.
Stabilization

The following behaviors have been stabilized:

  • blanket-noqa (PGH004): Also detect blanked file-level noqa comments (and not just line level comments).
Preview features
  • [syntax-errors] Tuple unpacking in for statement iterator clause before Python 3.9 (#​16558)

Install ruff 0.11.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.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.11.0/ruff-installer.ps1 | iex"

Download ruff 0.11.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
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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.10.0

Compare Source

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.

  • Changes to how the Python version is inferred when a target-version is not specified (#​16319)

    While this change was intended to be released in 0.10.0, it was unintentionally omitted. It was subsequently released in 0.11.0 — see the changelog there for details.

  • Updated TYPE_CHECKING behavior (#​16669)

    Previously, Ruff only recognized typechecking blocks that tested the typing.TYPE_CHECKING symbol. Now, Ruff recognizes any local variable named TYPE_CHECKING. This release also removes support for the legacy if 0: and if False: typechecking checks. Use a local TYPE_CHECKING variable instead.

  • More robust noqa parsing (#​16483)

    The syntax for both file-level and in-line suppression comments has been unified and made more robust to certain errors. In most cases, this will result in more suppression comments being read by Ruff, but there are a few instances where previously read comments will now log an error to the user instead. Please refer to the documentation on Error suppression for the full specification.

  • Avoid unnecessary parentheses around with statements with a single context manager and a trailing comment (#​14005)

    This change fixes a bug in the formatter where it introduced unnecessary parentheses around with statements with a single context manager and a trailing comment. This change may result in a change in formatting for some users.

  • Bump alpine default tag to 3.21 for derived Docker images (#​16456)

    Alpine 3.21 was released in Dec 2024 and is used in the official Alpine-based Python images. Now the ruff:alpine image will use 3.21 instead of 3.20 and ruff:alpine3.20 will no longer be updated.

Deprecated Rules

The following rules have been deprecated:

Remapped rules

The following rules have been remapped to new rule codes:

  • [unsafe-markup-use]: RUF035 to S704
Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

The following fixes or improvements to fixes have been stabilized:

Server
  • Remove logging output for ruff.printDebugInformation (#​16617)
Configuration
  • [flake8-builtins] Deprecate the builtins- prefixed options in favor of the unprefixed options (e.g. builtins-allowed-modules is now deprecated in favor of allowed-modules) (#​16092)
Bug fixes
  • [flake8-bandit] Fix mixed-case hash algorithm names (S324) (#​16552)
CLI
  • [ruff] Fix last_tag/commits_since_last_tag for version command (#​16686)

Contributors

Install ruff 0.10.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.10.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.10.0/ruff-installer.ps1 | iex"

Download ruff 0.10.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
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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.10

Compare Source

Release Notes

Preview features
  • [ruff] Add new rule RUF059: Unused unpacked assignment (#​16449)
  • [syntax-errors] Detect assignment expressions before Python 3.8 (#​16383)
  • [syntax-errors] Named expressions in decorators before Python 3.9 (#​16386)
  • [syntax-errors] Parenthesized keyword argument names after Python 3.8 (#​16482)
  • [syntax-errors] Positional-only parameters before Python 3.8 (#​16481)
  • [syntax-errors] Tuple unpacking in return and yield before Python 3.8 (#​16485)
  • [syntax-errors] Type parameter defaults before Python 3.13 (#​16447)
  • [syntax-errors] Type parameter lists before Python 3.12 (#​16479)
  • [syntax-errors] except* before Python 3.11 (#​16446)
  • [syntax-errors] type statements before Python 3.12 (#​16478)
Bug fixes
  • Escape template filenames in glob patterns in configuration (#​16407)
  • [flake8-simplify] Exempt unittest context methods for SIM115 rule (#​16439)
  • Formatter: Fix syntax error location in notebooks (#​16499)
  • [pyupgrade] Do not offer fix when at least one target is global/nonlocal (UP028) (#​16451)
  • [flake8-builtins] Ignore variables matching module attribute names (A001) (#​16454)
  • [pylint] Convert code keyword argument to a positional argument in fix for (PLR1722) (#​16424)
CLI
  • Move rule code from description to check_name in GitLab output serializer (#​16437)
Documentation
  • [pydocstyle] Clarify that D417 only checks docstrings with an arguments section (#​16494)

Contributors

Install ruff 0.9.10

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-installer.ps1 | iex"

Download ruff 0.9.10

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.9

Compare Source

Release Notes

Preview features
  • Fix caching of unsupported-syntax errors (#​16425)
Bug fixes
  • Only show unsupported-syntax errors in editors when preview mode is enabled (#​16429)

Contributors

Install ruff 0.9.9

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.9/ruff-installer.ps1 | iex"

Download ruff 0.9.9

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.8

Compare Source

Release Notes

Preview features
  • Start detecting version-related syntax errors in the parser (#​16090)
Rule changes
  • [pylint] Mark fix unsafe (PLW1507) (#​16343)
  • [pylint] Catch case np.nan/case math.nan in match statements (PLW0177) (#​16378)
  • [ruff] Add more Pydantic models variants to the list of default copy semantics (RUF012) (#​16291)
Server
  • Avoid indexing the project if configurationPreference is editorOnly (#​16381)
  • Avoid unnecessary info at non-trace server log level (#​16389)
  • Expand ruff.configuration to allow inline config (#​16296)
  • Notify users for invalid client settings (#​16361)
Configuration
  • Add per-file-target-version option (#​16257)
Bug fixes
  • [refurb] Do not consider docstring(s) (FURB156) (#​16391)
  • [flake8-self] Ignore attribute accesses on instance-like variables (SLF001) (#​16149)
  • [pylint] Fix false positives, add missing methods, and support positional-only parameters (PLE0302) (#​16263)
  • [flake8-pyi] Mark PYI030 fix unsafe when comments are deleted (#​16322)
Documentation

Contributors

Install ruff 0.9.8

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.8/ruff-installer.ps1 | iex"

Download ruff 0.9.8

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.7

Compare Source

Release Notes

Preview features
  • Consider __new__ methods as special function type for enforcing class method or static method rules (#​13305)
  • [airflow] Improve the internal logic to differentiate deprecated symbols (AIR303) (#​16013)
  • [refurb] Manual timezone monkeypatching (FURB162) (#​16113)
  • [ruff] Implicit class variable in dataclass (RUF045) (#​14349)
  • [ruff] Skip singleton starred expressions for incorrectly-parenthesized-tuple-in-subscript (RUF031) (#​16083)
  • [refurb] Check for subclasses includes subscript expressions (FURB189) (#​16155)
Rule changes
  • [flake8-debugger] Also flag sys.breakpointhook and sys.__breakpointhook__ (T100) (#​16191)
  • [pycodestyle] Exempt site.addsitedir(...) calls (E402) (#​16251)
Formatter
  • Fix unstable formatting of trailing end-of-line comments of parenthesized attribute values (#​16187)
Server
  • Fix handling of requests received after shutdown message (#​16262)
  • Ignore source.organizeImports.ruff and source.fixAll.ruff code actions for a notebook cell (#​16154)
  • Include document specific debug info for ruff.printDebugInformation (#​16215)
  • Update server to return the debug info as string with ruff.printDebugInformation (#​16214)
CLI
  • Warn on invalid noqa even when there are no diagnostics (#​16178)
  • Better error messages while loading configuration extends (#​15658)
Bug fixes
  • [flake8-comprehensions] Handle trailing comma in C403 fix (#​16110)
  • [flake8-pyi] Avoid flagging custom-typevar-for-self on metaclass methods (PYI019) (#​16141)
  • [pydocstyle] Handle arguments with the same names as sections (D417) (#​16011)
  • [pylint] Correct ordering of arguments in fix for if-stmt-min-max (PLR1730) (#​16080)
  • [pylint] Do not offer fix for raw strings (PLE251) (#​16132)
  • [pyupgrade] Do not upgrade functional TypedDicts with private field names to the class-based syntax (UP013) (#​16219)
  • [pyupgrade] Handle micro version numbers correctly (UP036) (#​16091)
  • [pyupgrade] Unwrap unary expressions correctly (UP018) (#​15919)
  • [refurb] Correctly handle lengths of literal strings in slice-to-remove-prefix-or-suffix (FURB188) (#​16237)
  • [ruff] Skip RUF001 diagnostics when visiting string type definitions (#​16122)
Documentation
  • Add FAQ entry for source.* code actions in Notebook (#​16212)
  • Add SECURITY.md (#​16224)

Contributors

Install ruff 0.9.7

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.7/ruff-installer.ps1 | iex"

Download ruff 0.9.7

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.6

Compare Source

Release Notes

Preview features
  • [airflow] Add external_task.{ExternalTaskMarker, ExternalTaskSensor} for AIR302 (#​16014)
  • [flake8-builtins] Make strict module name comparison optional (A005) (#​15951)
  • [flake8-pyi] Extend fix to Python <= 3.9 for redundant-none-literal (PYI061) (#​16044)
  • [pylint] Also report when the object isn't a literal (PLE1310) (#​15985)
  • [ruff] Implement indented-form-feed (RUF054) (#​16049)
  • [ruff] Skip type definitions for missing-f-string-syntax (RUF027) (#​16054)
Rule changes
  • [flake8-annotations] Correct syntax for typing.Union in suggested return type fixes for ANN20x rules (#​16025)
  • [flake8-builtins] Match upstream module name comparison (A005) (#​16006)
  • [flake8-comprehensions] Detect overshadowed list/set/dict, ignore variadics and named expressions (C417) (#​15955)
  • [flake8-pie] Remove following comma correctly when the unpacked dictionary is empty (PIE800) (#​16008)
  • [flake8-simplify] Only trigger SIM401 on known dictionaries (#​15995)
  • [pylint] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (PLE1310) (#​15984)
  • [pyupgrade] Comments within parenthesized value ranges should not affect applicability (UP040) (#​16027)
  • [pyupgrade] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (UP040) (#​16026)
  • [pyupgrade] Ensure we do not rename two type parameters to the same name (UP049) (#​16038)
  • [pyupgrade] [ruff] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (UP049, RUF052) (#​16032)
  • [ruff] Update RUF009 to behave similar to B008 and ignore attributes with immutable types (#​16048)
Server
  • Root exclusions in the server to project root (#​16043)
Bug fixes
  • [flake8-datetime] Ignore .replace() calls while looking for .astimezone (#​16050)
  • [flake8-type-checking] Avoid TC004 false positive where the runtime definition is provided by __getattr__ (#​16052)
Documentation
  • Improve ruff-lsp migration document (#​16072)
  • Undeprecate ruff.nativeServer (#​16039)

Contributors

Install ruff 0.9.6

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-installer.ps1 | iex"

Download ruff 0.9.6

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.5

Compare Source

Release Notes

Preview features
  • Recognize all symbols named TYPE_CHECKING for in_type_checking_block (#​15719)
  • [flake8-comprehensions] Handle builtins at top of file correctly for unnecessary-dict-comprehension-for-iterable (C420) (#​15837)
  • [flake8-logging] .exception() and exc_info= outside exception handlers (LOG004, LOG014) (#​15799)
  • [flake8-pyi] Fix incorrect behaviour of custom-typevar-return-type preview-mode autofix if typing was already imported (PYI019) (#​15853)
  • [flake8-pyi] Fix more complex cases (PYI019) (#​15821)
  • [flake8-pyi] Make PYI019 autofixable for .py files in preview mode as well as stubs (#​15889)
  • [flake8-pyi] Remove type parameter correctly when it is the last (PYI019) (#​15854)
  • [pylint] Fix missing parens in unsafe fix for unnecessary-dunder-call (PLC2801) (#​15762)
  • [pyupgrade] Better messages and diagnostic range (UP015) (#​15872)
  • [pyupgrade] Rename private type parameters in PEP 695 generics (UP049) (#​15862)
  • [refurb] Also report non-name expressions (FURB169) (#​15905)
  • [refurb] Mark fix as unsafe if there are comments (FURB171) (#​15832)
  • [ruff] Classes with mixed type variable style (RUF053) (#​15841)
  • [airflow] BashOperator has been moved to airflow.providers.standard.operators.bash.BashOperator (AIR302) (#​15922)
  • [flake8-pyi] Add autofix for unused-private-type-var (PYI018) (#​15999)
  • [flake8-pyi] Significantly improve accuracy of PYI019 if preview mode is enabled (#​15888)
Rule changes
  • Preserve triple quotes and prefixes for strings (#​15818)
  • [flake8-comprehensions] Skip when TypeError present from too many (kw)args for C410,C411, and C418 (#​15838)
  • [flake8-pyi] Rename PYI019 and improve its diagnostic message (#​15885)
  • [pep8-naming] Ignore @override methods (N803) (#​15954)
  • [pyupgrade] Reuse replacement logic from UP046 and UP047 to preserve more comments (UP040) (#​15840)
  • [ruff] Analyze deferred annotations before enforcing mutable-(data)class-default and function-call-in-dataclass-default-argument (RUF008,RUF009,RUF012) (#​15921)
  • [pycodestyle] Exempt sys.path += ... calls (E402) (#​15980)
Configuration
  • Config error only when flake8-import-conventions alias conflicts with isort.required-imports bound name (#​15918)
  • Workaround Even Better TOML crash related to allOf (#​15992)
Bug fixes
  • [flake8-comprehensions] Unnecessary list comprehension (rewrite as a set comprehension) (C403) - Handle extraneous parentheses around list comprehension (#​15877)
  • [flake8-comprehensions] Handle trailing comma in fixes for unnecessary-generator-list/set (C400,C401) (#​15929)
  • [flake8-pyi] Fix several correctness issues with custom-type-var-return-type (PYI019) (#​15851)
  • [pep8-naming] Consider any number of leading underscore for N801 (#​15988)
  • [pyflakes] Visit forward annotations in TypeAliasType as types (F401) (#​15829)
  • [pylint] Correct min/max auto-fix and suggestion for (PL1730) (#​15930)
  • [refurb] Handle unparenthesized tuples correctly (FURB122, FURB142) (#​15953)
  • [refurb] Avoid None | None as well as better detection and fix (FURB168) (#​15779)
Documentation
  • Add deprecation warning for ruff-lsp related settings (#​15850)
  • Docs (linter.md): clarify that Python files are always searched for in subdirectories (#​15882)
  • Fix a typo in non_pep695_generic_class.rs (#​15946)
  • Improve Docs: Pylint subcategories' codes (#​15909)
  • Remove non-existing lint.extendIgnore editor setting (#​15844)
  • Update black deviations (#​15928)
  • Mention UP049 in UP046 and UP047, add See also section to UP040 (#​15956)
  • Add instance variable examples to RUF012 (#​15982)
  • Explain precedence for ignore and select config (#​15883)

Contributors

Install ruff 0.9.5

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.ps1 | iex"

Download ruff 0.9.5

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.4

Compare Source

Release Notes

Preview features
  • [airflow] Extend airflow context parameter check for BaseOperator.execute (AIR302) (#​15713)
  • [airflow] Update AIR302 to check for deprecated context keys (#​15144)
  • [flake8-bandit] Permit suspicious imports within stub files (S4) (#​15822)
  • [pylint] Do not trigger PLR6201 on empty collections (#​15732)
  • [refurb] Do not emit diagnostic when loop variables are used outside loop body (FURB122) (#​15757)
  • [ruff] Add support for more re patterns (RUF055) (#​15764)
  • [ruff] Check for shadowed map before suggesting fix (RUF058) (#​15790)
  • [ruff] Do not emit diagnostic when all arguments to zip() are variadic (RUF058) (#​15744)
  • [ruff] Parenthesize fix when argument spans multiple lines for unnecessary-round (RUF057) (#​15703)
Rule changes
  • Preserve quote style in generated code (#​15726, #​15778, #​15794)
  • [flake8-bugbear] Exempt NewType calls where the original type is immutable (B008) (#​15765)
  • [pylint] Honor banned top-level imports by TID253 in PLC0415. (#​15628)
  • [pyupgrade] Ignore is_typeddict and TypedDict for deprecated-import (UP035) (#​15800)
CLI
  • Fix formatter warning message for flake8-quotes option (#​15788)
  • Implement tab autocomplete for ruff config (#​15603)
Bug fixes
  • [flake8-comprehensions] Do not emit unnecessary-map diagnostic when lambda has different arity (C417) (#​15802)
  • [flake8-comprehensions] Parenthesize sorted when needed for unnecessary-call-around-sorted (C413) (#​15825)
  • [pyupgrade] Handle end-of-line comments for quoted-annotation (UP037) (#​15824)
Documentation
  • Add missing config docstrings (#​15803)
  • Add references to trio.run_process and anyio.run_process (#​15761)
  • Use uv init --lib in tutorial (#​15718)

Contributors

Install ruff 0.9.4

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.4/ruff-installer.ps1 | iex"

Download ruff 0.9.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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.3

Compare Source

Release Notes

Preview features
  • [airflow] Argument fail_stop in DAG has been renamed as fail_fast (AIR302) (#​15633)
  • [airflow] Extend AIR303 with more symbols (#​15611)
  • [flake8-bandit] Report all references to suspicious functions (S3) (#​15541)
  • [flake8-pytest-style] Do not emit diagnostics for empty for loops (PT012, PT031) (#​15542)
  • [flake8-simplify] Avoid double negations (SIM103) (#​15562)
  • [pyflakes] Fix infinite loop with unused local import in __init__.py (F401) (#​15517)
  • [pylint] Do not report methods with only one EM101-compatible raise (PLR6301) (#​15507)
  • [pylint] Implement redefined-slots-in-subclass (W0244) (#​9640)
  • [pyupgrade] Add rules to use PEP 695 generics in classes and functions (UP046, UP047) (#​15565, #​15659)
  • [refurb] Implement for-loop-writes (FURB122) (#​10630)
  • [ruff] Implement needless-else clause (RUF047) (#​15051)
  • [ruff] Implement starmap-zip (RUF058) (#​15483)
Rule changes
  • [flake8-bugbear] Do not raise error if keyword argument is present and target-python version is less or equals than 3.9 (B903) (#​15549)
  • [flake8-comprehensions] strip parentheses around generators in unnecessary-generator-set (C401) (#​15553)
  • [flake8-pytest-style] Rewrite references to .exception (PT027) (#​15680)
  • [flake8-simplify] Mark fixes as unsafe (SIM201, SIM202) (#​15626)
  • [flake8-type-checking] Fix some safe fixes being labeled unsafe (TC006,TC008) (#​15638)
  • [isort] Omit trailing whitespace in unsorted-imports (I001) (#​15518)
  • [pydoclint] Allow ignoring one line docstrings for DOC rules (#​13302)
  • [pyflakes] Apply redefinition fixes by source code order (F811) (#​15575)
  • [pyflakes] Avoid removing too many imports in redefined-while-unused (F811) (#​15585)
  • [pyflakes] Group redefinition fixes by source statement (F811) (#​15574)
  • [pylint] Include name of base class in message for redefined-slots-in-subclass (W0244) (#​15559)
  • [ruff] Update fix for RUF055 to use var == value (#​15605)
Formatter
  • Fix bracket spacing for single-element tuples in f-string expressions (#​15537)
  • Fix unstable f-string formatting for expressions containing a trailing comma (#​15545)
Performance
  • Avoid quadratic membership check in import fixes (#​15576)
Server
  • Allow unsafe-fixes settings for code actions (#​15666)
Bug fixes
  • [flake8-bandit] Add missing single-line/dotall regex flag (S608) (#​15654)
  • [flake8-import-conventions] Fix infinite loop between ICN001 and I002 (ICN001) (#​15480)
  • [flake8-simplify] Do not emit diagnostics for expressions inside string type annotations (SIM222, SIM223) (#​15405)
  • [pyflakes] Treat arguments passed to the default= parameter of TypeVar as type expressions (F821) (#​15679)
  • [pyupgrade] Avoid syntax error when the iterable is a non-parenthesized tuple (UP028) (#​15543)
  • [ruff] Exempt NewType calls where the original type is immutable (RUF009) (#​15588)
  • Preserve raw string prefix and escapes in all codegen fixes (#​15694)
Documentation
  • Generate documentation redirects for lowercase rule codes (#​15564)
  • TRY300: Add some extra notes on not catching exceptions you didn't expect (#​15036)

Contributors

Install ruff 0.9.3

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.3/ruff-installer.ps1 | iex"

Download ruff 0.9.3

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.2

Compare Source

Release Notes

Preview features
  • [airflow] Fix typo "security_managr" to "security_manager" (AIR303) (#​15463)
  • [airflow] extend and fix AIR302 rules (#​15525)
  • [fastapi] Handle parameters with Depends correctly (FAST003) (#​15364)
  • [flake8-pytest-style] Implement pytest.warns diagnostics (PT029, PT030, PT031) (#​15444)
  • [flake8-pytest-style] Test function parameters with default arguments (PT028) (#​15449)
  • [flake8-type-checking] Avoid false positives for | in TC008 (#​15201)
Rule changes
  • [flake8-todos] Allow VSCode GitHub PR extension style links in missing-todo-link (TD003) (#​15519)
  • [pyflakes] Show syntax error message for F722 (#​15523)
Formatter
  • Fix curly bracket spacing around f-string expressions containing curly braces (#​15471)
  • Fix joining of f-strings with different quotes when using quote style Preserve (#​15524)
Server
  • Avoid indexing the same workspace multiple times (#​15495)
  • Display context for ruff.configuration errors (#​15452)
Configuration
  • Remove flatten to improve deserialization error messages (#​15414)
Bug fixes
  • Parse triple-quoted string annotations as if parenthesized (#​15387)
  • [fastapi] Update Annotated fixes (FAST002) (#​15462)
  • [flake8-bandit] Check for builtins instead of builtin (S102, PTH123) (#​15443)
  • [flake8-pathlib] Fix --select for os-path-dirname (PTH120) (#​15446)
  • [ruff] Fix false positive on global keyword (RUF052) (#​15235)

Contributors

Install ruff 0.9.2

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.2/ruff-installer.ps1 | iex"

Download ruff 0.9.2

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.1

Compare Source

Release Notes

Preview features
  • [pycodestyle] Run too-many-newlines-at-end-of-file on each cell in notebooks (W391) (#​15308)
  • [ruff] Omit diagnostic for shadowed private function parameters in used-dummy-variable (RUF052) (#​15376)
Rule changes
  • [flake8-bugbear] Improve assert-raises-exception message (B017) (#​15389)
Formatter
  • Preserve trailing end-of line comments for the last string literal in implicitly concatenated strings (#​15378)
Server
  • Fix a bug where the server and client notebooks were out of sync after reordering cells (#​15398)
Bug fixes
  • [flake8-pie] Correctly remove wrapping parentheses (PIE800) (#​15394)
  • [pyupgrade] Handle comments and multiline expressions correctly (UP037) (#​15337)

Contributors

Install ruff 0.9.1

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.1/ruff-installer.ps1 | iex"

Download ruff 0.9.1

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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

v0.9.0

Compare Source

Release Notes

Check out the blog post for a migration guide and overview of the changes!

Breaking changes

Ruff now formats your code according to the 2025 style guide. As a result, your code might now get formatted differently. See the formatter section for a detailed list of changes.

This release doesn’t remove or remap any existing stable rules.

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

The following fixes or improvements to fixes have been stabilized:

Formatter

This release introduces the new 2025 stable style (#​13371), stabilizing the following changes:

  • Format expressions in f-string elements (#​7594)
  • Alternate quotes for strings inside f-strings (#​13860)
  • Preserve the casing of hex codes in f-string debug expressions (#​14766)
  • Choose the quote style for each string literal in an implicitly concatenated f-string rather than for the entire string (#​13539)
  • Automatically join an implicitly concatenated string into a single string literal if it fits on a single line (#​9457)
  • Remove the ISC001 incompatibility warning (#​15123)
  • Prefer parenthesizing the assert message over breaking the assertion expression (#​9457)
  • Automatically parenthesize over-long if guards in match case clauses (#​13513)
  • More consistent formatting for match case patterns (#​6933)
  • Avoid unnecessary parentheses around return type annotations (#​13381)
  • Keep the opening parentheses on the same line as the if keyword for comprehensions where the condition has a leading comment (#​12282)
  • More consistent formatting for with statements with a single context manager for Python 3.8 or older (#​10276)
  • Correctly calculate the line-width for code blocks in docstrings when using max-doc-code-line-length = "dynamic" (#​13523)
Preview features
  • [flake8-bugbear] Implement class-as-data-structure (B903) (#​9601)
  • [flake8-type-checking] Apply quoted-type-alias more eagerly in TYPE_CHECKING blocks and ignore it in stubs (TC008) (#​15180)
  • [pylint] Ignore eq-without-hash in stub files (PLW1641) (#​15310)
  • [pyupgrade] Split UP007 into two individual rules: UP007 for Union and UP045 for Optional (UP007, UP045) (#​15313)
  • [ruff] New rule that detects classes that are both an enum and a dataclass (RUF049) (#​15299)
  • [ruff] Recode RUF025 to RUF037 (RUF037) (#​15258)
Rule changes
Server
  • Improve the observability by removing the need for the "trace" value to turn on or off logging. The server logging is solely controlled using the logLevel server setting
    which defaults to info. This addresses the issue where users were notified about an error and told to consult the log, but it didn’t contain any messages. (#​15232)
  • Ignore diagnostics from other sources for code action requests (#​15373)
CLI
  • Improve the error message for --config key=value when the key is for a table and it’s a simple value
Bug fixes
  • [eradicate] Ignore metadata blocks directly followed by normal blocks (ERA001) (#​15330)
  • [flake8-django] Recognize other magic methods (DJ012) (#​15365)
  • [pycodestyle] Avoid false positives related to type aliases (E252) (#​15356)
  • [pydocstyle] Avoid treating newline-separated sections as sub-sections (D405) (#​15311)
  • [pyflakes] Remove call when removing final argument from format (F523) (#​15309)
  • [refurb] Mark fix as unsafe when the right-hand side is a string (FURB171) (#​15273)
  • [ruff] Treat ) as a regex metacharacter (RUF043, RUF055) (#​15318)
  • [ruff] Parenthesize the int-call argument when removing the int call would change semantics (RUF046) (#​15277)

Contributors

Install ruff 0.9.0

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.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.9.0/ruff-installer.ps1 | iex"

Download ruff 0.9.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
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 ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ruff](https://docs.astral.sh/ruff) ([source](https://github.com/astral-sh/ruff), [changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | `^0.8.5` → `^0.15.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.15.17?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.8.6/0.15.17?slim=true) | --- ### Release Notes <details> <summary>astral-sh/ruff (ruff)</summary> ### [`v0.15.17`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01517) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.16...0.15.17) Released on 2026-06-11. ##### Preview features - Allow human-readable names in suppression comments ([#&#8203;25614](https://github.com/astral-sh/ruff/pull/25614)) - Fix handling of `ignore` comments within a `disable`/`enable` pair ([#&#8203;25845](https://github.com/astral-sh/ruff/pull/25845)) - Prioritize human-readable names in CLI output ([#&#8203;25869](https://github.com/astral-sh/ruff/pull/25869)) - Respect diagnostic start and parent ranges and trailing comments in `ruff:ignore` suppressions ([#&#8203;25673](https://github.com/astral-sh/ruff/pull/25673)) - \[`flake8-async`] Add `trio.as_safe_channel` to safe decorators (`ASYNC119`) ([#&#8203;25775](https://github.com/astral-sh/ruff/pull/25775)) - \[`flake8-pytest-style`] Also check `pytest_asyncio` fixtures ([#&#8203;25375](https://github.com/astral-sh/ruff/pull/25375)) - \[`ruff`] Ban `pytest` autouse fixtures (`RUF076`) ([#&#8203;25477](https://github.com/astral-sh/ruff/pull/25477)) - \[`pyupgrade`] Add `from __future__ import annotations` automatically (`UP007`, `UP045`) ([#&#8203;23259](https://github.com/astral-sh/ruff/pull/23259)) ##### Bug fixes - Fix diagnostic when `ruff:enable` or `ruff:disable` appears where `ruff:ignore` is expected ([#&#8203;25700](https://github.com/astral-sh/ruff/pull/25700)) - \[`pyupgrade`] Preserve leading empty literals to avoid syntax errors (`UP032`) ([#&#8203;25491](https://github.com/astral-sh/ruff/pull/25491)) ##### Rule changes - \[`flake8-pytest-style`] Clarify diagnostic message for single parameters (`PT007`) ([#&#8203;25592](https://github.com/astral-sh/ruff/pull/25592)) - \[`numpy`] Drop autofix for `np.in1d` (`NPY201`) ([#&#8203;25612](https://github.com/astral-sh/ruff/pull/25612)) - \[`pylint`] Exempt Python version comparisons (`PLR2004`) ([#&#8203;25743](https://github.com/astral-sh/ruff/pull/25743)) ##### Performance - Reserve AST `Vec`s with correct capacity for common cases ([#&#8203;25451](https://github.com/astral-sh/ruff/pull/25451)) ##### Formatter - Preserve whitespace for Quarto cell option comments ([#&#8203;25641](https://github.com/astral-sh/ruff/pull/25641)) ##### CLI - Allow rule names in `ruff rule` ([#&#8203;25640](https://github.com/astral-sh/ruff/pull/25640)) ##### Other changes - Fix playground diagnostics scrollbars ([#&#8203;25642](https://github.com/astral-sh/ruff/pull/25642)) ##### Contributors - [@&#8203;SuryanshSS1011](https://github.com/SuryanshSS1011) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;romero-deshaw](https://github.com/romero-deshaw) - [@&#8203;karlhillx](https://github.com/karlhillx) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;Kilo59](https://github.com/Kilo59) - [@&#8203;oconnor663](https://github.com/oconnor663) - [@&#8203;LeonidasZhak](https://github.com/LeonidasZhak) - [@&#8203;DavisVaughan](https://github.com/DavisVaughan) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;jonathandung](https://github.com/jonathandung) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;brianmego](https://github.com/brianmego) ### [`v0.15.16`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01516) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.15...0.15.16) Released on 2026-06-04. ##### Preview features - \[`flake8-async`] Implement `yield-in-context-manager-in-async-generator` (`ASYNC119`) ([#&#8203;24644](https://github.com/astral-sh/ruff/pull/24644)) - \[`pylint`] Narrow diagnostic range and exclude cases without exception handlers (`PLW0717`) ([#&#8203;25440](https://github.com/astral-sh/ruff/pull/25440)) - \[`ruff`] Treat `yield` before `break` from a terminal loop as terminal (`RUF075`) ([#&#8203;25447](https://github.com/astral-sh/ruff/pull/25447)) ##### Bug fixes - \[`eradicate`] Avoid flagging `ruff:ignore` comments as code (`ERA001`) ([#&#8203;25537](https://github.com/astral-sh/ruff/pull/25537)) - \[`eradicate`] Fix `ERA001`/`RUF100` conflict when `noqa` is on commented-out code ([#&#8203;25414](https://github.com/astral-sh/ruff/pull/25414)) - \[`pyflakes`] Avoid removing the `format` call when it would change behavior (`F523`) ([#&#8203;25320](https://github.com/astral-sh/ruff/pull/25320)) - \[`pylint`] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (`PLE2510`, `PLE2512`, `PLE2513`, `PLE2514`, `PLE2515`) ([#&#8203;25544](https://github.com/astral-sh/ruff/pull/25544)) - \[`pyupgrade`] Avoid converting `format` calls with more kinds of side effects (`UP032`) ([#&#8203;25484](https://github.com/astral-sh/ruff/pull/25484)) ##### Rule changes - \[`flake8-pytest-style`] Avoid fixes for ambiguous `argnames` and `argvalues` combinations (`PT006`) ([#&#8203;24776](https://github.com/astral-sh/ruff/pull/24776)) ##### Performance - Drop excess capacity from statement suites during parsing ([#&#8203;25368](https://github.com/astral-sh/ruff/pull/25368)) ##### Documentation - \[`pydocstyle`] Improve discoverability of rules enabled for each convention ([#&#8203;24973](https://github.com/astral-sh/ruff/pull/24973)) - \[`ruff`] Restore example code for Python versions before 3.15 (`RUF017`) ([#&#8203;25439](https://github.com/astral-sh/ruff/pull/25439)) - Fix typo `bin/active` → `bin/activate` in tutorial ([#&#8203;25473](https://github.com/astral-sh/ruff/pull/25473)) ##### Other changes - Shrink additional parser AST collections ([#&#8203;25465](https://github.com/astral-sh/ruff/pull/25465)) ##### Contributors - [@&#8203;Redslayer112](https://github.com/Redslayer112) - [@&#8203;koriyoshi2041](https://github.com/koriyoshi2041) - [@&#8203;George-Ogden](https://github.com/George-Ogden) - [@&#8203;TejasAmle](https://github.com/TejasAmle) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;loganrosen](https://github.com/loganrosen) - [@&#8203;RafaelJohn9](https://github.com/RafaelJohn9) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) ### [`v0.15.15`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01515) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.14...0.15.15) Released on 2026-05-28. ##### Preview features - Fix Markdown closing fence handling ([#&#8203;25310](https://github.com/astral-sh/ruff/pull/25310)) - \[`pyflakes`] Report duplicate imports in `typing.TYPE_CHECKING` block (`F811`) ([#&#8203;22560](https://github.com/astral-sh/ruff/pull/22560)) ##### Bug fixes - \[`pyflakes`] Treat function-scope bare annotations as locals per PEP 526 (`F821`) ([#&#8203;21540](https://github.com/astral-sh/ruff/pull/21540)) ##### Performance - Avoid redundant `TokenValue` drops in the lexer ([#&#8203;25300](https://github.com/astral-sh/ruff/pull/25300)) - Reduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens `Vec` size ([#&#8203;25354](https://github.com/astral-sh/ruff/pull/25354)) - Use `ThinVec` in AST to shrink `Stmt` ([#&#8203;25361](https://github.com/astral-sh/ruff/pull/25361)) ##### Documentation - Fix `line-length` example for `--config` option ([#&#8203;25389](https://github.com/astral-sh/ruff/pull/25389)) - \[`flake8-comprehensions`] Document `RecursionError` edge case in `__len__` (`C416`) ([#&#8203;25286](https://github.com/astral-sh/ruff/pull/25286)) - \[`mccabe`] Improve example (`C901`) ([#&#8203;25287](https://github.com/astral-sh/ruff/pull/25287)) - \[`pyupgrade`] Clarify fix safety docs (`UP007`, `UP045`) ([#&#8203;25288](https://github.com/astral-sh/ruff/pull/25288)) - \[`refurb`] Document `FURB192` exception change for empty sequences ([#&#8203;25317](https://github.com/astral-sh/ruff/pull/25317)) - \[`ruff`] Document false negative for user-defined types (`RUF013`) ([#&#8203;25289](https://github.com/astral-sh/ruff/pull/25289)) ##### Formatter - Fix formatting of lambdas nested within f-strings ([#&#8203;25398](https://github.com/astral-sh/ruff/pull/25398)) ##### Server - Return code action for `codeAction/resolve` requests that contain no or no valid URL ([#&#8203;25365](https://github.com/astral-sh/ruff/pull/25365)) ##### Other changes - Expand semantic syntax errors for invalid walruses ([#&#8203;25415](https://github.com/astral-sh/ruff/pull/25415)) ##### Contributors - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;fallintoplace](https://github.com/fallintoplace) - [@&#8203;martin-schlossarek](https://github.com/martin-schlossarek) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Ruchir28](https://github.com/Ruchir28) ### [`v0.15.14`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01514) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.13...0.15.14) Released on 2026-05-21. ##### Preview features - \[`airflow`] Implement `airflow-task-implicit-multiple-outputs` (`AIR202`) ([#&#8203;25152](https://github.com/astral-sh/ruff/pull/25152)) - \[`flake8-use-pathlib`] Mark `PTH101` fix as unsafe when first argument is a class attribute annotated as `int` ([#&#8203;25086](https://github.com/astral-sh/ruff/pull/25086)) - \[`pylint`] Implement `too-many-try-statements` (`W0717`) ([#&#8203;23970](https://github.com/astral-sh/ruff/pull/23970)) - \[`ruff`] Add `incorrect-decorator-order` (`RUF074`) ([#&#8203;23461](https://github.com/astral-sh/ruff/pull/23461)) - \[`ruff`] Add `fallible-context-manager` (`RUF075`) ([#&#8203;22844](https://github.com/astral-sh/ruff/pull/22844)) ##### Bug fixes - Fix lambda formatting in interpolated string expressions ([#&#8203;25144](https://github.com/astral-sh/ruff/pull/25144)) - Treat generic `frozenset` annotations as immutable ([#&#8203;25251](https://github.com/astral-sh/ruff/pull/25251)) - \[`flake8-type-checking`] Avoid `strict` behavior when `future-annotations` are enabled (`TC001`, `TC002`, `TC003`) ([#&#8203;25035](https://github.com/astral-sh/ruff/pull/25035)) - \[`pylint`] Avoid false positives in `else` clause (`PLR1733`) ([#&#8203;25177](https://github.com/astral-sh/ruff/pull/25177)) ##### Rule changes - \[`flake8-comprehensions`] Skip `C417` for lambdas with positional-only parameters ([#&#8203;25272](https://github.com/astral-sh/ruff/pull/25272)) - \[`flake8-simplify`] Preserve f-string source verbatim in `SIM101` fix ([#&#8203;25061](https://github.com/astral-sh/ruff/pull/25061)) ##### Performance - Avoid unnecessary parser lookahead for operators ([#&#8203;25290](https://github.com/astral-sh/ruff/pull/25290)) ##### Documentation - Update code example setting Neovim LSP log level ([#&#8203;25284](https://github.com/astral-sh/ruff/pull/25284)) ##### Other changes - Add full PEP 798 support ([#&#8203;25104](https://github.com/astral-sh/ruff/pull/25104)) - Add a parser recursion limit ([#&#8203;24810](https://github.com/astral-sh/ruff/pull/24810)) - Update various `ruff_python_stdlib` APIs ([#&#8203;25273](https://github.com/astral-sh/ruff/pull/25273)) ##### Contributors - [@&#8203;ocaballeror](https://github.com/ocaballeror) - [@&#8203;lerebear](https://github.com/lerebear) - [@&#8203;samuelcolvin](https://github.com/samuelcolvin) - [@&#8203;baltasarblanco](https://github.com/baltasarblanco) - [@&#8203;aconal-com](https://github.com/aconal-com) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Dev-iL](https://github.com/Dev-iL) - [@&#8203;neutrinoceros](https://github.com/neutrinoceros) - [@&#8203;shivamtiwari3](https://github.com/shivamtiwari3) - [@&#8203;Dev-X25874](https://github.com/Dev-X25874) ### [`v0.15.13`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01513) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.12...0.15.13) Released on 2026-05-14. ##### Preview features - Add a rule to flag lazy imports that are eagerly evaluated ([#&#8203;25016](https://github.com/astral-sh/ruff/pull/25016)) - \[`pylint`] Standardize diagnostic message (`PLR0914`, `PLR0917`) ([#&#8203;24996](https://github.com/astral-sh/ruff/pull/24996)) ##### Bug fixes - Fix `F811` false positive for class methods ([#&#8203;24933](https://github.com/astral-sh/ruff/pull/24933)) - Fix setting selection for multi-folder workspace ([#&#8203;24819](https://github.com/astral-sh/ruff/pull/24819)) - \[`eradicate`] Fix false positive for lines with leading whitespace (`ERA001`) ([#&#8203;25122](https://github.com/astral-sh/ruff/pull/25122)) - \[`flake8-pyi`] Fix false positive for f-string debug specifier (`PYI016`) ([#&#8203;24098](https://github.com/astral-sh/ruff/pull/24098)) ##### Rule changes - Always include panic payload in panic diagnostic message ([#&#8203;24873](https://github.com/astral-sh/ruff/pull/24873)) - Restrict `PYI034` for in-place operations to enclosing class ([#&#8203;24511](https://github.com/astral-sh/ruff/pull/24511)) - Improve error message for parameters that are declared `global` ([#&#8203;24902](https://github.com/astral-sh/ruff/pull/24902)) - Update known stdlib ([#&#8203;25103](https://github.com/astral-sh/ruff/pull/25103)) ##### Performance - \[`isort`] Avoid constructing `glob::Pattern`s for literal known modules ([#&#8203;25123](https://github.com/astral-sh/ruff/pull/25123)) ##### CLI - Add TOML examples to `--config` help text ([#&#8203;25013](https://github.com/astral-sh/ruff/pull/25013)) - Colorize ruff check 'All checks passed' ([#&#8203;25085](https://github.com/astral-sh/ruff/pull/25085)) ##### Configuration - Increase max allowed value of `line-length` setting ([#&#8203;24962](https://github.com/astral-sh/ruff/pull/24962)) ##### Documentation - Add `D203` to rules that conflict with the formatter ([#&#8203;25044](https://github.com/astral-sh/ruff/pull/25044)) - Clarify `COM819` and formatter interaction ([#&#8203;25045](https://github.com/astral-sh/ruff/pull/25045)) - Clarify that `NotImplemented` is a value, not an exception (`F901`) ([#&#8203;25054](https://github.com/astral-sh/ruff/pull/25054)) - Update number of lint rules supported ([#&#8203;24942](https://github.com/astral-sh/ruff/pull/24942)) ##### Other changes - Simplify the playground's markdown template ([#&#8203;24924](https://github.com/astral-sh/ruff/pull/24924)) ##### Contributors - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;brian-c11](https://github.com/brian-c11) - [@&#8203;Andrej730](https://github.com/Andrej730) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;darestack](https://github.com/darestack) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;EkriirkE](https://github.com/EkriirkE) - [@&#8203;eyupcanakman](https://github.com/eyupcanakman) - [@&#8203;Hrk84ya](https://github.com/Hrk84ya) - [@&#8203;thernstig](https://github.com/thernstig) - [@&#8203;ntBre](https://github.com/ntBre) ### [`v0.15.12`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01512) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12) Released on 2026-04-24. ##### Preview features - Implement `#ruff:file-ignore` file-level suppressions ([#&#8203;23599](https://github.com/astral-sh/ruff/pull/23599)) - Implement `#ruff:ignore` logical-line suppressions ([#&#8203;23404](https://github.com/astral-sh/ruff/pull/23404)) - Revert preview changes to displayed diagnostic severity in LSP ([#&#8203;24789](https://github.com/astral-sh/ruff/pull/24789)) - \[`airflow`] Implement `task-branch-as-short-circuit` (`AIR004`) ([#&#8203;23579](https://github.com/astral-sh/ruff/pull/23579)) - \[`flake8-bugbear`] Fix `break`/`continue` handling in `loop-iterator-mutation` (`B909`) ([#&#8203;24440](https://github.com/astral-sh/ruff/pull/24440)) - \[`pylint`] Fix `PLC2701` for type parameter scopes ([#&#8203;24576](https://github.com/astral-sh/ruff/pull/24576)) ##### Rule changes - \[`pandas-vet`] Suggest `.array` as well in `PD011` ([#&#8203;24805](https://github.com/astral-sh/ruff/pull/24805)) ##### CLI - Respect default Unix permissions for cache files ([#&#8203;24794](https://github.com/astral-sh/ruff/pull/24794)) ##### Documentation - \[`pylint`] Fix `PLR0124` description not to claim self-comparison always returns the same value ([#&#8203;24749](https://github.com/astral-sh/ruff/pull/24749)) - \[`pyupgrade`] Expand docs on reusable `TypeVar`s and scoping (`UP046`) ([#&#8203;24153](https://github.com/astral-sh/ruff/pull/24153)) - Improve rules table accessibility ([#&#8203;24711](https://github.com/astral-sh/ruff/pull/24711)) ##### Contributors - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;woodruffw](https://github.com/woodruffw) - [@&#8203;avasis-ai](https://github.com/avasis-ai) - [@&#8203;Dev-iL](https://github.com/Dev-iL) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;ShipItAndPray](https://github.com/ShipItAndPray) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;majiayu000](https://github.com/majiayu000) ### [`v0.15.11`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01511) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.10...0.15.11) Released on 2026-04-16. ##### Preview features - \[`ruff`] Ignore `RUF029` when function is decorated with `asynccontextmanager` ([#&#8203;24642](https://github.com/astral-sh/ruff/pull/24642)) - \[`airflow`] Implement `airflow-xcom-pull-in-template-string` (`AIR201`) ([#&#8203;23583](https://github.com/astral-sh/ruff/pull/23583)) - \[`flake8-bandit`] Fix `S103` false positives and negatives in mask analysis ([#&#8203;24424](https://github.com/astral-sh/ruff/pull/24424)) ##### Bug fixes - \[`flake8-async`] Omit overridden methods for `ASYNC109` ([#&#8203;24648](https://github.com/astral-sh/ruff/pull/24648)) ##### Documentation - \[`flake8-async`] Add override mention to `ASYNC109` docs ([#&#8203;24666](https://github.com/astral-sh/ruff/pull/24666)) - Update Neovim config examples to use `vim.lsp.config` ([#&#8203;24577](https://github.com/astral-sh/ruff/pull/24577)) ##### Contributors - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;benberryallwood](https://github.com/benberryallwood) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Dev-iL](https://github.com/Dev-iL) ### [`v0.15.10`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01510) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.9...0.15.10) Released on 2026-04-09. ##### Preview features - \[`flake8-logging`] Allow closures in except handlers (`LOG004`) ([#&#8203;24464](https://github.com/astral-sh/ruff/pull/24464)) - \[`flake8-self`] Make `SLF` diagnostics robust to non-self-named variables ([#&#8203;24281](https://github.com/astral-sh/ruff/pull/24281)) - \[`flake8-simplify`] Make the fix for `collapsible-if` safe in `preview` (`SIM102`) ([#&#8203;24371](https://github.com/astral-sh/ruff/pull/24371)) ##### Bug fixes - Avoid emitting multi-line f-string elements before Python 3.12 ([#&#8203;24377](https://github.com/astral-sh/ruff/pull/24377)) - Avoid syntax error from `E502` fixes in f-strings and t-strings ([#&#8203;24410](https://github.com/astral-sh/ruff/pull/24410)) - Strip form feeds from indent passed to `dedent_to` ([#&#8203;24381](https://github.com/astral-sh/ruff/pull/24381)) - \[`pyupgrade`] Fix panic caused by handling of octals (`UP012`) ([#&#8203;24390](https://github.com/astral-sh/ruff/pull/24390)) - Reject multi-line f-string elements before Python 3.12 ([#&#8203;24355](https://github.com/astral-sh/ruff/pull/24355)) ##### Rule changes - \[`ruff`] Treat f-string interpolation as potential side effect (`RUF019`) ([#&#8203;24426](https://github.com/astral-sh/ruff/pull/24426)) ##### Server - Add support for custom file extensions ([#&#8203;24463](https://github.com/astral-sh/ruff/pull/24463)) ##### Documentation - Document adding fixes in CONTRIBUTING.md ([#&#8203;24393](https://github.com/astral-sh/ruff/pull/24393)) - Fix JSON typo in settings example ([#&#8203;24517](https://github.com/astral-sh/ruff/pull/24517)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;silverstein](https://github.com/silverstein) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;shizukushq](https://github.com/shizukushq) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) ### [`v0.15.9`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0159) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.8...0.15.9) Released on 2026-04-02. ##### Preview features - \[`pyflakes`] Flag annotated variable redeclarations as `F811` in preview mode ([#&#8203;24244](https://github.com/astral-sh/ruff/pull/24244)) - \[`ruff`] Allow dunder-named assignments in non-strict mode for `RUF067` ([#&#8203;24089](https://github.com/astral-sh/ruff/pull/24089)) ##### Bug fixes - \[`flake8-errmsg`] Avoid shadowing existing `msg` in fix for `EM101` ([#&#8203;24363](https://github.com/astral-sh/ruff/pull/24363)) - \[`flake8-simplify`] Ignore pre-initialization references in `SIM113` ([#&#8203;24235](https://github.com/astral-sh/ruff/pull/24235)) - \[`pycodestyle`] Fix `W391` fixes for consecutive empty notebook cells ([#&#8203;24236](https://github.com/astral-sh/ruff/pull/24236)) - \[`pyupgrade`] Fix `UP008` nested class matching ([#&#8203;24273](https://github.com/astral-sh/ruff/pull/24273)) - \[`pyupgrade`] Ignore strings with string-only escapes (`UP012`) ([#&#8203;16058](https://github.com/astral-sh/ruff/pull/16058)) - \[`ruff`] `RUF072`: skip formfeeds on dedent ([#&#8203;24308](https://github.com/astral-sh/ruff/pull/24308)) - \[`ruff`] Avoid re-using symbol in `RUF024` fix ([#&#8203;24316](https://github.com/astral-sh/ruff/pull/24316)) - \[`ruff`] Parenthesize expression in `RUF050` fix ([#&#8203;24234](https://github.com/astral-sh/ruff/pull/24234)) - Disallow starred expressions as values of starred expressions ([#&#8203;24280](https://github.com/astral-sh/ruff/pull/24280)) ##### Rule changes - \[`flake8-simplify`] Suppress `SIM105` for `except*` before Python 3.12 ([#&#8203;23869](https://github.com/astral-sh/ruff/pull/23869)) - \[`pyflakes`] Extend `F507` to flag `%`-format strings with zero placeholders ([#&#8203;24215](https://github.com/astral-sh/ruff/pull/24215)) - \[`pyupgrade`] `UP018` should detect more unnecessarily wrapped literals (UP018) ([#&#8203;24093](https://github.com/astral-sh/ruff/pull/24093)) - \[`pyupgrade`] Fix `UP008` callable scope handling to support lambdas ([#&#8203;24274](https://github.com/astral-sh/ruff/pull/24274)) - \[`ruff`] `RUF010`: Mark fix as unsafe when it deletes a comment ([#&#8203;24270](https://github.com/astral-sh/ruff/pull/24270)) ##### Formatter - Add `nested-string-quote-style` formatting option ([#&#8203;24312](https://github.com/astral-sh/ruff/pull/24312)) ##### Documentation - \[`flake8-bugbear`] Clarify RUF071 fix safety for non-path string comparisons ([#&#8203;24149](https://github.com/astral-sh/ruff/pull/24149)) - \[`flake8-type-checking`] Clarify import cycle wording for `TC001`/`TC002`/`TC003` ([#&#8203;24322](https://github.com/astral-sh/ruff/pull/24322)) ##### Other changes - Avoid rendering fix lines with trailing whitespace after `|` ([#&#8203;24343](https://github.com/astral-sh/ruff/pull/24343)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;tranhoangtu-it](https://github.com/tranhoangtu-it) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;bitloi](https://github.com/bitloi) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;chinar-amrutkar](https://github.com/chinar-amrutkar) - [@&#8203;second-ed](https://github.com/second-ed) - [@&#8203;getehen](https://github.com/getehen) - [@&#8203;Redovo1](https://github.com/Redovo1) - [@&#8203;matthewlloyd](https://github.com/matthewlloyd) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;RenzoMXD](https://github.com/RenzoMXD) ### [`v0.15.8`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0158) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.7...0.15.8) Released on 2026-03-26. ##### Preview features - \[`ruff`] New rule `unnecessary-if` (`RUF050`) ([#&#8203;24114](https://github.com/astral-sh/ruff/pull/24114)) - \[`ruff`] New rule `useless-finally` (`RUF072`) ([#&#8203;24165](https://github.com/astral-sh/ruff/pull/24165)) - \[`ruff`] New rule `f-string-percent-format` (`RUF073`): warn when using `%` operator on an f-string ([#&#8203;24162](https://github.com/astral-sh/ruff/pull/24162)) - \[`pyflakes`] Recognize `frozendict` as a builtin for Python 3.15+ ([#&#8203;24100](https://github.com/astral-sh/ruff/pull/24100)) ##### Bug fixes - \[`flake8-async`] Use fully-qualified `anyio.lowlevel` import in autofix (`ASYNC115`) ([#&#8203;24166](https://github.com/astral-sh/ruff/pull/24166)) - \[`flake8-bandit`] Check tuple arguments for partial paths in `S607` ([#&#8203;24080](https://github.com/astral-sh/ruff/pull/24080)) - \[`pyflakes`] Skip `undefined-name` (`F821`) for conditionally deleted variables ([#&#8203;24088](https://github.com/astral-sh/ruff/pull/24088)) - `E501`/`W505`/formatter: Exclude nested pragma comments from line width calculation ([#&#8203;24071](https://github.com/astral-sh/ruff/pull/24071)) - Fix `%foo?` parsing in IPython assignment expressions ([#&#8203;24152](https://github.com/astral-sh/ruff/pull/24152)) - `analyze graph`: resolve string imports that reference attributes, not just modules ([#&#8203;24058](https://github.com/astral-sh/ruff/pull/24058)) ##### Rule changes - \[`eradicate`] ignore `ty: ignore` comments in `ERA001` ([#&#8203;24192](https://github.com/astral-sh/ruff/pull/24192)) - \[`flake8-bandit`] Treat `sys.executable` as trusted input in `S603` ([#&#8203;24106](https://github.com/astral-sh/ruff/pull/24106)) - \[`flake8-self`] Recognize `Self` annotation and `self` assignment in `SLF001` ([#&#8203;24144](https://github.com/astral-sh/ruff/pull/24144)) - \[`pyflakes`] `F507`: Fix false negative for non-tuple RHS in `%`-formatting ([#&#8203;24142](https://github.com/astral-sh/ruff/pull/24142)) - \[`refurb`] Parenthesize generator arguments in `FURB142` fixer ([#&#8203;24200](https://github.com/astral-sh/ruff/pull/24200)) ##### Performance - Speed up diagnostic rendering ([#&#8203;24146](https://github.com/astral-sh/ruff/pull/24146)) ##### Server - Warn when Markdown files are skipped due to preview being disabled ([#&#8203;24150](https://github.com/astral-sh/ruff/pull/24150)) ##### Documentation - Clarify `extend-ignore` and `extend-select` settings documentation ([#&#8203;24064](https://github.com/astral-sh/ruff/pull/24064)) - Mention AI policy in PR template ([#&#8203;24198](https://github.com/astral-sh/ruff/pull/24198)) ##### Other changes - Use trusted publishing for NPM packages ([#&#8203;24171](https://github.com/astral-sh/ruff/pull/24171)) ##### Contributors - [@&#8203;bitloi](https://github.com/bitloi) - [@&#8203;Sim-hu](https://github.com/Sim-hu) - [@&#8203;mvanhorn](https://github.com/mvanhorn) - [@&#8203;chinar-amrutkar](https://github.com/chinar-amrutkar) - [@&#8203;markjm](https://github.com/markjm) - [@&#8203;RenzoMXD](https://github.com/RenzoMXD) - [@&#8203;vivekkhimani](https://github.com/vivekkhimani) - [@&#8203;seroperson](https://github.com/seroperson) - [@&#8203;moktamd](https://github.com/moktamd) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;MichaReiser](https://github.com/MichaReiser) ### [`v0.15.7`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0157) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.6...0.15.7) Released on 2026-03-19. ##### Preview features - Display output severity in preview ([#&#8203;23845](https://github.com/astral-sh/ruff/pull/23845)) - Don't show `noqa` hover for non-Python documents ([#&#8203;24040](https://github.com/astral-sh/ruff/pull/24040)) ##### Rule changes - \[`pycodestyle`] Recognize `pyrefly:` as a pragma comment (`E501`) ([#&#8203;24019](https://github.com/astral-sh/ruff/pull/24019)) ##### Server - Don't return code actions for non-Python documents ([#&#8203;23905](https://github.com/astral-sh/ruff/pull/23905)) ##### Documentation - Add company AI policy to contributing guide ([#&#8203;24021](https://github.com/astral-sh/ruff/pull/24021)) - Document editor features for Markdown code formatting ([#&#8203;23924](https://github.com/astral-sh/ruff/pull/23924)) - \[`pylint`] Improve phrasing (`PLC0208`) ([#&#8203;24033](https://github.com/astral-sh/ruff/pull/24033)) ##### Other changes - Use PEP 639 license information ([#&#8203;19661](https://github.com/astral-sh/ruff/pull/19661)) ##### Contributors - [@&#8203;tmimmanuel](https://github.com/tmimmanuel) - [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;statxc](https://github.com/statxc) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;hunterhogan](https://github.com/hunterhogan) - [@&#8203;renovate](https://github.com/renovate) ### [`v0.15.6`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0156) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.5...0.15.6) Released on 2026-03-12. ##### Preview features - Add support for `lazy` import parsing ([#&#8203;23755](https://github.com/astral-sh/ruff/pull/23755)) - Add support for star-unpacking of comprehensions (PEP 798) ([#&#8203;23788](https://github.com/astral-sh/ruff/pull/23788)) - Reject semantic syntax errors for lazy imports ([#&#8203;23757](https://github.com/astral-sh/ruff/pull/23757)) - Drop a few rules from the preview default set ([#&#8203;23879](https://github.com/astral-sh/ruff/pull/23879)) - \[`airflow`] Flag `Variable.get()` calls outside of task execution context (`AIR003`) ([#&#8203;23584](https://github.com/astral-sh/ruff/pull/23584)) - \[`airflow`] Flag runtime-varying values in DAG/task constructor arguments (`AIR304`) ([#&#8203;23631](https://github.com/astral-sh/ruff/pull/23631)) - \[`flake8-bugbear`] Implement `delattr-with-constant` (`B043`) ([#&#8203;23737](https://github.com/astral-sh/ruff/pull/23737)) - \[`flake8-tidy-imports`] Add `TID254` to enforce lazy imports ([#&#8203;23777](https://github.com/astral-sh/ruff/pull/23777)) - \[`flake8-tidy-imports`] Allow users to ban lazy imports with `TID254` ([#&#8203;23847](https://github.com/astral-sh/ruff/pull/23847)) - \[`isort`] Retain `lazy` keyword when sorting imports ([#&#8203;23762](https://github.com/astral-sh/ruff/pull/23762)) - \[`pyupgrade`] Add `from __future__ import annotations` automatically (`UP006`) ([#&#8203;23260](https://github.com/astral-sh/ruff/pull/23260)) - \[`refurb`] Support `newline` parameter in `FURB101` for Python 3.13+ ([#&#8203;23754](https://github.com/astral-sh/ruff/pull/23754)) - \[`ruff`] Add `os-path-commonprefix` (`RUF071`) ([#&#8203;23814](https://github.com/astral-sh/ruff/pull/23814)) - \[`ruff`] Add unsafe fix for os-path-commonprefix (`RUF071`) ([#&#8203;23852](https://github.com/astral-sh/ruff/pull/23852)) - \[`ruff`] Limit `RUF036` to typing contexts; make it unsafe for non-typing-only ([#&#8203;23765](https://github.com/astral-sh/ruff/pull/23765)) - \[`ruff`] Use starred unpacking for `RUF017` in Python 3.15+ ([#&#8203;23789](https://github.com/astral-sh/ruff/pull/23789)) ##### Bug fixes - Fix `--add-noqa` creating unwanted leading whitespace ([#&#8203;23773](https://github.com/astral-sh/ruff/pull/23773)) - Fix `--add-noqa` breaking shebangs ([#&#8203;23577](https://github.com/astral-sh/ruff/pull/23577)) - \[formatter] Fix lambda body formatting for multiline calls and subscripts ([#&#8203;23866](https://github.com/astral-sh/ruff/pull/23866)) - \[formatter] Preserve required annotation parentheses in annotated assignments ([#&#8203;23865](https://github.com/astral-sh/ruff/pull/23865)) - \[formatter] Preserve type-expression parentheses in the formatter ([#&#8203;23867](https://github.com/astral-sh/ruff/pull/23867)) - \[`flake8-annotations`] Fix stack overflow in `ANN401` on quoted annotations with escape sequences ([#&#8203;23912](https://github.com/astral-sh/ruff/pull/23912)) - \[`pep8-naming`] Check naming conventions in `match` pattern bindings (`N806`, `N815`, `N816`) ([#&#8203;23899](https://github.com/astral-sh/ruff/pull/23899)) - \[`perflint`] Fix comment duplication in fixes (`PERF401`, `PERF403`) ([#&#8203;23729](https://github.com/astral-sh/ruff/pull/23729)) - \[`pyupgrade`] Properly trigger `super` change in nested class (`UP008`) ([#&#8203;22677](https://github.com/astral-sh/ruff/pull/22677)) - \[`ruff`] Avoid syntax errors in `RUF036` fixes ([#&#8203;23764](https://github.com/astral-sh/ruff/pull/23764)) ##### Rule changes - \[`flake8-bandit`] Flag `S501` with `requests.request` ([#&#8203;23873](https://github.com/astral-sh/ruff/pull/23873)) - \[`flake8-executable`] Fix WSL detection in non-Docker containers ([#&#8203;22879](https://github.com/astral-sh/ruff/pull/22879)) - \[`flake8-print`] Ignore `pprint` calls with `stream=` ([#&#8203;23787](https://github.com/astral-sh/ruff/pull/23787)) ##### Documentation - Update docs for Markdown code block formatting ([#&#8203;23871](https://github.com/astral-sh/ruff/pull/23871)) - \[`flake8-bugbear`] Fix misleading description for `B904` ([#&#8203;23731](https://github.com/astral-sh/ruff/pull/23731)) ##### Contributors - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;Bortlesboat](https://github.com/Bortlesboat) - [@&#8203;sososonia-cyber](https://github.com/sososonia-cyber) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;Acelogic](https://github.com/Acelogic) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;xvchris](https://github.com/xvchris) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;getehen](https://github.com/getehen) - [@&#8203;Dev-iL](https://github.com/Dev-iL) ### [`v0.15.5`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0155) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.4...0.15.5) Released on 2026-03-05. ##### Preview features - Discover Markdown files by default in preview mode ([#&#8203;23434](https://github.com/astral-sh/ruff/pull/23434)) - \[`perflint`] Extend `PERF102` to comprehensions and generators ([#&#8203;23473](https://github.com/astral-sh/ruff/pull/23473)) - \[`refurb`] Fix `FURB101` and `FURB103` false positives when I/O variable is used later ([#&#8203;23542](https://github.com/astral-sh/ruff/pull/23542)) - \[`ruff`] Add fix for `none-not-at-end-of-union` (`RUF036`) ([#&#8203;22829](https://github.com/astral-sh/ruff/pull/22829)) - \[`ruff`] Fix false positive for `re.split` with empty string pattern (`RUF055`) ([#&#8203;23634](https://github.com/astral-sh/ruff/pull/23634)) ##### Bug fixes - \[`fastapi`] Handle callable class dependencies with `__call__` method (`FAST003`) ([#&#8203;23553](https://github.com/astral-sh/ruff/pull/23553)) - \[`pydocstyle`] Fix numpy section ordering (`D420`) ([#&#8203;23685](https://github.com/astral-sh/ruff/pull/23685)) - \[`pyflakes`] Fix false positive for names shadowing re-exports (`F811`) ([#&#8203;23356](https://github.com/astral-sh/ruff/pull/23356)) - \[`pyupgrade`] Avoid inserting redundant `None` elements in `UP045` ([#&#8203;23459](https://github.com/astral-sh/ruff/pull/23459)) ##### Documentation - Document extension mapping for Markdown code formatting ([#&#8203;23574](https://github.com/astral-sh/ruff/pull/23574)) - Update default Python version examples ([#&#8203;23605](https://github.com/astral-sh/ruff/pull/23605)) ##### Other changes - Publish releases to Astral mirror ([#&#8203;23616](https://github.com/astral-sh/ruff/pull/23616)) ##### Contributors - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;stakeswky](https://github.com/stakeswky) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;bxff](https://github.com/bxff) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;kar-ganap](https://github.com/kar-ganap) ### [`v0.15.4`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0154) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.3...0.15.4) Released on 2026-02-26. This is a follow-up release to 0.15.3 that resolves a panic when the new rule `PLR1712` was enabled with any rule that analyzes definitions, such as many of the `ANN` or `D` rules. ##### Bug fixes - Fix panic on access to definitions after analyzing definitions ([#&#8203;23588](https://github.com/astral-sh/ruff/pull/23588)) - \[`pyflakes`] Suppress false positive in `F821` for names used before `del` in stub files ([#&#8203;23550](https://github.com/astral-sh/ruff/pull/23550)) ##### Documentation - Clarify first-party import detection in Ruff ([#&#8203;23591](https://github.com/astral-sh/ruff/pull/23591)) - Fix incorrect `import-heading` example ([#&#8203;23568](https://github.com/astral-sh/ruff/pull/23568)) ##### Contributors - [@&#8203;stakeswky](https://github.com/stakeswky) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;thejcannon](https://github.com/thejcannon) - [@&#8203;GeObts](https://github.com/GeObts) ### [`v0.15.3`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0153) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.2...0.15.3) Released on 2026-02-26. ##### Preview features - Drop explicit support for `.qmd` file extension ([#&#8203;23572](https://github.com/astral-sh/ruff/pull/23572)) This can now be enabled instead by setting the [`extension`](https://docs.astral.sh/ruff/settings/#extension) option: ```toml # ruff.toml extension = { qmd = "markdown" } # pyproject.toml [tool.ruff] extension = { qmd = "markdown" } ``` - Include configured extensions in file discovery ([#&#8203;23400](https://github.com/astral-sh/ruff/pull/23400)) - \[`flake8-bandit`] Allow suspicious imports in `TYPE_CHECKING` blocks (`S401`-`S415`) ([#&#8203;23441](https://github.com/astral-sh/ruff/pull/23441)) - \[`flake8-bugbear`] Allow `B901` in pytest hook wrappers ([#&#8203;21931](https://github.com/astral-sh/ruff/pull/21931)) - \[`flake8-import-conventions`] Add missing conventions from upstream (`ICN001`, `ICN002`) ([#&#8203;21373](https://github.com/astral-sh/ruff/pull/21373)) - \[`pydocstyle`] Add rule to enforce docstring section ordering (`D420`) ([#&#8203;23537](https://github.com/astral-sh/ruff/pull/23537)) - \[`pylint`] Implement `swap-with-temporary-variable` (`PLR1712`) ([#&#8203;22205](https://github.com/astral-sh/ruff/pull/22205)) - \[`ruff`] Add `unnecessary-assign-before-yield` (`RUF070`) ([#&#8203;23300](https://github.com/astral-sh/ruff/pull/23300)) - \[`ruff`] Support file-level noqa in `RUF102` ([#&#8203;23535](https://github.com/astral-sh/ruff/pull/23535)) - \[`ruff`] Suppress diagnostic for invalid f-strings before Python 3.12 (`RUF027`) ([#&#8203;23480](https://github.com/astral-sh/ruff/pull/23480)) - \[`flake8-bandit`] Don't flag `BaseLoader`/`CBaseLoader` as unsafe (`S506`) ([#&#8203;23510](https://github.com/astral-sh/ruff/pull/23510)) ##### Bug fixes - Avoid infinite loop between `I002` and `PYI025` ([#&#8203;23352](https://github.com/astral-sh/ruff/pull/23352)) - \[`pyflakes`] Fix false positive for `@overload` from `lint.typing-modules` (`F811`) ([#&#8203;23357](https://github.com/astral-sh/ruff/pull/23357)) - \[`pyupgrade`] Fix false positive for `TypeVar` default before Python 3.12 (`UP046`) ([#&#8203;23540](https://github.com/astral-sh/ruff/pull/23540)) - \[`pyupgrade`] Fix handling of `\N` in raw strings (`UP032`) ([#&#8203;22149](https://github.com/astral-sh/ruff/pull/22149)) ##### Rule changes - Render sub-diagnostics in the GitHub output format ([#&#8203;23455](https://github.com/astral-sh/ruff/pull/23455)) - \[`flake8-bugbear`] Tag certain `B007` diagnostics as unnecessary ([#&#8203;23453](https://github.com/astral-sh/ruff/pull/23453)) - \[`ruff`] Ignore unknown rule codes in `RUF100` ([#&#8203;23531](https://github.com/astral-sh/ruff/pull/23531)) These are now flagged by [`RUF102`](https://docs.astral.sh/ruff/rules/invalid-rule-code/) instead. ##### Documentation - Fix missing settings links for several linters ([#&#8203;23519](https://github.com/astral-sh/ruff/pull/23519)) - Update isort action comments heading ([#&#8203;23515](https://github.com/astral-sh/ruff/pull/23515)) - \[`pydocstyle`] Fix double comma in description of `D404` ([#&#8203;23440](https://github.com/astral-sh/ruff/pull/23440)) ##### Other changes - Update the Python module (notably `find_ruff_bin`) for parity with uv ([#&#8203;23406](https://github.com/astral-sh/ruff/pull/23406)) ##### Contributors - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;o1x3](https://github.com/o1x3) - [@&#8203;assadyousuf](https://github.com/assadyousuf) - [@&#8203;kar-ganap](https://github.com/kar-ganap) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;Bnyro](https://github.com/Bnyro) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;gcomneno](https://github.com/gcomneno) - [@&#8203;jaap3](https://github.com/jaap3) - [@&#8203;stakeswky](https://github.com/stakeswky) ### [`v0.15.2`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0152) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.1...0.15.2) Released on 2026-02-19. ##### Preview features - Expand the default rule set ([#&#8203;23385](https://github.com/astral-sh/ruff/pull/23385)) In preview, Ruff now enables a significantly expanded default rule set of 412 rules, up from the stable default set of 59 rules. The new rules are mostly a superset of the stable defaults, with the exception of these rules, which are removed from the preview defaults: - [`multiple-imports-on-one-line`](https://docs.astral.sh/ruff/rules/multiple-imports-on-one-line) (`E401`) - [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E402`) - [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E701`) - [`multiple-statements-on-one-line-semicolon`](https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon) (`E702`) - [`useless-semicolon`](https://docs.astral.sh/ruff/rules/useless-semicolon) (`E703`) - [`none-comparison`](https://docs.astral.sh/ruff/rules/none-comparison) (`E711`) - [`true-false-comparison`](https://docs.astral.sh/ruff/rules/true-false-comparison) (`E712`) - [`not-in-test`](https://docs.astral.sh/ruff/rules/not-in-test) (`E713`) - [`not-is-test`](https://docs.astral.sh/ruff/rules/not-is-test) (`E714`) - [`type-comparison`](https://docs.astral.sh/ruff/rules/type-comparison) (`E721`) - [`lambda-assignment`](https://docs.astral.sh/ruff/rules/lambda-assignment) (`E731`) - [`ambiguous-variable-name`](https://docs.astral.sh/ruff/rules/ambiguous-variable-name) (`E741`) - [`ambiguous-class-name`](https://docs.astral.sh/ruff/rules/ambiguous-class-name) (`E742`) - [`ambiguous-function-name`](https://docs.astral.sh/ruff/rules/ambiguous-function-name) (`E743`) - [`undefined-local-with-import-star`](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star) (`F403`) - [`undefined-local-with-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage) (`F405`) - [`undefined-local-with-nested-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-nested-import-star-usage) (`F406`) - [`forward-annotation-syntax-error`](https://docs.astral.sh/ruff/rules/forward-annotation-syntax-error) (`F722`) If you use preview and prefer the old defaults, you can restore them with configuration like: ```toml # ruff.toml [lint] select = ["E4", "E7", "E9", "F"] # pyproject.toml [tool.ruff.lint] select = ["E4", "E7", "E9", "F"] ``` If you do give them a try, feel free to share your feedback in the [GitHub discussion](https://github.com/astral-sh/ruff/discussions/23203)! - \[`flake8-pyi`] Also check string annotations (`PYI041`) ([#&#8203;19023](https://github.com/astral-sh/ruff/pull/19023)) ##### Bug fixes - \[`flake8-async`] Fix `in_async_context` logic ([#&#8203;23426](https://github.com/astral-sh/ruff/pull/23426)) - \[`ruff`] Fix for `RUF102` should delete entire comment ([#&#8203;23380](https://github.com/astral-sh/ruff/pull/23380)) - \[`ruff`] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (`RUF027`) ([#&#8203;21069](https://github.com/astral-sh/ruff/pull/21069)) - \[`flake8-bugbear`] Fix `B023` false positive for immediately-invoked lambdas ([#&#8203;23294](https://github.com/astral-sh/ruff/pull/23294)) - \[parser] Fix false syntax error for match-like annotated assignments ([#&#8203;23297](https://github.com/astral-sh/ruff/pull/23297)) - \[parser] Fix indentation tracking after line continuations ([#&#8203;23417](https://github.com/astral-sh/ruff/pull/23417)) ##### Rule changes - \[`flake8-executable`] Allow global flags in uv shebangs (`EXE003`) ([#&#8203;22582](https://github.com/astral-sh/ruff/pull/22582)) - \[`pyupgrade`] Fix handling of `typing.{io,re}` (`UP035`) ([#&#8203;23131](https://github.com/astral-sh/ruff/pull/23131)) - \[`ruff`] Detect `PLC0207` on chained `str.split()` calls ([#&#8203;23275](https://github.com/astral-sh/ruff/pull/23275)) ##### CLI - Remove invalid inline `noqa` warning ([#&#8203;23270](https://github.com/astral-sh/ruff/pull/23270)) ##### Configuration - Add extension mapping to configuration file options ([#&#8203;23384](https://github.com/astral-sh/ruff/pull/23384)) ##### Documentation - Add `Q004` to the list of conflicting rules ([#&#8203;23340](https://github.com/astral-sh/ruff/pull/23340)) - \[`ruff`] Expand `lint.external` docs and add sub-diagnostic (`RUF100`, `RUF102`) ([#&#8203;23268](https://github.com/astral-sh/ruff/pull/23268)) ##### Contributors - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;Jkhall81](https://github.com/Jkhall81) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;harupy](https://github.com/harupy) - [@&#8203;ngnpope](https://github.com/ngnpope) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;kar-ganap](https://github.com/kar-ganap) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;shaanmajid](https://github.com/shaanmajid) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;toslunar](https://github.com/toslunar) ### [`v0.15.1`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01518) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.0...0.15.1) Released on 2026-06-18. ##### Preview features - Handle nested `ruff:ignore` comments ([#&#8203;25791](https://github.com/astral-sh/ruff/pull/25791)) - Stop displaying severity in output ([#&#8203;26050](https://github.com/astral-sh/ruff/pull/26050)) - Use human-readable names in CLI output ([#&#8203;25937](https://github.com/astral-sh/ruff/pull/25937)) - Use human-readable names in LSP and playground diagnostics ([#&#8203;26058](https://github.com/astral-sh/ruff/pull/26058)) - \[`pydocstyle`] Prevent property docstrings starting with verbs (`D421`) ([#&#8203;23775](https://github.com/astral-sh/ruff/pull/23775)) - \[`flake8-pyi`] Extend `PYI033` to Python files ([#&#8203;26129](https://github.com/astral-sh/ruff/pull/26129)) ##### Bug fixes - Detect equivalent numeric mapping keys ([#&#8203;26009](https://github.com/astral-sh/ruff/pull/26009)) - Detect mapping keys equivalent to booleans ([#&#8203;25982](https://github.com/astral-sh/ruff/pull/25982)) - Detect repeated signed and complex dictionary keys ([#&#8203;26007](https://github.com/astral-sh/ruff/pull/26007)) ##### Rule changes - \[`flake8-pyi`] Rename `PYI033` to `legacy-type-comment` ([#&#8203;26131](https://github.com/astral-sh/ruff/pull/26131)) ##### Performance - Use `ThinVec` for call keywords ([#&#8203;25999](https://github.com/astral-sh/ruff/pull/25999)) - Inline parser recovery context checks ([#&#8203;26038](https://github.com/astral-sh/ruff/pull/26038)) - Match parser keywords as bytes ([#&#8203;26037](https://github.com/astral-sh/ruff/pull/26037)) - Move value parsing out of lexing ([#&#8203;25360](https://github.com/astral-sh/ruff/pull/25360)) ##### Server - Render subdiagnostics and secondary annotations as related information ([#&#8203;26011](https://github.com/astral-sh/ruff/pull/26011)) ##### Documentation - Update fix availability for always-fixable rules ([#&#8203;26091](https://github.com/astral-sh/ruff/pull/26091)) - \[`flake8-tidy-imports`] Add fix safety section (`TID252`) ([#&#8203;17491](https://github.com/astral-sh/ruff/pull/17491)) ##### Parser - Reject `__debug__` lambda parameters ([#&#8203;26022](https://github.com/astral-sh/ruff/pull/26022)) - Reject `_` as a match-pattern target ([#&#8203;25977](https://github.com/astral-sh/ruff/pull/25977)) - Reject multiple starred names in sequence patterns ([#&#8203;25976](https://github.com/astral-sh/ruff/pull/25976)) - Reject parenthesized star imports ([#&#8203;26021](https://github.com/astral-sh/ruff/pull/26021)) - Reject starred comprehension targets ([#&#8203;26023](https://github.com/astral-sh/ruff/pull/26023)) - Reject unparenthesized generator expressions in class bases ([#&#8203;25978](https://github.com/astral-sh/ruff/pull/25978)) - Reject `yield` expressions after commas ([#&#8203;26024](https://github.com/astral-sh/ruff/pull/26024)) - Validate function type parameter default order ([#&#8203;25981](https://github.com/astral-sh/ruff/pull/25981)) ##### Playground - Make diagnostic links clickable ([#&#8203;26104](https://github.com/astral-sh/ruff/pull/26104)) - Use diagnostic tags ([#&#8203;26105](https://github.com/astral-sh/ruff/pull/26105)) ##### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;gtkacz](https://github.com/gtkacz) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) ### [`v0.15.0`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0150) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.14...0.15.0) Released on 2026-02-03. Check out the [blog post](https://astral.sh/blog/ruff-v0.15.0) for a migration guide and overview of the changes! ##### Breaking changes - Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes. - The linter now supports block suppression comments. For example, to suppress `N803` for all parameters in this function: ```python # ruff: disable[N803] def foo( legacyArg1, legacyArg2, legacyArg3, legacyArg4, ): ... # ruff: enable[N803] ``` See the [documentation](https://docs.astral.sh/ruff/linter/#block-level) for more details. - The `ruff:alpine` Docker image is now based on Alpine 3.23 (up from 3.21). - The `ruff:debian` and `ruff:debian-slim` Docker images are now based on Debian 13 "Trixie" instead of Debian 12 "Bookworm." - Binaries for the `ppc64` (64-bit big-endian PowerPC) architecture are no longer included in our releases. It should still be possible to build Ruff manually for this platform, if needed. - Ruff now resolves all `extend`ed configuration files before falling back on a default Python version. ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`blocking-http-call-httpx-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-http-call-httpx-in-async-function) (`ASYNC212`) - [`blocking-path-method-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-path-method-in-async-function) (`ASYNC240`) - [`blocking-input-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-input-in-async-function) (`ASYNC250`) - [`map-without-explicit-strict`](https://docs.astral.sh/ruff/rules/map-without-explicit-strict) (`B912`) - [`if-exp-instead-of-or-operator`](https://docs.astral.sh/ruff/rules/if-exp-instead-of-or-operator) (`FURB110`) - [`single-item-membership-test`](https://docs.astral.sh/ruff/rules/single-item-membership-test) (`FURB171`) - [`missing-maxsplit-arg`](https://docs.astral.sh/ruff/rules/missing-maxsplit-arg) (`PLC0207`) - [`unnecessary-lambda`](https://docs.astral.sh/ruff/rules/unnecessary-lambda) (`PLW0108`) - [`unnecessary-empty-iterable-within-deque-call`](https://docs.astral.sh/ruff/rules/unnecessary-empty-iterable-within-deque-call) (`RUF037`) - [`in-empty-collection`](https://docs.astral.sh/ruff/rules/in-empty-collection) (`RUF060`) - [`legacy-form-pytest-raises`](https://docs.astral.sh/ruff/rules/legacy-form-pytest-raises) (`RUF061`) - [`non-octal-permissions`](https://docs.astral.sh/ruff/rules/non-octal-permissions) (`RUF064`) - [`invalid-rule-code`](https://docs.astral.sh/ruff/rules/invalid-rule-code) (`RUF102`) - [`invalid-suppression-comment`](https://docs.astral.sh/ruff/rules/invalid-suppression-comment) (`RUF103`) - [`unmatched-suppression-comment`](https://docs.astral.sh/ruff/rules/unmatched-suppression-comment) (`RUF104`) - [`replace-str-enum`](https://docs.astral.sh/ruff/rules/replace-str-enum) (`UP042`) The following behaviors have been stabilized: - The `--output-format` flag is now respected when running Ruff in `--watch` mode, and the `full` output format is now used by default, matching the regular CLI output. - [`builtin-attribute-shadowing`](https://docs.astral.sh/ruff/rules/builtin-attribute-shadowing/) (`A003`) now detects the use of shadowed built-in names in additional contexts like decorators, default arguments, and other attribute definitions. - [`duplicate-union-member`](https://docs.astral.sh/ruff/rules/duplicate-union-member/) (`PYI016`) now considers `typing.Optional` when searching for duplicate union members. - [`split-static-string`](https://docs.astral.sh/ruff/rules/split-static-string/) (`SIM905`) now offers an autofix when the `maxsplit` argument is provided, even without a `sep` argument. - [`dict-get-with-none-default`](https://docs.astral.sh/ruff/rules/dict-get-with-none-default/) (`SIM910`) now applies to more types of key expressions. - [`super-call-with-parameters`](https://docs.astral.sh/ruff/rules/super-call-with-parameters/) (`UP008`) now has a safe fix when it will not delete comments. - [`unnecessary-default-type-args`](https://docs.astral.sh/ruff/rules/unnecessary-default-type-args/) (`UP043`) now applies to stub (`.pyi`) files on Python versions before 3.13. ##### Formatter This release introduces the new 2026 style guide, with the following changes: - Lambda parameters are now kept on the same line and lambda bodies will be parenthesized to let them break across multiple lines ([#&#8203;21385](https://github.com/astral-sh/ruff/pull/21385)) - Parentheses around tuples of exceptions in `except` clauses will now be removed on Python 3.14 and later ([#&#8203;20768](https://github.com/astral-sh/ruff/pull/20768)) - A single empty line is now permitted at the beginning of function bodies ([#&#8203;21110](https://github.com/astral-sh/ruff/pull/21110)) - Parentheses are avoided for long `as` captures in `match` statements ([#&#8203;21176](https://github.com/astral-sh/ruff/pull/21176)) - Extra spaces between escaped quotes and ending triple quotes can now be omitted ([#&#8203;17216](https://github.com/astral-sh/ruff/pull/17216)) - Blank lines are now enforced before classes with decorators in stub files ([#&#8203;18888](https://github.com/astral-sh/ruff/pull/18888)) ##### Preview features - Apply formatting to Markdown code blocks ([#&#8203;22470](https://github.com/astral-sh/ruff/pull/22470), [#&#8203;22990](https://github.com/astral-sh/ruff/pull/22990), [#&#8203;22996](https://github.com/astral-sh/ruff/pull/22996)) See the [documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details. ##### Bug fixes - Fix suppression indentation matching ([#&#8203;22903](https://github.com/astral-sh/ruff/pull/22903)) ##### Rule changes - Customize where the `fix_title` sub-diagnostic appears ([#&#8203;23044](https://github.com/astral-sh/ruff/pull/23044)) - \[`FastAPI`] Add sub-diagnostic explaining why a fix was unavailable (`FAST002`) ([#&#8203;22565](https://github.com/astral-sh/ruff/pull/22565)) - \[`flake8-annotations`] Don't suggest `NoReturn` for functions raising `NotImplementedError` (`ANN201`, `ANN202`, `ANN205`, `ANN206`) ([#&#8203;21311](https://github.com/astral-sh/ruff/pull/21311)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP017`) ([#&#8203;22873](https://github.com/astral-sh/ruff/pull/22873)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP020`) ([#&#8203;22872](https://github.com/astral-sh/ruff/pull/22872)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP033`) ([#&#8203;22871](https://github.com/astral-sh/ruff/pull/22871)) - \[`refurb`] Do not add `abc.ABC` if already present (`FURB180`) ([#&#8203;22234](https://github.com/astral-sh/ruff/pull/22234)) - \[`refurb`] Make fix unsafe if it deletes comments (`FURB110`) ([#&#8203;22768](https://github.com/astral-sh/ruff/pull/22768)) - \[`ruff`] Add sub-diagnostics with permissions (`RUF064`) ([#&#8203;22972](https://github.com/astral-sh/ruff/pull/22972)) ##### Server - Identify notebooks by LSP `didOpen` instead of `.ipynb` file extension ([#&#8203;22810](https://github.com/astral-sh/ruff/pull/22810)) ##### CLI - Add `--color` CLI option to force colored output ([#&#8203;22806](https://github.com/astral-sh/ruff/pull/22806)) ##### Documentation - Document `-` stdin convention in CLI help text ([#&#8203;22817](https://github.com/astral-sh/ruff/pull/22817)) - \[`refurb`] Change example to `re.search` with `^` anchor (`FURB167`) ([#&#8203;22984](https://github.com/astral-sh/ruff/pull/22984)) - Fix link to Sphinx code block directives ([#&#8203;23041](https://github.com/astral-sh/ruff/pull/23041)) - \[`pydocstyle`] Clarify which quote styles are allowed (`D300`) ([#&#8203;22825](https://github.com/astral-sh/ruff/pull/22825)) - \[`flake8-bugbear`] Improve docs for `no-explicit-stacklevel` (`B028`) ([#&#8203;22538](https://github.com/astral-sh/ruff/pull/22538)) ##### Other changes - Update MSRV to 1.91 ([#&#8203;22874](https://github.com/astral-sh/ruff/pull/22874)) ##### Contributors - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;Jkhall81](https://github.com/Jkhall81) - [@&#8203;cwkang1998](https://github.com/cwkang1998) - [@&#8203;manzt](https://github.com/manzt) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;hugovk](https://github.com/hugovk) - [@&#8203;caiquejjx](https://github.com/caiquejjx) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;akawd](https://github.com/akawd) - [@&#8203;konstin](https://github.com/konstin) ### [`v0.14.14`](https://github.com/astral-sh/ruff/releases/tag/0.14.14) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.13...0.14.14) #### Release Notes Released on 2026-01-22. ##### Preview features - Preserve required parentheses in lambda bodies ([#&#8203;22747](https://github.com/astral-sh/ruff/pull/22747)) - Combine range suppression code diagnostics ([#&#8203;22613](https://github.com/astral-sh/ruff/pull/22613)) - \[`airflow`] Second positional argument to `Asset`/`Dataset` should not be a dictionary (`AIR303`) ([#&#8203;22453](https://github.com/astral-sh/ruff/pull/22453)) - \[`ruff`] Detect duplicate entries in `__all__` (`RUF068`) ([#&#8203;22114](https://github.com/astral-sh/ruff/pull/22114)) ##### Bug fixes - \[`pyupgrade`] Allow shadowing non-builtin bindings (`UP029`) ([#&#8203;22749](https://github.com/astral-sh/ruff/pull/22749)) - \[`pyupgrade`] Apply `UP045` to string arguments of `typing.cast` ([#&#8203;22320](https://github.com/astral-sh/ruff/pull/22320)) - \[`flake8-pie`] Detect duplicated declared class fields in `PIE794` ([#&#8203;22717](https://github.com/astral-sh/ruff/pull/22717)) ##### Rule changes - \[`flake8-pyi`] Fix inconsistent handling of forward references for `__new__`, `__enter__`, `__aenter__` in `PYI034` ([#&#8203;22798](https://github.com/astral-sh/ruff/pull/22798)) - \[`flake8-pytest-style`] Support `check` parameter in `PT011` ([#&#8203;22725](https://github.com/astral-sh/ruff/pull/22725)) - \[`ruff`] Add exception for `ctypes.Structure._fields_` (`RUF012`) ([#&#8203;22559](https://github.com/astral-sh/ruff/pull/22559)) - Many fixes are now marked unsafe if they would remove comments: - \[`flake8-bugbear`] [`B009`](https://github.com/astral-sh/ruff/pull/22656), [`B010`](https://github.com/astral-sh/ruff/pull/22657), [`B013`](https://github.com/astral-sh/ruff/pull/22658), [`B014`](https://github.com/astral-sh/ruff/pull/22659), [`B033`](https://github.com/astral-sh/ruff/pull/22632) - \[`flake8-simplify`] [`SIM910`](https://github.com/astral-sh/ruff/pull/22662), [`SIM911`](https://github.com/astral-sh/ruff/pull/22661) - \[`pyupgrade`] [`UP007`](https://github.com/astral-sh/ruff/pull/22772), [`UP039`](https://github.com/astral-sh/ruff/pull/22774), [`UP041`](https://github.com/astral-sh/ruff/pull/22773), [`UP045`](https://github.com/astral-sh/ruff/pull/22772) - \[`refurb`] [`FURB105`](https://github.com/astral-sh/ruff/pull/22767), [`FURB116`](https://github.com/astral-sh/ruff/pull/22681), [`FURB136`](https://github.com/astral-sh/ruff/pull/22680), [`FURB140`](https://github.com/astral-sh/ruff/pull/22679), [`FURB145`](https://github.com/astral-sh/ruff/pull/22670), [`FURB154`](https://github.com/astral-sh/ruff/pull/22669), [`FURB157`](https://github.com/astral-sh/ruff/pull/22668), [`FURB164`](https://github.com/astral-sh/ruff/pull/22667),[`FURB181`](https://github.com/astral-sh/ruff/pull/22666), [`FURB188`](https://github.com/astral-sh/ruff/pull/22665) - \[`ruff`] [`RUF019`](https://github.com/astral-sh/ruff/pull/22663), [`RUF020`](https://github.com/astral-sh/ruff/pull/22664) ##### Documentation - Add `--exit-non-zero-on-format` to formatter exit codes section ([#&#8203;22761](https://github.com/astral-sh/ruff/pull/22761)) - Update contributing guide for adding a new rule ([#&#8203;22779](https://github.com/astral-sh/ruff/pull/22779)) - \[`FastAPI`] Document fix safety for `FAST001` ([#&#8203;22655](https://github.com/astral-sh/ruff/pull/22655)) - \[`flake8-async`] Tweak explanation to focus on latency/efficiency tradeoff (`ASYNC110`) ([#&#8203;22715](https://github.com/astral-sh/ruff/pull/22715)) - \[`pandas-vet`] Make example error out-of-the-box (`PD002`) ([#&#8203;22561](https://github.com/astral-sh/ruff/pull/22561)) - \[`refurb`] Make the example work out of box (`FURB101`) ([#&#8203;22770](https://github.com/astral-sh/ruff/pull/22770)) - \[`refurb`] Make the example work out of box (`FURB103`) ([#&#8203;22769](https://github.com/astral-sh/ruff/pull/22769)) ##### Contributors - [@&#8203;alejsdev](https://github.com/alejsdev) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;caiquejjx](https://github.com/caiquejjx) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;sjyangkevin](https://github.com/sjyangkevin) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;harupy](https://github.com/harupy) #### Install ruff 0.14.14 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.14 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.13`](https://github.com/astral-sh/ruff/releases/tag/0.14.13) #### Release Notes Released on 2026-01-15. This is a follow-up release to 0.14.12. Because of an issue publishing the WASM packages, there is no GitHub release or Git tag for 0.14.12, although the package was published to PyPI. The contents of the 0.14.13 release are identical to 0.14.12. #### 0.14.12 ##### Preview features - \[`flake8-blind-except`] Allow more logging methods (`BLE001`) ([#&#8203;22057](https://github.com/astral-sh/ruff/pull/22057)) - \[`ruff`] Respect `lint.pydocstyle.property-decorators` in `RUF066` ([#&#8203;22515](https://github.com/astral-sh/ruff/pull/22515)) ##### Bug fixes - Fix configuration path in `--show-settings` ([#&#8203;22478](https://github.com/astral-sh/ruff/pull/22478)) - Respect `fmt: skip` for multiple statements on the same logical line ([#&#8203;22119](https://github.com/astral-sh/ruff/pull/22119)) ##### Rule changes - \[`pydocstyle`] Update Rust crate imperative to v1.0.7 (`D401`) ([#&#8203;22519](https://github.com/astral-sh/ruff/pull/22519)) - \[`isort`] Insert imports in alphabetical order (`I002`) ([#&#8203;22493](https://github.com/astral-sh/ruff/pull/22493)) ##### Documentation - Add llms.txt support for documentation ([#&#8203;22463](https://github.com/astral-sh/ruff/pull/22463)) - Use prek in documentation and CI ([#&#8203;22505](https://github.com/astral-sh/ruff/pull/22505)) - \[`flake8-pytest-style`] Add `check` parameter example to `PT017` docs ([#&#8203;22546](https://github.com/astral-sh/ruff/pull/22546)) - \[`ruff`] Make example error out-of-the-box (`RUF103`) ([#&#8203;22558](https://github.com/astral-sh/ruff/pull/22558)) - \[`ruff`] document `RUF100` trailing comment fix behavior ([#&#8203;22479](https://github.com/astral-sh/ruff/pull/22479)) ##### Other changes - wasm: Require explicit logging initialization ([#&#8203;22587](https://github.com/astral-sh/ruff/pull/22587)) ##### Contributors - [@&#8203;terror](https://github.com/terror) - [@&#8203;harupy](https://github.com/harupy) - [@&#8203;Jkhall81](https://github.com/Jkhall81) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;lubaskinc0de](https://github.com/lubaskinc0de) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;11happy](https://github.com/11happy) #### Install ruff 0.14.13 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.13 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.11`](https://github.com/astral-sh/ruff/releases/tag/0.14.11) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.10...0.14.11) #### Release Notes Released on 2026-01-08. ##### Preview features - Consolidate diagnostics for matched disable/enable suppression comments ([#&#8203;22099](https://github.com/astral-sh/ruff/pull/22099)) - Report diagnostics for invalid/unmatched range suppression comments ([#&#8203;21908](https://github.com/astral-sh/ruff/pull/21908)) - \[`airflow`] Passing positional argument into `airflow.lineage.hook.HookLineageCollector.create_asset` is not allowed (`AIR303`) ([#&#8203;22046](https://github.com/astral-sh/ruff/pull/22046)) - \[`refurb`] Mark `FURB192` fix as always unsafe ([#&#8203;22210](https://github.com/astral-sh/ruff/pull/22210)) - \[`ruff`] Add `non-empty-init-module` (`RUF067`) ([#&#8203;22143](https://github.com/astral-sh/ruff/pull/22143)) ##### Bug fixes - Fix GitHub format for multi-line diagnostics ([#&#8203;22108](https://github.com/astral-sh/ruff/pull/22108)) - \[`flake8-unused-arguments`] Mark `**kwargs` in `TypeVar` as used (`ARG001`) ([#&#8203;22214](https://github.com/astral-sh/ruff/pull/22214)) ##### Rule changes - Add `help:` subdiagnostics for several Ruff rules that can sometimes appear to disagree with `ty` ([#&#8203;22331](https://github.com/astral-sh/ruff/pull/22331)) - \[`pylint`] Demote `PLW1510` fix to display-only ([#&#8203;22318](https://github.com/astral-sh/ruff/pull/22318)) - \[`pylint`] Ignore identical members (`PLR1714`) ([#&#8203;22220](https://github.com/astral-sh/ruff/pull/22220)) - \[`pylint`] Improve diagnostic range for `PLC0206` ([#&#8203;22312](https://github.com/astral-sh/ruff/pull/22312)) - \[`ruff`] Improve fix title for `RUF102` invalid rule code ([#&#8203;22100](https://github.com/astral-sh/ruff/pull/22100)) - \[`flake8-simplify`]: Avoid unnecessary builtins import for `SIM105` ([#&#8203;22358](https://github.com/astral-sh/ruff/pull/22358)) ##### Configuration - Allow Python 3.15 as valid `target-version` value in preview ([#&#8203;22419](https://github.com/astral-sh/ruff/pull/22419)) - Check `required-version` before parsing rules ([#&#8203;22410](https://github.com/astral-sh/ruff/pull/22410)) - Include configured `src` directories when resolving graphs ([#&#8203;22451](https://github.com/astral-sh/ruff/pull/22451)) ##### Documentation - Update `T201` suggestion to not use root logger to satisfy `LOG015` ([#&#8203;22059](https://github.com/astral-sh/ruff/pull/22059)) - Fix `iter` example in unsafe fixes doc ([#&#8203;22118](https://github.com/astral-sh/ruff/pull/22118)) - \[`flake8_print`] better suggestion for `basicConfig` in `T201` docs ([#&#8203;22101](https://github.com/astral-sh/ruff/pull/22101)) - \[`pylint`] Restore the fix safety docs for `PLW0133` ([#&#8203;22211](https://github.com/astral-sh/ruff/pull/22211)) - Fix Jupyter notebook discovery info for editors ([#&#8203;22447](https://github.com/astral-sh/ruff/pull/22447)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;cenviity](https://github.com/cenviity) - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;cbachhuber](https://github.com/cbachhuber) - [@&#8203;jelle-openai](https://github.com/jelle-openai) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ValdonVitija](https://github.com/ValdonVitija) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Jkhall81](https://github.com/Jkhall81) - [@&#8203;PeterJCLaw](https://github.com/PeterJCLaw) - [@&#8203;harupy](https://github.com/harupy) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;sjyangkevin](https://github.com/sjyangkevin) - [@&#8203;woodruffw](https://github.com/woodruffw) #### Install ruff 0.14.11 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.11 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.10`](https://github.com/astral-sh/ruff/releases/tag/0.14.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.9...0.14.10) #### Release Notes Released on 2025-12-18. ##### Preview features - \[formatter] Fluent formatting of method chains ([#&#8203;21369](https://github.com/astral-sh/ruff/pull/21369)) - \[formatter] Keep lambda parameters on one line and parenthesize the body if it expands ([#&#8203;21385](https://github.com/astral-sh/ruff/pull/21385)) - \[`flake8-implicit-str-concat`] New rule to prevent implicit string concatenation in collections (`ISC004`) ([#&#8203;21972](https://github.com/astral-sh/ruff/pull/21972)) - \[`flake8-use-pathlib`] Make fixes unsafe when types change in compound statements (`PTH104`, `PTH105`, `PTH109`, `PTH115`) ([#&#8203;22009](https://github.com/astral-sh/ruff/pull/22009)) - \[`refurb`] Extend support for `Path.open` (`FURB101`, `FURB103`) ([#&#8203;21080](https://github.com/astral-sh/ruff/pull/21080)) ##### Bug fixes - \[`pyupgrade`] Fix parsing named Unicode escape sequences (`UP032`) ([#&#8203;21901](https://github.com/astral-sh/ruff/pull/21901)) ##### Rule changes - \[`eradicate`] Ignore `ruff:disable` and `ruff:enable` comments in `ERA001` ([#&#8203;22038](https://github.com/astral-sh/ruff/pull/22038)) - \[`flake8-pytest-style`] Allow `match` and `check` keyword arguments without an expected exception type (`PT010`) ([#&#8203;21964](https://github.com/astral-sh/ruff/pull/21964)) - \[syntax-errors] Annotated name cannot be global ([#&#8203;20868](https://github.com/astral-sh/ruff/pull/20868)) ##### Documentation - Add `uv` and `ty` to the Ruff README ([#&#8203;21996](https://github.com/astral-sh/ruff/pull/21996)) - Document known lambda formatting deviations from Black ([#&#8203;21954](https://github.com/astral-sh/ruff/pull/21954)) - Update `setup.md` ([#&#8203;22024](https://github.com/astral-sh/ruff/pull/22024)) - \[`flake8-bandit`] Fix broken link (`S704`) ([#&#8203;22039](https://github.com/astral-sh/ruff/pull/22039)) ##### Other changes - Fix playground Share button showing "Copied!" before clipboard copy completes ([#&#8203;21942](https://github.com/astral-sh/ruff/pull/21942)) ##### Contributors - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;charliecloudberry](https://github.com/charliecloudberry) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;hauntsaninja](https://github.com/hauntsaninja) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;mahiro72](https://github.com/mahiro72) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;phongddo](https://github.com/phongddo) - [@&#8203;PeterJCLaw](https://github.com/PeterJCLaw) #### Install ruff 0.14.10 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.10 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.9`](https://github.com/astral-sh/ruff/releases/tag/0.14.9) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.8...0.14.9) #### Release Notes Released on 2025-12-11. ##### Preview features - \[`ruff`] New `RUF100` diagnostics for unused range suppressions ([#&#8203;21783](https://github.com/astral-sh/ruff/pull/21783)) - \[`pylint`] Detect subclasses of builtin exceptions (`PLW0133`) ([#&#8203;21382](https://github.com/astral-sh/ruff/pull/21382)) ##### Bug fixes - Fix comment placement in lambda parameters ([#&#8203;21868](https://github.com/astral-sh/ruff/pull/21868)) - Skip over trivia tokens after re-lexing ([#&#8203;21895](https://github.com/astral-sh/ruff/pull/21895)) - \[`flake8-bandit`] Fix false positive when using non-standard `CSafeLoader` path (S506). ([#&#8203;21830](https://github.com/astral-sh/ruff/pull/21830)) - \[`flake8-bugbear`] Accept immutable slice default arguments (`B008`) ([#&#8203;21823](https://github.com/astral-sh/ruff/pull/21823)) ##### Rule changes - \[`pydocstyle`] Suppress `D417` for parameters with `Unpack` annotations ([#&#8203;21816](https://github.com/astral-sh/ruff/pull/21816)) ##### Performance - Use `memchr` for computing line indexes ([#&#8203;21838](https://github.com/astral-sh/ruff/pull/21838)) ##### Documentation - Document `*.pyw` is included by default in preview ([#&#8203;21885](https://github.com/astral-sh/ruff/pull/21885)) - Document range suppressions, reorganize suppression docs ([#&#8203;21884](https://github.com/astral-sh/ruff/pull/21884)) - Update mkdocs-material to 9.7.0 (Insiders now free) ([#&#8203;21797](https://github.com/astral-sh/ruff/pull/21797)) ##### Contributors - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;phongddo](https://github.com/phongddo) - [@&#8203;prakhar1144](https://github.com/prakhar1144) - [@&#8203;mahiro72](https://github.com/mahiro72) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;LoicRiegel](https://github.com/LoicRiegel) #### Install ruff 0.14.9 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.9 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.8`](https://github.com/astral-sh/ruff/releases/tag/0.14.8) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.7...0.14.8) #### Release Notes Released on 2025-12-04. ##### Preview features - \[`flake8-bugbear`] Catch `yield` expressions within other statements (`B901`) ([#&#8203;21200](https://github.com/astral-sh/ruff/pull/21200)) - \[`flake8-use-pathlib`] Mark fixes unsafe for return type changes (`PTH104`, `PTH105`, `PTH109`, `PTH115`) ([#&#8203;21440](https://github.com/astral-sh/ruff/pull/21440)) ##### Bug fixes - Fix syntax error false positives for `await` outside functions ([#&#8203;21763](https://github.com/astral-sh/ruff/pull/21763)) - \[`flake8-simplify`] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (`SIM222`, `SIM223`) ([#&#8203;21479](https://github.com/astral-sh/ruff/pull/21479)) ##### Documentation - Suggest using `--output-file` option in GitLab integration ([#&#8203;21706](https://github.com/astral-sh/ruff/pull/21706)) ##### Other changes - \[syntax-error] Default type parameter followed by non-default type parameter ([#&#8203;21657](https://github.com/astral-sh/ruff/pull/21657)) ##### Contributors - [@&#8203;kieran-ryan](https://github.com/kieran-ryan) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;ntBre](https://github.com/ntBre) #### Install ruff 0.14.8 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.8 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.7`](https://github.com/astral-sh/ruff/releases/tag/0.14.7) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.6...0.14.7) #### Release Notes Released on 2025-11-28. ##### Preview features - \[`flake8-bandit`] Handle string literal bindings in suspicious-url-open-usage (`S310`) ([#&#8203;21469](https://github.com/astral-sh/ruff/pull/21469)) - \[`pylint`] Fix `PLR1708` false positives on nested functions ([#&#8203;21177](https://github.com/astral-sh/ruff/pull/21177)) - \[`pylint`] Fix suppression for empty dict without tuple key annotation (`PLE1141`) ([#&#8203;21290](https://github.com/astral-sh/ruff/pull/21290)) - \[`ruff`] Add rule `RUF066` to detect unnecessary class properties ([#&#8203;21535](https://github.com/astral-sh/ruff/pull/21535)) - \[`ruff`] Catch more dummy variable uses (`RUF052`) ([#&#8203;19799](https://github.com/astral-sh/ruff/pull/19799)) ##### Bug fixes - \[server] Set severity for non-rule diagnostics ([#&#8203;21559](https://github.com/astral-sh/ruff/pull/21559)) - \[`flake8-implicit-str-concat`] Avoid invalid fix in (`ISC003`) ([#&#8203;21517](https://github.com/astral-sh/ruff/pull/21517)) - \[`parser`] Fix panic when parsing IPython escape command expressions ([#&#8203;21480](https://github.com/astral-sh/ruff/pull/21480)) ##### CLI - Show partial fixability indicator in statistics output ([#&#8203;21513](https://github.com/astral-sh/ruff/pull/21513)) ##### Contributors - [@&#8203;mikeleppane](https://github.com/mikeleppane) - [@&#8203;senekor](https://github.com/senekor) - [@&#8203;ShaharNaveh](https://github.com/ShaharNaveh) - [@&#8203;JumboBear](https://github.com/JumboBear) - [@&#8203;prakhar1144](https://github.com/prakhar1144) - [@&#8203;tsvikas](https://github.com/tsvikas) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;MichaReiser](https://github.com/MichaReiser) #### Install ruff 0.14.7 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.7 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.6`](https://github.com/astral-sh/ruff/releases/tag/0.14.6) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.5...0.14.6) #### Release Notes Released on 2025-11-21. ##### Preview features - \[`flake8-bandit`] Support new PySNMP API paths (`S508`, `S509`) ([#&#8203;21374](https://github.com/astral-sh/ruff/pull/21374)) ##### Bug fixes - Adjust own-line comment placement between branches ([#&#8203;21185](https://github.com/astral-sh/ruff/pull/21185)) - Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value ([#&#8203;20418](https://github.com/astral-sh/ruff/pull/20418)) - Fix panic when formatting comments in unary expressions ([#&#8203;21501](https://github.com/astral-sh/ruff/pull/21501)) - Respect `fmt: skip` for compound statements on a single line ([#&#8203;20633](https://github.com/astral-sh/ruff/pull/20633)) - \[`refurb`] Fix `FURB103` autofix ([#&#8203;21454](https://github.com/astral-sh/ruff/pull/21454)) - \[`ruff`] Fix false positive for complex conversion specifiers in `logging-eager-conversion` (`RUF065`) ([#&#8203;21464](https://github.com/astral-sh/ruff/pull/21464)) ##### Rule changes - \[`ruff`] Avoid false positive on `ClassVar` reassignment (`RUF012`) ([#&#8203;21478](https://github.com/astral-sh/ruff/pull/21478)) ##### CLI - Render hyperlinks for lint errors ([#&#8203;21514](https://github.com/astral-sh/ruff/pull/21514)) - Add a `ruff analyze` option to skip over imports in `TYPE_CHECKING` blocks ([#&#8203;21472](https://github.com/astral-sh/ruff/pull/21472)) ##### Documentation - Limit `eglot-format` hook to eglot-managed Python buffers ([#&#8203;21459](https://github.com/astral-sh/ruff/pull/21459)) - Mention `force-exclude` in "Configuration > Python file discovery" ([#&#8203;21500](https://github.com/astral-sh/ruff/pull/21500)) ##### Contributors - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;gauthsvenkat](https://github.com/gauthsvenkat) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;thamer](https://github.com/thamer) - [@&#8203;Ruchir28](https://github.com/Ruchir28) - [@&#8203;thejcannon](https://github.com/thejcannon) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;chirizxc](https://github.com/chirizxc) #### Install ruff 0.14.6 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.6 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.5`](https://github.com/astral-sh/ruff/releases/tag/0.14.5) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.4...0.14.5) #### Release Notes Released on 2025-11-13. ##### Preview features - \[`flake8-simplify`] Apply `SIM113` when index variable is of type `int` ([#&#8203;21395](https://github.com/astral-sh/ruff/pull/21395)) - \[`pydoclint`] Fix false positive when Sphinx directives follow a "Raises" section (`DOC502`) ([#&#8203;20535](https://github.com/astral-sh/ruff/pull/20535)) - \[`pydoclint`] Support NumPy-style comma-separated parameters (`DOC102`) ([#&#8203;20972](https://github.com/astral-sh/ruff/pull/20972)) - \[`refurb`] Auto-fix annotated assignments (`FURB101`) ([#&#8203;21278](https://github.com/astral-sh/ruff/pull/21278)) - \[`ruff`] Ignore `str()` when not used for simple conversion (`RUF065`) ([#&#8203;21330](https://github.com/astral-sh/ruff/pull/21330)) ##### Bug fixes - Fix syntax error false positive on alternative `match` patterns ([#&#8203;21362](https://github.com/astral-sh/ruff/pull/21362)) - \[`flake8-simplify`] Fix false positive for iterable initializers with generator arguments (`SIM222`) ([#&#8203;21187](https://github.com/astral-sh/ruff/pull/21187)) - \[`pyupgrade`] Fix false positive on relative imports from local `.builtins` module (`UP029`) ([#&#8203;21309](https://github.com/astral-sh/ruff/pull/21309)) - \[`pyupgrade`] Consistently set the deprecated tag (`UP035`) ([#&#8203;21396](https://github.com/astral-sh/ruff/pull/21396)) ##### Rule changes - \[`refurb`] Detect empty f-strings (`FURB105`) ([#&#8203;21348](https://github.com/astral-sh/ruff/pull/21348)) ##### CLI - Add option to provide a reason to `--add-noqa` ([#&#8203;21294](https://github.com/astral-sh/ruff/pull/21294)) - Add upstream linter URL to `ruff linter --output-format=json` ([#&#8203;21316](https://github.com/astral-sh/ruff/pull/21316)) - Add color to `--help` ([#&#8203;21337](https://github.com/astral-sh/ruff/pull/21337)) ##### Documentation - Add a new "Opening a PR" section to the contribution guide ([#&#8203;21298](https://github.com/astral-sh/ruff/pull/21298)) - Added the PyScripter IDE to the list of "Who is using Ruff?" ([#&#8203;21402](https://github.com/astral-sh/ruff/pull/21402)) - Update PyCharm setup instructions ([#&#8203;21409](https://github.com/astral-sh/ruff/pull/21409)) - \[`flake8-annotations`] Add link to `allow-star-arg-any` option (`ANN401`) ([#&#8203;21326](https://github.com/astral-sh/ruff/pull/21326)) ##### Other changes - \[`configuration`] Improve error message when `line-length` exceeds `u16::MAX` ([#&#8203;21329](https://github.com/astral-sh/ruff/pull/21329)) ##### Contributors - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;hugovk](https://github.com/hugovk) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;pyscripter](https://github.com/pyscripter) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;henryiii](https://github.com/henryiii) - [@&#8203;charliecloudberry](https://github.com/charliecloudberry) #### Install ruff 0.14.5 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.5 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.4`](https://github.com/astral-sh/ruff/releases/tag/0.14.4) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.3...0.14.4) #### Release Notes Released on 2025-11-06. ##### Preview features - \[formatter] Allow newlines after function headers without docstrings ([#&#8203;21110](https://github.com/astral-sh/ruff/pull/21110)) - \[formatter] Avoid extra parentheses for long `match` patterns with `as` captures ([#&#8203;21176](https://github.com/astral-sh/ruff/pull/21176)) - \[`refurb`] Expand fix safety for keyword arguments and `Decimal`s (`FURB164`) ([#&#8203;21259](https://github.com/astral-sh/ruff/pull/21259)) - \[`refurb`] Preserve argument ordering in autofix (`FURB103`) ([#&#8203;20790](https://github.com/astral-sh/ruff/pull/20790)) ##### Bug fixes - \[server] Fix missing diagnostics for notebooks ([#&#8203;21156](https://github.com/astral-sh/ruff/pull/21156)) - \[`flake8-bugbear`] Ignore non-NFKC attribute names in `B009` and `B010` ([#&#8203;21131](https://github.com/astral-sh/ruff/pull/21131)) - \[`refurb`] Fix false negative for underscores before sign in `Decimal` constructor (`FURB157`) ([#&#8203;21190](https://github.com/astral-sh/ruff/pull/21190)) - \[`ruff`] Fix false positives on starred arguments (`RUF057`) ([#&#8203;21256](https://github.com/astral-sh/ruff/pull/21256)) ##### Rule changes - \[`airflow`] extend deprecated argument `concurrency` in `airflow..DAG` (`AIR301`) ([#&#8203;21220](https://github.com/astral-sh/ruff/pull/21220)) ##### Documentation - Improve `extend` docs ([#&#8203;21135](https://github.com/astral-sh/ruff/pull/21135)) - \[`flake8-comprehensions`] Fix typo in `C416` documentation ([#&#8203;21184](https://github.com/astral-sh/ruff/pull/21184)) - Revise Ruff setup instructions for Zed editor ([#&#8203;20935](https://github.com/astral-sh/ruff/pull/20935)) ##### Other changes - Make `ruff analyze graph` work with jupyter notebooks ([#&#8203;21161](https://github.com/astral-sh/ruff/pull/21161)) ##### Contributors - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;musicinmybrain](https://github.com/musicinmybrain) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;tjkuson](https://github.com/tjkuson) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;gauthsvenkat](https://github.com/gauthsvenkat) - [@&#8203;LoicRiegel](https://github.com/LoicRiegel) #### Install ruff 0.14.4 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.4 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.3`](https://github.com/astral-sh/ruff/releases/tag/0.14.3) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.2...0.14.3) #### Release Notes Released on 2025-10-30. ##### Preview features - Respect `--output-format` with `--watch` ([#&#8203;21097](https://github.com/astral-sh/ruff/pull/21097)) - \[`pydoclint`] Fix false positive on explicit exception re-raising (`DOC501`, `DOC502`) ([#&#8203;21011](https://github.com/astral-sh/ruff/pull/21011)) - \[`pyflakes`] Revert to stable behavior if imports for module lie in alternate branches for `F401` ([#&#8203;20878](https://github.com/astral-sh/ruff/pull/20878)) - \[`pylint`] Implement `stop-iteration-return` (`PLR1708`) ([#&#8203;20733](https://github.com/astral-sh/ruff/pull/20733)) - \[`ruff`] Add support for additional eager conversion patterns (`RUF065`) ([#&#8203;20657](https://github.com/astral-sh/ruff/pull/20657)) ##### Bug fixes - Fix finding keyword range for clause header after statement ending with semicolon ([#&#8203;21067](https://github.com/astral-sh/ruff/pull/21067)) - Fix syntax error false positive on nested alternative patterns ([#&#8203;21104](https://github.com/astral-sh/ruff/pull/21104)) - \[`ISC001`] Fix panic when string literals are unclosed ([#&#8203;21034](https://github.com/astral-sh/ruff/pull/21034)) - \[`flake8-django`] Apply `DJ001` to annotated fields ([#&#8203;20907](https://github.com/astral-sh/ruff/pull/20907)) - \[`flake8-pyi`] Fix `PYI034` to not trigger on metaclasses (`PYI034`) ([#&#8203;20881](https://github.com/astral-sh/ruff/pull/20881)) - \[`flake8-type-checking`] Fix `TC003` false positive with `future-annotations` ([#&#8203;21125](https://github.com/astral-sh/ruff/pull/21125)) - \[`pyflakes`] Fix false positive for `__class__` in lambda expressions within class definitions (`F821`) ([#&#8203;20564](https://github.com/astral-sh/ruff/pull/20564)) - \[`pyupgrade`] Fix false positive for `TypeVar` with default on Python <3.13 (`UP046`,`UP047`) ([#&#8203;21045](https://github.com/astral-sh/ruff/pull/21045)) ##### Rule changes - Add missing docstring sections to the numpy list ([#&#8203;20931](https://github.com/astral-sh/ruff/pull/20931)) - \[`airflow`] Extend `airflow.models..Param` check (`AIR311`) ([#&#8203;21043](https://github.com/astral-sh/ruff/pull/21043)) - \[`airflow`] Warn that `airflow....DAG.create_dagrun` has been removed (`AIR301`) ([#&#8203;21093](https://github.com/astral-sh/ruff/pull/21093)) - \[`refurb`] Preserve digit separators in `Decimal` constructor (`FURB157`) ([#&#8203;20588](https://github.com/astral-sh/ruff/pull/20588)) ##### Server - Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics ([#&#8203;21105](https://github.com/astral-sh/ruff/pull/21105)) ##### Documentation - \[`flake8-bandit`] Fix correct example for `S308` ([#&#8203;21128](https://github.com/astral-sh/ruff/pull/21128)) ##### Other changes - Clearer error message when `line-length` goes beyond threshold ([#&#8203;21072](https://github.com/astral-sh/ruff/pull/21072)) ##### Contributors - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;jvacek](https://github.com/jvacek) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;prakhar1144](https://github.com/prakhar1144) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;fatelei](https://github.com/fatelei) - [@&#8203;ShaharNaveh](https://github.com/ShaharNaveh) - [@&#8203;Lee-W](https://github.com/Lee-W) #### Install ruff 0.14.3 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.3 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.2`](https://github.com/astral-sh/ruff/releases/tag/0.14.2) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.1...0.14.2) #### Release Notes Released on 2025-10-23. ##### Preview features - \[`flake8-gettext`] Resolve qualified names and built-in bindings (`INT001`, `INT002`, `INT003`) ([#&#8203;19045](https://github.com/astral-sh/ruff/pull/19045)) ##### Bug fixes - Avoid reusing nested, interpolated quotes before Python 3.12 ([#&#8203;20930](https://github.com/astral-sh/ruff/pull/20930)) - Catch syntax errors in nested interpolations before Python 3.12 ([#&#8203;20949](https://github.com/astral-sh/ruff/pull/20949)) - \[`fastapi`] Handle ellipsis defaults in `FAST002` autofix ([#&#8203;20810](https://github.com/astral-sh/ruff/pull/20810)) - \[`flake8-simplify`] Skip `SIM911` when unknown arguments are present ([#&#8203;20697](https://github.com/astral-sh/ruff/pull/20697)) - \[`pyupgrade`] Always parenthesize assignment expressions in fix for `f-string` (`UP032`) ([#&#8203;21003](https://github.com/astral-sh/ruff/pull/21003)) - \[`pyupgrade`] Fix `UP032` conversion for decimal ints with underscores ([#&#8203;21022](https://github.com/astral-sh/ruff/pull/21022)) - \[`fastapi`] Skip autofix for keyword and `__debug__` path params (`FAST003`) ([#&#8203;20960](https://github.com/astral-sh/ruff/pull/20960)) ##### Rule changes - \[`flake8-bugbear`] Skip `B905` and `B912` for fewer than two iterables and no starred arguments ([#&#8203;20998](https://github.com/astral-sh/ruff/pull/20998)) - \[`ruff`] Use `DiagnosticTag` for more `pyflakes` and `pandas` rules ([#&#8203;20801](https://github.com/astral-sh/ruff/pull/20801)) ##### CLI - Improve JSON output from `ruff rule` ([#&#8203;20168](https://github.com/astral-sh/ruff/pull/20168)) ##### Documentation - Add source to testimonial ([#&#8203;20971](https://github.com/astral-sh/ruff/pull/20971)) - Document when a rule was added ([#&#8203;21035](https://github.com/astral-sh/ruff/pull/21035)) ##### Other changes - \[syntax-errors] Name is parameter and global ([#&#8203;20426](https://github.com/astral-sh/ruff/pull/20426)) - \[syntax-errors] Alternative `match` patterns bind different names ([#&#8203;20682](https://github.com/astral-sh/ruff/pull/20682)) ##### Contributors - [@&#8203;hengky-kurniawan-1](https://github.com/hengky-kurniawan-1) - [@&#8203;ShalokShalom](https://github.com/ShalokShalom) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;LoicRiegel](https://github.com/LoicRiegel) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;ntBre](https://github.com/ntBre) #### Install ruff 0.14.2 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.2 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.1`](https://github.com/astral-sh/ruff/releases/tag/0.14.1) [Compare Source](https://github.com/astral-sh/ruff/compare/0.14.0...0.14.1) #### Release Notes Released on 2025-10-16. ##### Preview features - \[formatter] Remove parentheses around multiple exception types on Python 3.14+ ([#&#8203;20768](https://github.com/astral-sh/ruff/pull/20768)) - \[`flake8-bugbear`] Omit annotation in preview fix for `B006` ([#&#8203;20877](https://github.com/astral-sh/ruff/pull/20877)) - \[`flake8-logging-format`] Avoid dropping implicitly concatenated pieces in the `G004` fix ([#&#8203;20793](https://github.com/astral-sh/ruff/pull/20793)) - \[`pydoclint`] Implement `docstring-extraneous-parameter` (`DOC102`) ([#&#8203;20376](https://github.com/astral-sh/ruff/pull/20376)) - \[`pyupgrade`] Extend `UP019` to detect `typing_extensions.Text` (`UP019`) ([#&#8203;20825](https://github.com/astral-sh/ruff/pull/20825)) - \[`pyupgrade`] Fix false negative for `TypeVar` with default argument in `non-pep695-generic-class` (`UP046`) ([#&#8203;20660](https://github.com/astral-sh/ruff/pull/20660)) ##### Bug fixes - Fix false negatives in `Truthiness::from_expr` for lambdas, generators, and f-strings ([#&#8203;20704](https://github.com/astral-sh/ruff/pull/20704)) - Fix syntax error false positives for escapes and quotes in f-strings ([#&#8203;20867](https://github.com/astral-sh/ruff/pull/20867)) - Fix syntax error false positives on parenthesized context managers ([#&#8203;20846](https://github.com/astral-sh/ruff/pull/20846)) - \[`fastapi`] Fix false positives for path parameters that FastAPI doesn't recognize (`FAST003`) ([#&#8203;20687](https://github.com/astral-sh/ruff/pull/20687)) - \[`flake8-pyi`] Fix operator precedence by adding parentheses when needed (`PYI061`) ([#&#8203;20508](https://github.com/astral-sh/ruff/pull/20508)) - \[`ruff`] Suppress diagnostic for f-string interpolations with debug text (`RUF010`) ([#&#8203;20525](https://github.com/astral-sh/ruff/pull/20525)) ##### Rule changes - \[`airflow`] Add warning to `airflow.datasets.DatasetEvent` usage (`AIR301`) ([#&#8203;20551](https://github.com/astral-sh/ruff/pull/20551)) - \[`flake8-bugbear`] Mark `B905` and `B912` fixes as unsafe ([#&#8203;20695](https://github.com/astral-sh/ruff/pull/20695)) - Use `DiagnosticTag` for more rules - changes display in editors ([#&#8203;20758](https://github.com/astral-sh/ruff/pull/20758),[#&#8203;20734](https://github.com/astral-sh/ruff/pull/20734)) ##### Documentation - Update Python compatibility from 3.13 to 3.14 in README.md ([#&#8203;20852](https://github.com/astral-sh/ruff/pull/20852)) - Update `lint.flake8-type-checking.quoted-annotations` docs ([#&#8203;20765](https://github.com/astral-sh/ruff/pull/20765)) - Update setup instructions for Zed 0.208.0+ ([#&#8203;20902](https://github.com/astral-sh/ruff/pull/20902)) - \[`flake8-datetimez`] Clarify docs for several rules ([#&#8203;20778](https://github.com/astral-sh/ruff/pull/20778)) - Fix typo in `RUF015` description ([#&#8203;20873](https://github.com/astral-sh/ruff/pull/20873)) ##### Other changes - Reduce binary size ([#&#8203;20863](https://github.com/astral-sh/ruff/pull/20863)) - Improved error recovery for unclosed strings (including f- and t-strings) ([#&#8203;20848](https://github.com/astral-sh/ruff/pull/20848)) ##### Contributors - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;Paillat-dev](https://github.com/Paillat-dev) - [@&#8203;terror](https://github.com/terror) - [@&#8203;pieterh-oai](https://github.com/pieterh-oai) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;ageorgou](https://github.com/ageorgou) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;mgaitan](https://github.com/mgaitan) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;injust](https://github.com/injust) - [@&#8203;CarrotManMatt](https://github.com/CarrotManMatt) #### Install ruff 0.14.1 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.1 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.14.0`](https://github.com/astral-sh/ruff/releases/tag/0.14.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.13.3...0.14.0) #### Release Notes Released on 2025-10-07. ##### Breaking changes - Update default and latest Python versions for 3.14 ([#&#8203;20725](https://github.com/astral-sh/ruff/pull/20725)) ##### Preview features - \[`flake8-bugbear`] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (`B006`) ([#&#8203;20024](https://github.com/astral-sh/ruff/pull/20024)) - \[`refurb`] Add fixes for `FURB101` and `FURB103` ([#&#8203;20520](https://github.com/astral-sh/ruff/pull/20520)) - \[`ruff`] Extend `FA102` with listed PEP 585-compatible APIs ([#&#8203;20659](https://github.com/astral-sh/ruff/pull/20659)) ##### Bug fixes - \[`flake8-annotations`] Fix return type annotations to handle shadowed builtin symbols (`ANN201`, `ANN202`, `ANN204`, `ANN205`, `ANN206`) ([#&#8203;20612](https://github.com/astral-sh/ruff/pull/20612)) - \[`flynt`] Fix f-string quoting for mixed quote joiners (`FLY002`) ([#&#8203;20662](https://github.com/astral-sh/ruff/pull/20662)) - \[`isort`] Fix inserting required imports before future imports (`I002`) ([#&#8203;20676](https://github.com/astral-sh/ruff/pull/20676)) - \[`ruff`] Handle argfile expansion errors gracefully ([#&#8203;20691](https://github.com/astral-sh/ruff/pull/20691)) - \[`ruff`] Skip `RUF051` if `else`/`elif` block is present ([#&#8203;20705](https://github.com/astral-sh/ruff/pull/20705)) - \[`ruff`] Improve handling of intermixed comments inside from-imports ([#&#8203;20561](https://github.com/astral-sh/ruff/pull/20561)) ##### Documentation - \[`flake8-comprehensions`] Clarify fix safety documentation (`C413`) ([#&#8203;20640](https://github.com/astral-sh/ruff/pull/20640)) ##### Contributors - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;terror](https://github.com/terror) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;IDrokin117](https://github.com/IDrokin117) - [@&#8203;chirizxc](https://github.com/chirizxc) #### Install ruff 0.14.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.14.0 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.13.3`](https://github.com/astral-sh/ruff/releases/tag/0.13.3) [Compare Source](https://github.com/astral-sh/ruff/compare/0.13.2...0.13.3) #### Release Notes Released on 2025-10-02. ##### Preview features - Display diffs for `ruff format --check` and add support for different output formats ([#&#8203;20443](https://github.com/astral-sh/ruff/pull/20443)) - \[`pyflakes`] Handle some common submodule import situations for `unused-import` (`F401`) ([#&#8203;20200](https://github.com/astral-sh/ruff/pull/20200)) - \[`ruff`] Do not flag `%r` + `repr()` combinations (`RUF065`) ([#&#8203;20600](https://github.com/astral-sh/ruff/pull/20600)) ##### Bug fixes - \[`cli`] Add conflict between `--add-noqa` and `--diff` options ([#&#8203;20642](https://github.com/astral-sh/ruff/pull/20642)) - \[`pylint`] Exempt required imports from `PLR0402` ([#&#8203;20381](https://github.com/astral-sh/ruff/pull/20381)) - \[`pylint`] Fix missing `max-nested-blocks` in settings display ([#&#8203;20574](https://github.com/astral-sh/ruff/pull/20574)) - \[`pyupgrade`] Prevent infinite loop with `I002` and `UP026` ([#&#8203;20634](https://github.com/astral-sh/ruff/pull/20634)) ##### Rule changes - \[`flake8-simplify`] Improve help message clarity (`SIM105`) ([#&#8203;20548](https://github.com/astral-sh/ruff/pull/20548)) ##### Documentation - Add the *The Basics* title back to CONTRIBUTING.md ([#&#8203;20624](https://github.com/astral-sh/ruff/pull/20624)) - Fixed documentation for try\_consider\_else ([#&#8203;20587](https://github.com/astral-sh/ruff/pull/20587)) - \[`isort`] Clarify dependency between `order-by-type` and `case-sensitive` settings ([#&#8203;20559](https://github.com/astral-sh/ruff/pull/20559)) - \[`pylint`] Clarify fix safety to include left-hand hashability (`PLR6201`) ([#&#8203;20518](https://github.com/astral-sh/ruff/pull/20518)) ##### Other changes - \[`playground`] Fix quick fixes for empty ranges in playground ([#&#8203;20599](https://github.com/astral-sh/ruff/pull/20599)) ##### Contributors - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;LilMonk](https://github.com/LilMonk) - [@&#8203;mgiovani](https://github.com/mgiovani) - [@&#8203;IDrokin117](https://github.com/IDrokin117) #### Install ruff 0.13.3 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-installer.ps1 | iex" ``` #### Download ruff 0.13.3 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.13.2`](https://github.com/astral-sh/ruff/releases/tag/0.13.2) [Compare Source](https://github.com/astral-sh/ruff/compare/0.13.1...0.13.2) #### Release Notes Released on 2025-09-25. ##### Preview features - \[`flake8-async`] Implement `blocking-path-method` (`ASYNC240`) ([#&#8203;20264](https://github.com/astral-sh/ruff/pull/20264)) - \[`flake8-bugbear`] Implement `map-without-explicit-strict` (`B912`) ([#&#8203;20429](https://github.com/astral-sh/ruff/pull/20429)) - \[`flake8-bultins`] Detect class-scope builtin shadowing in decorators, default args, and attribute initializers (`A003`) ([#&#8203;20178](https://github.com/astral-sh/ruff/pull/20178)) - \[`ruff`] Implement `logging-eager-conversion` (`RUF065`) ([#&#8203;19942](https://github.com/astral-sh/ruff/pull/19942)) - Include `.pyw` files by default when linting and formatting ([#&#8203;20458](https://github.com/astral-sh/ruff/pull/20458)) ##### Bug fixes - Deduplicate input paths ([#&#8203;20105](https://github.com/astral-sh/ruff/pull/20105)) - \[`flake8-comprehensions`] Preserve trailing commas for single-element lists (`C409`) ([#&#8203;19571](https://github.com/astral-sh/ruff/pull/19571)) - \[`flake8-pyi`] Avoid syntax error from conflict with `PIE790` (`PYI021`) ([#&#8203;20010](https://github.com/astral-sh/ruff/pull/20010)) - \[`flake8-simplify`] Correct fix for positive `maxsplit` without separator (`SIM905`) ([#&#8203;20056](https://github.com/astral-sh/ruff/pull/20056)) - \[`pyupgrade`] Fix `UP008` not to apply when `__class__` is a local variable ([#&#8203;20497](https://github.com/astral-sh/ruff/pull/20497)) - \[`ruff`] Fix `B004` to skip invalid `hasattr`/`getattr` calls ([#&#8203;20486](https://github.com/astral-sh/ruff/pull/20486)) - \[`ruff`] Replace `-nan` with `nan` when using the value to construct a `Decimal` (`FURB164` ) ([#&#8203;20391](https://github.com/astral-sh/ruff/pull/20391)) ##### Documentation - Add 'Finding ways to help' to CONTRIBUTING.md ([#&#8203;20567](https://github.com/astral-sh/ruff/pull/20567)) - Update import path to `ruff-wasm-web` ([#&#8203;20539](https://github.com/astral-sh/ruff/pull/20539)) - \[`flake8-bandit`] Clarify the supported hashing functions (`S324`) ([#&#8203;20534](https://github.com/astral-sh/ruff/pull/20534)) ##### Other changes - \[`playground`] Allow hover quick fixes to appear for overlapping diagnostics ([#&#8203;20527](https://github.com/astral-sh/ruff/pull/20527)) - \[`playground`] Fix non‑BMP code point handling in quick fixes and markers ([#&#8203;20526](https://github.com/astral-sh/ruff/pull/20526)) ##### Contributors - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;second-ed](https://github.com/second-ed) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;ShikChen](https://github.com/ShikChen) - [@&#8203;PieterCK](https://github.com/PieterCK) - [@&#8203;GDYendell](https://github.com/GDYendell) - [@&#8203;RazerM](https://github.com/RazerM) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;ntbre](https://github.com/ntBre) - [@&#8203;MichaReiser](https://github.com/MichaReiser) #### Install ruff 0.13.2 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-installer.ps1 | iex" ``` #### Download ruff 0.13.2 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.13.1`](https://github.com/astral-sh/ruff/releases/tag/0.13.1) [Compare Source](https://github.com/astral-sh/ruff/compare/0.13.0...0.13.1) #### Release Notes Released on 2025-09-18. ##### Preview features - \[`flake8-simplify`] Detect unnecessary `None` default for additional key expression types (`SIM910`) ([#&#8203;20343](https://github.com/astral-sh/ruff/pull/20343)) - \[`flake8-use-pathlib`] Add fix for `PTH123` ([#&#8203;20169](https://github.com/astral-sh/ruff/pull/20169)) - \[`flake8-use-pathlib`] Fix `PTH101`, `PTH104`, `PTH105`, `PTH121` fixes ([#&#8203;20143](https://github.com/astral-sh/ruff/pull/20143)) - \[`flake8-use-pathlib`] Make `PTH111` fix unsafe because it can change behavior ([#&#8203;20215](https://github.com/astral-sh/ruff/pull/20215)) - \[`pycodestyle`] Fix `E301` to only trigger for functions immediately within a class ([#&#8203;19768](https://github.com/astral-sh/ruff/pull/19768)) - \[`refurb`] Mark `single-item-membership-test` fix as always unsafe (`FURB171`) ([#&#8203;20279](https://github.com/astral-sh/ruff/pull/20279)) ##### Bug fixes - Handle t-strings for token-based rules and suppression comments ([#&#8203;20357](https://github.com/astral-sh/ruff/pull/20357)) - \[`flake8-bandit`] Fix truthiness: dict-only `**` displays not truthy for `shell` (`S602`, `S604`, `S609`) ([#&#8203;20177](https://github.com/astral-sh/ruff/pull/20177)) - \[`flake8-simplify`] Fix diagnostic to show correct method name for `str.rsplit` calls (`SIM905`) ([#&#8203;20459](https://github.com/astral-sh/ruff/pull/20459)) - \[`flynt`] Use triple quotes for joined raw strings with newlines (`FLY002`) ([#&#8203;20197](https://github.com/astral-sh/ruff/pull/20197)) - \[`pyupgrade`] Fix false positive when class name is shadowed by local variable (`UP008`) ([#&#8203;20427](https://github.com/astral-sh/ruff/pull/20427)) - \[`pyupgrade`] Prevent infinite loop with `I002` and `UP026` ([#&#8203;20327](https://github.com/astral-sh/ruff/pull/20327)) - \[`ruff`] Recognize t-strings, generators, and lambdas in `invalid-index-type` (`RUF016`) ([#&#8203;20213](https://github.com/astral-sh/ruff/pull/20213)) ##### Rule changes - \[`RUF102`] Respect rule redirects in invalid rule code detection ([#&#8203;20245](https://github.com/astral-sh/ruff/pull/20245)) - \[`flake8-bugbear`] Mark the fix for `unreliable-callable-check` as always unsafe (`B004`) ([#&#8203;20318](https://github.com/astral-sh/ruff/pull/20318)) - \[`ruff`] Allow dataclass attribute value instantiation from nested frozen dataclass (`RUF009`) ([#&#8203;20352](https://github.com/astral-sh/ruff/pull/20352)) ##### CLI - Add fixes to `output-format=sarif` ([#&#8203;20300](https://github.com/astral-sh/ruff/pull/20300)) - Treat panics as fatal diagnostics, sort panics last ([#&#8203;20258](https://github.com/astral-sh/ruff/pull/20258)) ##### Documentation - \[`ruff`] Add `analyze.string-imports-min-dots` to settings ([#&#8203;20375](https://github.com/astral-sh/ruff/pull/20375)) - Update README.md with Albumentations new repository URL ([#&#8203;20415](https://github.com/astral-sh/ruff/pull/20415)) ##### Other changes - Bump MSRV to Rust 1.88 ([#&#8203;20470](https://github.com/astral-sh/ruff/pull/20470)) - Enable inline noqa for multiline strings in playground ([#&#8203;20442](https://github.com/astral-sh/ruff/pull/20442)) ##### Contributors - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;IDrokin117](https://github.com/IDrokin117) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;woodruffw](https://github.com/woodruffw) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;salahelfarissi](https://github.com/salahelfarissi) - [@&#8203;MichaReiser](https://github.com/MichaReiser) #### Install ruff 0.13.1 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-installer.ps1 | iex" ``` #### Download ruff 0.13.1 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.1/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.13.0`](https://github.com/astral-sh/ruff/releases/tag/0.13.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.12...0.13.0) #### Release Notes Check out the [blog post](https://astral.sh/blog/ruff-v0.13.0) for a migration guide and overview of the changes! ##### Breaking changes - **Several rules can now add `from __future__ import annotations` automatically** `TC001`, `TC002`, `TC003`, `RUF013`, and `UP037` now add `from __future__ import annotations` as part of their fixes when the `lint.future-annotations` setting is enabled. This allows the rules to move more imports into `TYPE_CHECKING` blocks (`TC001`, `TC002`, and `TC003`), use PEP 604 union syntax on Python versions before 3.10 (`RUF013`), and unquote more annotations (`UP037`). - **Full module paths are now used to verify first-party modules** Ruff now checks that the full path to a module exists on disk before categorizing it as a first-party import. This change makes first-party import detection more accurate, helping to avoid false positives on local directories with the same name as a third-party dependency, for example. See the [FAQ section](https://docs.astral.sh/ruff/faq/#how-does-ruff-determine-which-of-my-imports-are-first-party-third-party-etc) on import categorization for more details. - **Deprecated rules must now be selected by exact rule code** Ruff will no longer activate deprecated rules selected by their group name or prefix. As noted below, the two remaining deprecated rules were also removed in this release, so this won't affect any current rules, but it will still affect any deprecations in the future. - **The deprecated macOS configuration directory fallback has been removed** Ruff will no longer look for a user-level configuration file at `~/Library/Application Support/ruff/ruff.toml` on macOS. This feature was deprecated in v0.5 in favor of using the [XDG specification](https://specifications.freedesktop.org/basedir-spec/latest/) (usually resolving to `~/.config/ruff/ruff.toml`), like on Linux. The fallback and accompanying deprecation warning have now been removed. ##### Removed Rules The following rules have been removed: - [`pandas-df-variable-name`](https://docs.astral.sh/ruff/rules/pandas-df-variable-name) (`PD901`) - [`non-pep604-isinstance`](https://docs.astral.sh/ruff/rules/non-pep604-isinstance) (`UP038`) ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`airflow-dag-no-schedule-argument`](https://docs.astral.sh/ruff/rules/airflow-dag-no-schedule-argument) (`AIR002`) - [`airflow3-removal`](https://docs.astral.sh/ruff/rules/airflow3-removal) (`AIR301`) - [`airflow3-moved-to-provider`](https://docs.astral.sh/ruff/rules/airflow3-moved-to-provider) (`AIR302`) - [`airflow3-suggested-update`](https://docs.astral.sh/ruff/rules/airflow3-suggested-update) (`AIR311`) - [`airflow3-suggested-to-move-to-provider`](https://docs.astral.sh/ruff/rules/airflow3-suggested-to-move-to-provider) (`AIR312`) - [`long-sleep-not-forever`](https://docs.astral.sh/ruff/rules/long-sleep-not-forever) (`ASYNC116`) - [`f-string-number-format`](https://docs.astral.sh/ruff/rules/f-string-number-format) (`FURB116`) - [`os-symlink`](https://docs.astral.sh/ruff/rules/os-symlink) (`PTH211`) - [`generic-not-last-base-class`](https://docs.astral.sh/ruff/rules/generic-not-last-base-class) (`PYI059`) - [`redundant-none-literal`](https://docs.astral.sh/ruff/rules/redundant-none-literal) (`PYI061`) - [`pytest-raises-ambiguous-pattern`](https://docs.astral.sh/ruff/rules/pytest-raises-ambiguous-pattern) (`RUF043`) - [`unused-unpacked-variable`](https://docs.astral.sh/ruff/rules/unused-unpacked-variable) (`RUF059`) - [`useless-class-metaclass-type`](https://docs.astral.sh/ruff/rules/useless-class-metaclass-type) (`UP050`) The following behaviors have been stabilized: - [`assert-raises-exception`](https://docs.astral.sh/ruff/rules/assert-raises-exception) (`B017`) now checks for direct calls to `unittest.TestCase.assert_raises` and `pytest.raises` instead of only the context manager forms. - [`missing-trailing-comma`](https://docs.astral.sh/ruff/rules/missing-trailing-comma) (`COM812`) and [`prohibited-trailing-comma`](https://docs.astral.sh/ruff/rules/prohibited-trailing-comma) (`COM819`) now check for trailing commas in PEP 695 type parameter lists. - [`raw-string-in-exception`](https://docs.astral.sh/ruff/rules/raw-string-in-exception) (`EM101`) now also checks for byte strings in exception messages. - [`invalid-mock-access`](https://docs.astral.sh/ruff/rules/invalid-mock-access) (`PGH005`) now checks for `AsyncMock` methods like `not_awaited` in addition to the synchronous variants. - [`useless-import-alias`](https://docs.astral.sh/ruff/rules/useless-import-alias) (`PLC0414`) no longer applies to `__init__.py` files, where it conflicted with one of the suggested fixes for [`unused-import`](https://docs.astral.sh/ruff/rules/unused-import) (`F401`). - [`bidirectional-unicode`](https://docs.astral.sh/ruff/rules/bidirectional-unicode) (`PLE2502`) now also checks for U+061C (Arabic Letter Mark). - The fix for [`multiple-with-statements`](https://docs.astral.sh/ruff/rules/multiple-with-statements) (`SIM117`) is now marked as always safe. ##### Preview features - \[`pyupgrade`] Enable `UP043` in stub files ([#&#8203;20027](https://github.com/astral-sh/ruff/pull/20027)) ##### Bug fixes - \[`pyupgrade`] Apply `UP008` only when the `__class__` cell exists ([#&#8203;19424](https://github.com/astral-sh/ruff/pull/19424)) - \[`ruff`] Fix empty f-string detection in `in-empty-collection` (`RUF060`) ([#&#8203;20249](https://github.com/astral-sh/ruff/pull/20249)) ##### Server - Add support for using uv as an alternative formatter backend ([#&#8203;19665](https://github.com/astral-sh/ruff/pull/19665)) ##### Documentation - \[`pep8-naming`] Fix formatting of `__all__` (`N816`) ([#&#8203;20301](https://github.com/astral-sh/ruff/pull/20301)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;IDrokin117](https://github.com/IDrokin117) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;LoicRiegel](https://github.com/LoicRiegel) - [@&#8203;Renkai](https://github.com/Renkai) - [@&#8203;Renkai](https://github.com/Renkai) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;ferdnyc](https://github.com/ferdnyc) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;onerandomusername](https://github.com/onerandomusername) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.13.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.13.0 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.13.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.12`](https://github.com/astral-sh/ruff/releases/tag/0.12.12) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.11...0.12.12) #### Release Notes ##### Preview features - Show fixes by default ([#&#8203;19919](https://github.com/astral-sh/ruff/pull/19919)) - \[`airflow`] Convert `DatasetOrTimeSchedule(datasets=...)` to `AssetOrTimeSchedule(assets=...)` (`AIR311`) ([#&#8203;20202](https://github.com/astral-sh/ruff/pull/20202)) - \[`airflow`] Improve the `AIR002` error message ([#&#8203;20173](https://github.com/astral-sh/ruff/pull/20173)) - \[`airflow`] Move `airflow.operators.postgres_operator.Mapping` from `AIR302` to `AIR301` ([#&#8203;20172](https://github.com/astral-sh/ruff/pull/20172)) - \[`flake8-async`] Implement `blocking-input` rule (`ASYNC250`) ([#&#8203;20122](https://github.com/astral-sh/ruff/pull/20122)) - \[`flake8-use-pathlib`] Make `PTH119` and `PTH120` fixes unsafe because they can change behavior ([#&#8203;20118](https://github.com/astral-sh/ruff/pull/20118)) - \[`pylint`] Add U+061C to `PLE2502` ([#&#8203;20106](https://github.com/astral-sh/ruff/pull/20106)) - \[`ruff`] Fix false negative for empty f-strings in `deque` calls (`RUF037`) ([#&#8203;20109](https://github.com/astral-sh/ruff/pull/20109)) ##### Bug fixes - Less confidently mark f-strings as empty when inferring truthiness ([#&#8203;20152](https://github.com/astral-sh/ruff/pull/20152)) - \[`fastapi`] Fix false positive for paths with spaces around parameters (`FAST003`) ([#&#8203;20077](https://github.com/astral-sh/ruff/pull/20077)) - \[`flake8-comprehensions`] Skip `C417` when lambda contains `yield`/`yield from` ([#&#8203;20201](https://github.com/astral-sh/ruff/pull/20201)) - \[`perflint`] Handle tuples in dictionary comprehensions (`PERF403`) ([#&#8203;19934](https://github.com/astral-sh/ruff/pull/19934)) ##### Rule changes - \[`pycodestyle`] Preserve return type annotation for `ParamSpec` (`E731`) ([#&#8203;20108](https://github.com/astral-sh/ruff/pull/20108)) ##### Documentation - Add fix safety sections to docs ([#&#8203;17490](https://github.com/astral-sh/ruff/pull/17490),[#&#8203;17499](https://github.com/astral-sh/ruff/pull/17499)) #### Contributors - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;PrettyWood](https://github.com/PrettyWood) - [@&#8203;Renkai](https://github.com/Renkai) - [@&#8203;ShaharNaveh](https://github.com/ShaharNaveh) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;kotx](https://github.com/kotx) - [@&#8203;liortct](https://github.com/liortct) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;s-rigaud](https://github.com/s-rigaud) - [@&#8203;sharkdp](https://github.com/sharkdp) #### Install ruff 0.12.12 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.12 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.12/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.11`](https://github.com/astral-sh/ruff/releases/tag/0.12.11) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.10...0.12.11) #### Release Notes ##### Preview features - \[`airflow`] Extend `AIR311` and `AIR312` rules ([#&#8203;20082](https://github.com/astral-sh/ruff/pull/20082)) - \[`airflow`] Replace wrong path `airflow.io.storage` with `airflow.io.store` (`AIR311`) ([#&#8203;20081](https://github.com/astral-sh/ruff/pull/20081)) - \[`flake8-async`] Implement `blocking-http-call-httpx-in-async-function` (`ASYNC212`) ([#&#8203;20091](https://github.com/astral-sh/ruff/pull/20091)) - \[`flake8-logging-format`] Add auto-fix for f-string logging calls (`G004`) ([#&#8203;19303](https://github.com/astral-sh/ruff/pull/19303)) - \[`flake8-use-pathlib`] Add autofix for `PTH211` ([#&#8203;20009](https://github.com/astral-sh/ruff/pull/20009)) - \[`flake8-use-pathlib`] Make `PTH100` fix unsafe because it can change behavior ([#&#8203;20100](https://github.com/astral-sh/ruff/pull/20100)) ##### Bug fixes - \[`pyflakes`, `pylint`] Fix false positives caused by `__class__` cell handling (`F841`, `PLE0117`) ([#&#8203;20048](https://github.com/astral-sh/ruff/pull/20048)) - \[`pyflakes`] Fix `allowed-unused-imports` matching for top-level modules (`F401`) ([#&#8203;20115](https://github.com/astral-sh/ruff/pull/20115)) - \[`ruff`] Fix false positive for t-strings in `default-factory-kwarg` (`RUF026`) ([#&#8203;20032](https://github.com/astral-sh/ruff/pull/20032)) - \[`ruff`] Preserve relative whitespace in multi-line expressions (`RUF033`) ([#&#8203;19647](https://github.com/astral-sh/ruff/pull/19647)) ##### Rule changes - \[`ruff`] Handle empty t-strings in `unnecessary-empty-iterable-within-deque-call` (`RUF037`) ([#&#8203;20045](https://github.com/astral-sh/ruff/pull/20045)) ##### Documentation - Fix incorrect `D413` links in docstrings convention FAQ ([#&#8203;20089](https://github.com/astral-sh/ruff/pull/20089)) - \[`flake8-use-pathlib`] Update links to the table showing the correspondence between `os` and `pathlib` ([#&#8203;20103](https://github.com/astral-sh/ruff/pull/20103)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;PrettyWood](https://github.com/PrettyWood) - [@&#8203;Renkai](https://github.com/Renkai) - [@&#8203;TaKO8Ki](https://github.com/TaKO8Ki) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;hamirmahal](https://github.com/hamirmahal) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;vivster7](https://github.com/vivster7) #### Install ruff 0.12.11 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.11 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.11/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.10`](https://github.com/astral-sh/ruff/releases/tag/0.12.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.9...0.12.10) #### Release Notes ##### Preview features - \[`flake8-simplify`] Implement fix for `maxsplit` without separator (`SIM905`) ([#&#8203;19851](https://github.com/astral-sh/ruff/pull/19851)) - \[`flake8-use-pathlib`] Add fixes for `PTH102` and `PTH103` ([#&#8203;19514](https://github.com/astral-sh/ruff/pull/19514)) ##### Bug fixes - \[`isort`] Handle multiple continuation lines after module docstring (`I002`) ([#&#8203;19818](https://github.com/astral-sh/ruff/pull/19818)) - \[`pyupgrade`] Avoid reporting `__future__` features as unnecessary when they are used (`UP010`) ([#&#8203;19769](https://github.com/astral-sh/ruff/pull/19769)) - \[`pyupgrade`] Handle nested `Optional`s (`UP045`) ([#&#8203;19770](https://github.com/astral-sh/ruff/pull/19770)) ##### Rule changes - \[`pycodestyle`] Make `E731` fix unsafe instead of display-only for class assignments ([#&#8203;19700](https://github.com/astral-sh/ruff/pull/19700)) - \[`pyflakes`] Add secondary annotation showing previous definition (`F811`) ([#&#8203;19900](https://github.com/astral-sh/ruff/pull/19900)) ##### Documentation - Fix description of global config file discovery strategy ([#&#8203;19188](https://github.com/astral-sh/ruff/pull/19188)) - Update outdated links to <https://typing.python.org/en/latest/source/stubs.html> ([#&#8203;19992](https://github.com/astral-sh/ruff/pull/19992)) - \[`flake8-annotations`] Remove unused import in example (`ANN401`) ([#&#8203;20000](https://github.com/astral-sh/ruff/pull/20000)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Cjkjvfnby](https://github.com/Cjkjvfnby) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;IDrokin117](https://github.com/IDrokin117) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;PrettyWood](https://github.com/PrettyWood) - [@&#8203;RazerM](https://github.com/RazerM) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;gkowzan](https://github.com/gkowzan) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;theammir](https://github.com/theammir) #### Install ruff 0.12.10 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.10 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.9`](https://github.com/astral-sh/ruff/releases/tag/0.12.9) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.8...0.12.9) #### Release Notes ##### Preview features - \[`airflow`] Add check for `airflow.secrets.cache.SecretCache` (`AIR301`) ([#&#8203;17707](https://github.com/astral-sh/ruff/pull/17707)) - \[`ruff`] Offer a safe fix for multi-digit zeros (`RUF064`) ([#&#8203;19847](https://github.com/astral-sh/ruff/pull/19847)) ##### Bug fixes - \[`flake8-blind-except`] Fix `BLE001` false-positive on `raise ... from None` ([#&#8203;19755](https://github.com/astral-sh/ruff/pull/19755)) - \[`flake8-comprehensions`] Fix false positive for `C420` with attribute, subscript, or slice assignment targets ([#&#8203;19513](https://github.com/astral-sh/ruff/pull/19513)) - \[`flake8-simplify`] Fix handling of U+001C..U+001F whitespace (`SIM905`) ([#&#8203;19849](https://github.com/astral-sh/ruff/pull/19849)) ##### Rule changes - \[`pylint`] Use lowercase hex characters to match the formatter (`PLE2513`) ([#&#8203;19808](https://github.com/astral-sh/ruff/pull/19808)) ##### Documentation - Fix `lint.future-annotations` link ([#&#8203;19876](https://github.com/astral-sh/ruff/pull/19876)) ##### Other changes - Build `riscv64` binaries for release ([#&#8203;19819](https://github.com/astral-sh/ruff/pull/19819)) - Add rule code to error description in GitLab output ([#&#8203;19896](https://github.com/astral-sh/ruff/pull/19896)) - Improve rendering of the `full` output format ([#&#8203;19415](https://github.com/astral-sh/ruff/pull/19415)) Below is an example diff for [`F401`](https://docs.astral.sh/ruff/rules/unused-import/): ```diff -unused.py:8:19: F401 [*] `pathlib` imported but unused +F401 [*] `pathlib` imported but unused + --> unused.py:8:19 | 7 | # Unused, _not_ marked as required (due to the alias). 8 | import pathlib as non_alias - | ^^^^^^^^^ F401 + | ^^^^^^^^^ 9 | 10 | # Unused, marked as required. | - = help: Remove unused import: `pathlib` +help: Remove unused import: `pathlib` ``` For now, the primary difference is the movement of the filename, line number, and column information to a second line in the header. This new representation will allow us to make further additions to Ruff's diagnostics, such as adding sub-diagnostics and multiple annotations to the same snippet. #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;PrettyWood](https://github.com/PrettyWood) - [@&#8203;RazerM](https://github.com/RazerM) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;deliro](https://github.com/deliro) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;ember91](https://github.com/ember91) - [@&#8203;ffgan](https://github.com/ffgan) - [@&#8203;harupy](https://github.com/harupy) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;nguu0123](https://github.com/nguu0123) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;oconnor663](https://github.com/oconnor663) - [@&#8203;prabhusneha](https://github.com/prabhusneha) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;thejchap](https://github.com/thejchap) #### Install ruff 0.12.9 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.9 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.9/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.8`](https://github.com/astral-sh/ruff/releases/tag/0.12.8) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.7...0.12.8) #### Release Notes ##### Preview features - \[`flake8-use-pathlib`] Expand `PTH201` to check all `PurePath` subclasses ([#&#8203;19440](https://github.com/astral-sh/ruff/pull/19440)) ##### Bug fixes - \[`flake8-blind-except`] Change `BLE001` to correctly parse exception tuples ([#&#8203;19747](https://github.com/astral-sh/ruff/pull/19747)) - \[`flake8-errmsg`] Exclude `typing.cast` from `EM101` ([#&#8203;19656](https://github.com/astral-sh/ruff/pull/19656)) - \[`flake8-simplify`] Fix raw string handling in `SIM905` for embedded quotes ([#&#8203;19591](https://github.com/astral-sh/ruff/pull/19591)) - \[`flake8-import-conventions`] Avoid false positives for NFKC-normalized `__debug__` import aliases in `ICN001` ([#&#8203;19411](https://github.com/astral-sh/ruff/pull/19411)) - \[`isort`] Fix syntax error after docstring ending with backslash (`I002`) ([#&#8203;19505](https://github.com/astral-sh/ruff/pull/19505)) - \[`pylint`] Mark `PLC0207` fixes as unsafe when `*args` unpacking is present ([#&#8203;19679](https://github.com/astral-sh/ruff/pull/19679)) - \[`pyupgrade`] Prevent infinite loop with `I002` (`UP010`, `UP035`) ([#&#8203;19413](https://github.com/astral-sh/ruff/pull/19413)) - \[`ruff`] Parenthesize generator expressions in f-strings (`RUF010`) ([#&#8203;19434](https://github.com/astral-sh/ruff/pull/19434)) ##### Rule changes - \[`eradicate`] Don't flag `pyrefly` pragmas as unused code (`ERA001`) ([#&#8203;19731](https://github.com/astral-sh/ruff/pull/19731)) ##### Documentation - Replace "associative" with "commutative" in docs for `RUF036` ([#&#8203;19706](https://github.com/astral-sh/ruff/pull/19706)) - Fix copy and line separator colors in dark mode ([#&#8203;19630](https://github.com/astral-sh/ruff/pull/19630)) - Fix link to `typing` documentation ([#&#8203;19648](https://github.com/astral-sh/ruff/pull/19648)) - \[`refurb`] Make more examples error out-of-the-box ([#&#8203;19695](https://github.com/astral-sh/ruff/pull/19695),[#&#8203;19673](https://github.com/astral-sh/ruff/pull/19673),[#&#8203;19672](https://github.com/astral-sh/ruff/pull/19672)) ##### Other changes - Include column numbers in GitLab output format ([#&#8203;19708](https://github.com/astral-sh/ruff/pull/19708)) - Always expand tabs to four spaces in diagnostics ([#&#8203;19618](https://github.com/astral-sh/ruff/pull/19618)) - Update pre-commit's `ruff` id ([#&#8203;19654](https://github.com/astral-sh/ruff/pull/19654)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;UnboundVariable](https://github.com/UnboundVariable) - [@&#8203;cristian64](https://github.com/cristian64) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;deliro](https://github.com/deliro) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;harshil21](https://github.com/harshil21) - [@&#8203;hunterhogan](https://github.com/hunterhogan) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;jimhoekstra](https://github.com/jimhoekstra) - [@&#8203;jscanvic](https://github.com/jscanvic) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ngroman](https://github.com/ngroman) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;silamon](https://github.com/silamon) #### Install ruff 0.12.8 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.8 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.8/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.7`](https://github.com/astral-sh/ruff/releases/tag/0.12.7) #### Release Notes This is a follow-up release to 0.12.6. Because of an issue in the package metadata, 0.12.6 failed to publish fully to PyPI and has been yanked. Similarly, there is no GitHub release or Git tag for 0.12.6. The contents of the 0.12.7 release are identical to 0.12.6, except for the updated metadata. #### 0.12.6 Release Notes ##### Preview features - \[`flake8-commas`] Add support for trailing comma checks in type parameter lists (`COM812`, `COM819`) ([#&#8203;19390](https://github.com/astral-sh/ruff/pull/19390)) - \[`pylint`] Implement auto-fix for `missing-maxsplit-arg` (`PLC0207`) ([#&#8203;19387](https://github.com/astral-sh/ruff/pull/19387)) - \[`ruff`] Offer fixes for `RUF039` in more cases ([#&#8203;19065](https://github.com/astral-sh/ruff/pull/19065)) ##### Bug fixes - Support `.pyi` files in ruff analyze graph ([#&#8203;19611](https://github.com/astral-sh/ruff/pull/19611)) - \[`flake8-pyi`] Preserve inline comment in ellipsis removal (`PYI013`) ([#&#8203;19399](https://github.com/astral-sh/ruff/pull/19399)) - \[`perflint`] Ignore rule if target is `global` or `nonlocal` (`PERF401`) ([#&#8203;19539](https://github.com/astral-sh/ruff/pull/19539)) - \[`pyupgrade`] Fix `UP030` to avoid modifying double curly braces in format strings ([#&#8203;19378](https://github.com/astral-sh/ruff/pull/19378)) - \[`refurb`] Ignore decorated functions for `FURB118` ([#&#8203;19339](https://github.com/astral-sh/ruff/pull/19339)) - \[`refurb`] Mark `int` and `bool` cases for `Decimal.from_float` as safe fixes (`FURB164`) ([#&#8203;19468](https://github.com/astral-sh/ruff/pull/19468)) - \[`ruff`] Fix `RUF033` for named default expressions ([#&#8203;19115](https://github.com/astral-sh/ruff/pull/19115)) ##### Rule changes - \[`flake8-blind-except`] Change `BLE001` to permit `logging.critical(..., exc_info=True)` ([#&#8203;19520](https://github.com/astral-sh/ruff/pull/19520)) ##### Performance - Add support for specifying minimum dots in detected string imports ([#&#8203;19538](https://github.com/astral-sh/ruff/pull/19538)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) - [@&#8203;IDrokin117](https://github.com/IDrokin117) - [@&#8203;Luunynliny](https://github.com/Luunynliny) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;UnboundVariable](https://github.com/UnboundVariable) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;clockback](https://github.com/clockback) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) #### Install ruff 0.12.7 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.7 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.7/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.5`](https://github.com/astral-sh/ruff/releases/tag/0.12.5) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.4...0.12.5) #### Release Notes ##### Preview features - \[`flake8-use-pathlib`] Add autofix for `PTH101`, `PTH104`, `PTH105`, `PTH121` ([#&#8203;19404](https://github.com/astral-sh/ruff/pull/19404)) - \[`ruff`] Support byte strings (`RUF055`) ([#&#8203;18926](https://github.com/astral-sh/ruff/pull/18926)) ##### Bug fixes - Fix `unreachable` panic in parser ([#&#8203;19183](https://github.com/astral-sh/ruff/pull/19183)) - \[`flake8-pyi`] Skip fix if all `Union` members are `None` (`PYI016`) ([#&#8203;19416](https://github.com/astral-sh/ruff/pull/19416)) - \[`perflint`] Parenthesize generator expressions (`PERF401`) ([#&#8203;19325](https://github.com/astral-sh/ruff/pull/19325)) - \[`pylint`] Handle empty comments after line continuation (`PLR2044`) ([#&#8203;19405](https://github.com/astral-sh/ruff/pull/19405)) ##### Rule changes - \[`pep8-naming`] Fix `N802` false positives for `CGIHTTPRequestHandler` and `SimpleHTTPRequestHandler` ([#&#8203;19432](https://github.com/astral-sh/ruff/pull/19432)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;UnboundVariable](https://github.com/UnboundVariable) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;oconnor663](https://github.com/oconnor663) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;soundsonacid](https://github.com/soundsonacid) - [@&#8203;thejchap](https://github.com/thejchap) #### Install ruff 0.12.5 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.5 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.5/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.4`](https://github.com/astral-sh/ruff/releases/tag/0.12.4) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.3...0.12.4) #### Release Notes ##### Preview features - \[`flake8-type-checking`, `pyupgrade`, `ruff`] Add `from __future__ import annotations` when it would allow new fixes (`TC001`, `TC002`, `TC003`, `UP037`, `RUF013`) ([#&#8203;19100](https://github.com/astral-sh/ruff/pull/19100)) - \[`flake8-use-pathlib`] Add autofix for `PTH109` ([#&#8203;19245](https://github.com/astral-sh/ruff/pull/19245)) - \[`pylint`] Detect indirect `pathlib.Path` usages for `unspecified-encoding` (`PLW1514`) ([#&#8203;19304](https://github.com/astral-sh/ruff/pull/19304)) ##### Bug fixes - \[`flake8-bugbear`] Fix `B017` false negatives for keyword exception arguments ([#&#8203;19217](https://github.com/astral-sh/ruff/pull/19217)) - \[`flake8-use-pathlib`] Fix false negative on direct `Path()` instantiation (`PTH210`) ([#&#8203;19388](https://github.com/astral-sh/ruff/pull/19388)) - \[`flake8-django`] Fix `DJ008` false positive for abstract models with type-annotated `abstract` field ([#&#8203;19221](https://github.com/astral-sh/ruff/pull/19221)) - \[`isort`] Fix `I002` import insertion after docstring with multiple string statements ([#&#8203;19222](https://github.com/astral-sh/ruff/pull/19222)) - \[`isort`] Treat form feed as valid whitespace before a semicolon ([#&#8203;19343](https://github.com/astral-sh/ruff/pull/19343)) - \[`pydoclint`] Fix `SyntaxError` from fixes with line continuations (`D201`, `D202`) ([#&#8203;19246](https://github.com/astral-sh/ruff/pull/19246)) - \[`refurb`] `FURB164` fix should validate arguments and should usually be marked unsafe ([#&#8203;19136](https://github.com/astral-sh/ruff/pull/19136)) ##### Rule changes - \[`flake8-use-pathlib`] Skip single dots for `invalid-pathlib-with-suffix` (`PTH210`) on versions >= 3.14 ([#&#8203;19331](https://github.com/astral-sh/ruff/pull/19331)) - \[`pep8_naming`] Avoid false positives on standard library functions with uppercase names (`N802`) ([#&#8203;18907](https://github.com/astral-sh/ruff/pull/18907)) - \[`pycodestyle`] Handle brace escapes for t-strings in logical lines ([#&#8203;19358](https://github.com/astral-sh/ruff/pull/19358)) - \[`pylint`] Extend invalid string character rules to include t-strings ([#&#8203;19355](https://github.com/astral-sh/ruff/pull/19355)) - \[`ruff`] Allow `strict` kwarg when checking for `starmap-zip` (`RUF058`) in Python 3.14+ ([#&#8203;19333](https://github.com/astral-sh/ruff/pull/19333)) ##### Documentation - \[`flake8-type-checking`] Make `TC010` docs example more realistic ([#&#8203;19356](https://github.com/astral-sh/ruff/pull/19356)) - Make more documentation examples error out-of-the-box ([#&#8203;19288](https://github.com/astral-sh/ruff/pull/19288),[#&#8203;19272](https://github.com/astral-sh/ruff/pull/19272),[#&#8203;19291](https://github.com/astral-sh/ruff/pull/19291),[#&#8203;19296](https://github.com/astral-sh/ruff/pull/19296),[#&#8203;19292](https://github.com/astral-sh/ruff/pull/19292),[#&#8203;19295](https://github.com/astral-sh/ruff/pull/19295),[#&#8203;19297](https://github.com/astral-sh/ruff/pull/19297),[#&#8203;19309](https://github.com/astral-sh/ruff/pull/19309)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;UnboundVariable](https://github.com/UnboundVariable) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;close2code-palm](https://github.com/close2code-palm) - [@&#8203;corneliusroemer](https://github.com/corneliusroemer) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;oconnor663](https://github.com/oconnor663) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;soundsonacid](https://github.com/soundsonacid) - [@&#8203;w0nder1ng](https://github.com/w0nder1ng) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.12.4 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.4 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.4/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.3`](https://github.com/astral-sh/ruff/releases/tag/0.12.3) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.2...0.12.3) #### Release Notes ##### Preview features - \[`flake8-bugbear`] Support non-context-manager calls in `B017` ([#&#8203;19063](https://github.com/astral-sh/ruff/pull/19063)) - \[`flake8-use-pathlib`] Add autofixes for `PTH100`, `PTH106`, `PTH107`, `PTH108`, `PTH110`, `PTH111`, `PTH112`, `PTH113`, `PTH114`, `PTH115`, `PTH117`, `PTH119`, `PTH120` ([#&#8203;19213](https://github.com/astral-sh/ruff/pull/19213)) - \[`flake8-use-pathlib`] Add autofixes for `PTH203`, `PTH204`, `PTH205` ([#&#8203;18922](https://github.com/astral-sh/ruff/pull/18922)) ##### Bug fixes - \[`flake8-return`] Fix false-positive for variables used inside nested functions in `RET504` ([#&#8203;18433](https://github.com/astral-sh/ruff/pull/18433)) - Treat form feed as valid whitespace before a line continuation ([#&#8203;19220](https://github.com/astral-sh/ruff/pull/19220)) - \[`flake8-type-checking`] Fix syntax error introduced by fix (`TC008`) ([#&#8203;19150](https://github.com/astral-sh/ruff/pull/19150)) - \[`pyupgrade`] Keyword arguments in `super` should suppress the `UP008` fix ([#&#8203;19131](https://github.com/astral-sh/ruff/pull/19131)) ##### Documentation - \[`flake8-pyi`] Make example error out-of-the-box (`PYI007`, `PYI008`) ([#&#8203;19103](https://github.com/astral-sh/ruff/pull/19103)) - \[`flake8-simplify`] Make example error out-of-the-box (`SIM116`) ([#&#8203;19111](https://github.com/astral-sh/ruff/pull/19111)) - \[`flake8-type-checking`] Make example error out-of-the-box (`TC001`) ([#&#8203;19151](https://github.com/astral-sh/ruff/pull/19151)) - \[`flake8-use-pathlib`] Make example error out-of-the-box (`PTH210`) ([#&#8203;19189](https://github.com/astral-sh/ruff/pull/19189)) - \[`pycodestyle`] Make example error out-of-the-box (`E272`) ([#&#8203;19191](https://github.com/astral-sh/ruff/pull/19191)) - \[`pycodestyle`] Make example not raise unnecessary `SyntaxError` (`E114`) ([#&#8203;19190](https://github.com/astral-sh/ruff/pull/19190)) - \[`pydoclint`] Make example error out-of-the-box (`DOC501`) ([#&#8203;19218](https://github.com/astral-sh/ruff/pull/19218)) - \[`pylint`, `pyupgrade`] Fix syntax errors in examples (`PLW1501`, `UP028`) ([#&#8203;19127](https://github.com/astral-sh/ruff/pull/19127)) - \[`pylint`] Update `missing-maxsplit-arg` docs and error to suggest proper usage (`PLC0207`) ([#&#8203;18949](https://github.com/astral-sh/ruff/pull/18949)) - \[`flake8-bandit`] Make example error out-of-the-box (`S412`) ([#&#8203;19241](https://github.com/astral-sh/ruff/pull/19241)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;NamelessGO](https://github.com/NamelessGO) - [@&#8203;UnboundVariable](https://github.com/UnboundVariable) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;fdosani](https://github.com/fdosani) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;iyakushev](https://github.com/iyakushev) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;soundsonacid](https://github.com/soundsonacid) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.12.3 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.3 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.3/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.2`](https://github.com/astral-sh/ruff/releases/tag/0.12.2) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.1...0.12.2) #### Release Notes ##### Preview features - \[`flake8-pyi`] Expand `Optional[A]` to `A | None` (`PYI016`) ([#&#8203;18572](https://github.com/astral-sh/ruff/pull/18572)) - \[`pyupgrade`] Mark `UP008` fix safe if no comments are in range ([#&#8203;18683](https://github.com/astral-sh/ruff/pull/18683)) ##### Bug fixes - \[`flake8-comprehensions`] Fix `C420` to prepend whitespace when needed ([#&#8203;18616](https://github.com/astral-sh/ruff/pull/18616)) - \[`perflint`] Fix `PERF403` panic on attribute or subscription loop variable ([#&#8203;19042](https://github.com/astral-sh/ruff/pull/19042)) - \[`pydocstyle`] Fix `D413` infinite loop for parenthesized docstring ([#&#8203;18930](https://github.com/astral-sh/ruff/pull/18930)) - \[`pylint`] Fix `PLW0108` autofix introducing a syntax error when the lambda's body contains an assignment expression ([#&#8203;18678](https://github.com/astral-sh/ruff/pull/18678)) - \[`refurb`] Fix false positive on empty tuples (`FURB168`) ([#&#8203;19058](https://github.com/astral-sh/ruff/pull/19058)) - \[`ruff`] Allow more `field` calls from `attrs` (`RUF009`) ([#&#8203;19021](https://github.com/astral-sh/ruff/pull/19021)) - \[`ruff`] Fix syntax error introduced for an empty string followed by a u-prefixed string (`UP025`) ([#&#8203;18899](https://github.com/astral-sh/ruff/pull/18899)) ##### Rule changes - \[`flake8-executable`] Allow `uvx` in shebang line (`EXE003`) ([#&#8203;18967](https://github.com/astral-sh/ruff/pull/18967)) - \[`pandas`] Avoid flagging `PD002` if `pandas` is not imported ([#&#8203;18963](https://github.com/astral-sh/ruff/pull/18963)) - \[`pyupgrade`] Avoid PEP-604 unions with `typing.NamedTuple` (`UP007`, `UP045`) ([#&#8203;18682](https://github.com/astral-sh/ruff/pull/18682)) ##### Documentation - Document link between `import-outside-top-level (PLC0415)` and `lint.flake8-tidy-imports.banned-module-level-imports` ([#&#8203;18733](https://github.com/astral-sh/ruff/pull/18733)) - Fix description of the `format.skip-magic-trailing-comma` example ([#&#8203;19095](https://github.com/astral-sh/ruff/pull/19095)) - \[`airflow`] Make `AIR302` example error out-of-the-box ([#&#8203;18988](https://github.com/astral-sh/ruff/pull/18988)) - \[`airflow`] Make `AIR312` example error out-of-the-box ([#&#8203;18989](https://github.com/astral-sh/ruff/pull/18989)) - \[`flake8-annotations`] Make `ANN401` example error out-of-the-box ([#&#8203;18974](https://github.com/astral-sh/ruff/pull/18974)) - \[`flake8-async`] Make `ASYNC100` example error out-of-the-box ([#&#8203;18993](https://github.com/astral-sh/ruff/pull/18993)) - \[`flake8-async`] Make `ASYNC105` example error out-of-the-box ([#&#8203;19002](https://github.com/astral-sh/ruff/pull/19002)) - \[`flake8-async`] Make `ASYNC110` example error out-of-the-box ([#&#8203;18975](https://github.com/astral-sh/ruff/pull/18975)) - \[`flake8-async`] Make `ASYNC210` example error out-of-the-box ([#&#8203;18977](https://github.com/astral-sh/ruff/pull/18977)) - \[`flake8-async`] Make `ASYNC220`, `ASYNC221`, and `ASYNC222` examples error out-of-the-box ([#&#8203;18978](https://github.com/astral-sh/ruff/pull/18978)) - \[`flake8-async`] Make `ASYNC251` example error out-of-the-box ([#&#8203;18990](https://github.com/astral-sh/ruff/pull/18990)) - \[`flake8-bandit`] Make `S201` example error out-of-the-box ([#&#8203;19017](https://github.com/astral-sh/ruff/pull/19017)) - \[`flake8-bandit`] Make `S604` and `S609` examples error out-of-the-box ([#&#8203;19049](https://github.com/astral-sh/ruff/pull/19049)) - \[`flake8-bugbear`] Make `B028` example error out-of-the-box ([#&#8203;19054](https://github.com/astral-sh/ruff/pull/19054)) - \[`flake8-bugbear`] Make `B911` example error out-of-the-box ([#&#8203;19051](https://github.com/astral-sh/ruff/pull/19051)) - \[`flake8-datetimez`] Make `DTZ011` example error out-of-the-box ([#&#8203;19055](https://github.com/astral-sh/ruff/pull/19055)) - \[`flake8-datetimez`] Make `DTZ901` example error out-of-the-box ([#&#8203;19056](https://github.com/astral-sh/ruff/pull/19056)) - \[`flake8-pyi`] Make `PYI032` example error out-of-the-box ([#&#8203;19061](https://github.com/astral-sh/ruff/pull/19061)) - \[`flake8-pyi`] Make example error out-of-the-box (`PYI014`, `PYI015`) ([#&#8203;19097](https://github.com/astral-sh/ruff/pull/19097)) - \[`flake8-pyi`] Make example error out-of-the-box (`PYI042`) ([#&#8203;19101](https://github.com/astral-sh/ruff/pull/19101)) - \[`flake8-pyi`] Make example error out-of-the-box (`PYI059`) ([#&#8203;19080](https://github.com/astral-sh/ruff/pull/19080)) - \[`flake8-pyi`] Make example error out-of-the-box (`PYI062`) ([#&#8203;19079](https://github.com/astral-sh/ruff/pull/19079)) - \[`flake8-pytest-style`] Make example error out-of-the-box (`PT023`) ([#&#8203;19104](https://github.com/astral-sh/ruff/pull/19104)) - \[`flake8-pytest-style`] Make example error out-of-the-box (`PT030`) ([#&#8203;19105](https://github.com/astral-sh/ruff/pull/19105)) - \[`flake8-quotes`] Make example error out-of-the-box (`Q003`) ([#&#8203;19106](https://github.com/astral-sh/ruff/pull/19106)) - \[`flake8-simplify`] Make example error out-of-the-box (`SIM110`) ([#&#8203;19113](https://github.com/astral-sh/ruff/pull/19113)) - \[`flake8-simplify`] Make example error out-of-the-box (`SIM113`) ([#&#8203;19109](https://github.com/astral-sh/ruff/pull/19109)) - \[`flake8-simplify`] Make example error out-of-the-box (`SIM401`) ([#&#8203;19110](https://github.com/astral-sh/ruff/pull/19110)) - \[`pyflakes`] Fix backslash in docs (`F621`) ([#&#8203;19098](https://github.com/astral-sh/ruff/pull/19098)) - \[`pylint`] Fix `PLC0415` example ([#&#8203;18970](https://github.com/astral-sh/ruff/pull/18970)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;LeanderCS](https://github.com/LeanderCS) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;NamelessGO](https://github.com/NamelessGO) - [@&#8203;adriencaccia](https://github.com/adriencaccia) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;jordyjwilliams](https://github.com/jordyjwilliams) - [@&#8203;lubaskinc0de](https://github.com/lubaskinc0de) - [@&#8203;med1844](https://github.com/med1844) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;yairp03](https://github.com/yairp03) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.12.2 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.2 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.2/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.1`](https://github.com/astral-sh/ruff/releases/tag/0.12.1) [Compare Source](https://github.com/astral-sh/ruff/compare/0.12.0...0.12.1) #### Release Notes ##### Preview features - \[`flake8-errmsg`] Extend `EM101` to support byte strings ([#&#8203;18867](https://github.com/astral-sh/ruff/pull/18867)) - \[`flake8-use-pathlib`] Add autofix for `PTH202` ([#&#8203;18763](https://github.com/astral-sh/ruff/pull/18763)) - \[`pygrep-hooks`] Add `AsyncMock` methods to `invalid-mock-access` (`PGH005`) ([#&#8203;18547](https://github.com/astral-sh/ruff/pull/18547)) - \[`pylint`] Ignore `__init__.py` files in (`PLC0414`) ([#&#8203;18400](https://github.com/astral-sh/ruff/pull/18400)) - \[`ruff`] Trigger `RUF037` for empty string and byte strings ([#&#8203;18862](https://github.com/astral-sh/ruff/pull/18862)) - \[formatter] Fix missing blank lines before decorated classes in `.pyi` files ([#&#8203;18888](https://github.com/astral-sh/ruff/pull/18888)) ##### Bug fixes - Avoid generating diagnostics with per-file ignores ([#&#8203;18801](https://github.com/astral-sh/ruff/pull/18801)) - Handle parenthesized arguments in `remove_argument` ([#&#8203;18805](https://github.com/astral-sh/ruff/pull/18805)) - \[`flake8-logging`] Avoid false positive for `exc_info=True` outside `logger.exception` (`LOG014`) ([#&#8203;18737](https://github.com/astral-sh/ruff/pull/18737)) - \[`flake8-pytest-style`] Enforce `pytest` import for decorators ([#&#8203;18779](https://github.com/astral-sh/ruff/pull/18779)) - \[`flake8-pytest-style`] Mark autofix for `PT001` and `PT023` as unsafe if there's comments in the decorator ([#&#8203;18792](https://github.com/astral-sh/ruff/pull/18792)) - \[`flake8-pytest-style`] `PT001`/`PT023` fix makes syntax error on parenthesized decorator ([#&#8203;18782](https://github.com/astral-sh/ruff/pull/18782)) - \[`flake8-raise`] Make fix unsafe if it deletes comments (`RSE102`) ([#&#8203;18788](https://github.com/astral-sh/ruff/pull/18788)) - \[`flake8-simplify`] Fix `SIM911` autofix creating a syntax error ([#&#8203;18793](https://github.com/astral-sh/ruff/pull/18793)) - \[`flake8-simplify`] Fix false negatives for shadowed bindings (`SIM910`, `SIM911`) ([#&#8203;18794](https://github.com/astral-sh/ruff/pull/18794)) - \[`flake8-simplify`] Preserve original behavior for `except ()` and bare `except` (`SIM105`) ([#&#8203;18213](https://github.com/astral-sh/ruff/pull/18213)) - \[`flake8-pyi`] Fix `PYI041`'s fix causing `TypeError` with `None | None | ...` ([#&#8203;18637](https://github.com/astral-sh/ruff/pull/18637)) - \[`perflint`] Fix `PERF101` autofix creating a syntax error and mark autofix as unsafe if there are comments in the `list` call expr ([#&#8203;18803](https://github.com/astral-sh/ruff/pull/18803)) - \[`perflint`] Fix false negative in `PERF401` ([#&#8203;18866](https://github.com/astral-sh/ruff/pull/18866)) - \[`pylint`] Avoid flattening nested `min`/`max` when outer call has single argument (`PLW3301`) ([#&#8203;16885](https://github.com/astral-sh/ruff/pull/16885)) - \[`pylint`] Fix `PLC2801` autofix creating a syntax error ([#&#8203;18857](https://github.com/astral-sh/ruff/pull/18857)) - \[`pylint`] Mark `PLE0241` autofix as unsafe if there's comments in the base classes ([#&#8203;18832](https://github.com/astral-sh/ruff/pull/18832)) - \[`pylint`] Suppress `PLE2510`/`PLE2512`/`PLE2513`/`PLE2514`/`PLE2515` autofix if the text contains an odd number of backslashes ([#&#8203;18856](https://github.com/astral-sh/ruff/pull/18856)) - \[`refurb`] Detect more exotic float literals in `FURB164` ([#&#8203;18925](https://github.com/astral-sh/ruff/pull/18925)) - \[`refurb`] Fix `FURB163` autofix creating a syntax error for `yield` expressions ([#&#8203;18756](https://github.com/astral-sh/ruff/pull/18756)) - \[`refurb`] Mark `FURB129` autofix as unsafe if there's comments in the `readlines` call ([#&#8203;18858](https://github.com/astral-sh/ruff/pull/18858)) - \[`ruff`] Fix false positives and negatives in `RUF010` ([#&#8203;18690](https://github.com/astral-sh/ruff/pull/18690)) - Fix casing of `analyze.direction` variant names ([#&#8203;18892](https://github.com/astral-sh/ruff/pull/18892)) ##### Rule changes - Fix f-string interpolation escaping in generated fixes ([#&#8203;18882](https://github.com/astral-sh/ruff/pull/18882)) - \[`flake8-return`] Mark `RET501` fix unsafe if comments are inside ([#&#8203;18780](https://github.com/astral-sh/ruff/pull/18780)) - \[`flake8-async`] Fix detection for large integer sleep durations in `ASYNC116` rule ([#&#8203;18767](https://github.com/astral-sh/ruff/pull/18767)) - \[`flake8-async`] Mark autofix for `ASYNC115` as unsafe if the call expression contains comments ([#&#8203;18753](https://github.com/astral-sh/ruff/pull/18753)) - \[`flake8-bugbear`] Mark autofix for `B004` as unsafe if the `hasattr` call expr contains comments ([#&#8203;18755](https://github.com/astral-sh/ruff/pull/18755)) - \[`flake8-comprehension`] Mark autofix for `C420` as unsafe if there's comments inside the dict comprehension ([#&#8203;18768](https://github.com/astral-sh/ruff/pull/18768)) - \[`flake8-comprehensions`] Handle template strings for comprehension fixes ([#&#8203;18710](https://github.com/astral-sh/ruff/pull/18710)) - \[`flake8-future-annotations`] Add autofix (`FA100`) ([#&#8203;18903](https://github.com/astral-sh/ruff/pull/18903)) - \[`pyflakes`] Mark `F504`/`F522`/`F523` autofix as unsafe if there's a call with side effect ([#&#8203;18839](https://github.com/astral-sh/ruff/pull/18839)) - \[`pylint`] Allow fix with comments and document performance implications (`PLW3301`) ([#&#8203;18936](https://github.com/astral-sh/ruff/pull/18936)) - \[`pylint`] Detect more exotic `NaN` literals in `PLW0177` ([#&#8203;18630](https://github.com/astral-sh/ruff/pull/18630)) - \[`pylint`] Fix `PLC1802` autofix creating a syntax error and mark autofix as unsafe if there's comments in the `len` call ([#&#8203;18836](https://github.com/astral-sh/ruff/pull/18836)) - \[`pyupgrade`] Extend version detection to include `sys.version_info.major` (`UP036`) ([#&#8203;18633](https://github.com/astral-sh/ruff/pull/18633)) - \[`ruff`] Add lint rule `RUF064` for calling `chmod` with non-octal integers ([#&#8203;18541](https://github.com/astral-sh/ruff/pull/18541)) - \[`ruff`] Added `cls.__dict__.get('__annotations__')` check (`RUF063`) ([#&#8203;18233](https://github.com/astral-sh/ruff/pull/18233)) - \[`ruff`] Frozen `dataclass` default should be valid (`RUF009`) ([#&#8203;18735](https://github.com/astral-sh/ruff/pull/18735)) ##### Server - Consider virtual path for various server actions ([#&#8203;18910](https://github.com/astral-sh/ruff/pull/18910)) ##### Documentation - Add fix safety sections ([#&#8203;18940](https://github.com/astral-sh/ruff/pull/18940),[#&#8203;18841](https://github.com/astral-sh/ruff/pull/18841),[#&#8203;18802](https://github.com/astral-sh/ruff/pull/18802),[#&#8203;18837](https://github.com/astral-sh/ruff/pull/18837),[#&#8203;18800](https://github.com/astral-sh/ruff/pull/18800),[#&#8203;18415](https://github.com/astral-sh/ruff/pull/18415),[#&#8203;18853](https://github.com/astral-sh/ruff/pull/18853),[#&#8203;18842](https://github.com/astral-sh/ruff/pull/18842)) - Use updated pre-commit id ([#&#8203;18718](https://github.com/astral-sh/ruff/pull/18718)) - \[`perflint`] Small docs improvement to `PERF401` ([#&#8203;18786](https://github.com/astral-sh/ruff/pull/18786)) - \[`pyupgrade`]: Use `super()`, not `__super__` in error messages (`UP008`) ([#&#8203;18743](https://github.com/astral-sh/ruff/pull/18743)) - \[`flake8-pie`] Small docs fix to `PIE794` ([#&#8203;18829](https://github.com/astral-sh/ruff/pull/18829)) - \[`flake8-pyi`] Correct `collections-named-tuple` example to use PascalCase assignment ([#&#8203;16884](https://github.com/astral-sh/ruff/pull/16884)) - \[`flake8-pie`] Add note on type checking benefits to `unnecessary-dict-kwargs` (`PIE804`) ([#&#8203;18666](https://github.com/astral-sh/ruff/pull/18666)) - \[`pycodestyle`] Clarify PEP 8 relationship to `whitespace-around-operator` rules ([#&#8203;18870](https://github.com/astral-sh/ruff/pull/18870)) ##### Other changes - Disallow newlines in format specifiers of single quoted f- or t-strings ([#&#8203;18708](https://github.com/astral-sh/ruff/pull/18708)) - \[`flake8-logging`] Add fix safety section to `LOG002` ([#&#8203;18840](https://github.com/astral-sh/ruff/pull/18840)) - \[`pyupgrade`] Add fix safety section to `UP010` ([#&#8203;18838](https://github.com/astral-sh/ruff/pull/18838)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Andrej730](https://github.com/Andrej730) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;GideonBear](https://github.com/GideonBear) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;JosiahKane](https://github.com/JosiahKane) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;LyricalToxic](https://github.com/LyricalToxic) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;RazerM](https://github.com/RazerM) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;alpaylan](https://github.com/alpaylan) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dericcrago](https://github.com/dericcrago) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;gopoto](https://github.com/gopoto) - [@&#8203;hmvp](https://github.com/hmvp) - [@&#8203;krikera](https://github.com/krikera) - [@&#8203;lubaskinc0de](https://github.com/lubaskinc0de) - [@&#8203;mashehu](https://github.com/mashehu) - [@&#8203;med1844](https://github.com/med1844) - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;sobolevn](https://github.com/sobolevn) - [@&#8203;suneettipirneni](https://github.com/suneettipirneni) - [@&#8203;yunchipang](https://github.com/yunchipang) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.12.1 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.1 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.1/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.12.0`](https://github.com/astral-sh/ruff/releases/tag/0.12.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.13...0.12.0) #### Release Notes Check out the [blog post](https://astral.sh/blog/ruff-v0.12.0) 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 `match` statement on Python versions before 3.10, and syntax errors emitted by CPython's compiler, such as irrefutable `match` patterns before the final `case` arm. - **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.toml` is no longer included in source distributions** The `rust-toolchain.toml` is used to specify a higher Rust version than Ruff's minimum 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`](https://docs.astral.sh/ruff/rules/suspicious-xmle-tree-usage/) (`S320`) ##### Deprecated Rules The following rules have been deprecated: - [`pandas-df-variable-name`](https://docs.astral.sh/ruff/rules/pandas-df-variable-name/) ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`for-loop-writes`](https://docs.astral.sh/ruff/rules/for-loop-writes) (`FURB122`) - [`check-and-remove-from-set`](https://docs.astral.sh/ruff/rules/check-and-remove-from-set) (`FURB132`) - [`verbose-decimal-constructor`](https://docs.astral.sh/ruff/rules/verbose-decimal-constructor) (`FURB157`) - [`fromisoformat-replace-z`](https://docs.astral.sh/ruff/rules/fromisoformat-replace-z) (`FURB162`) - [`int-on-sliced-str`](https://docs.astral.sh/ruff/rules/int-on-sliced-str) (`FURB166`) - [`exc-info-outside-except-handler`](https://docs.astral.sh/ruff/rules/exc-info-outside-except-handler) (`LOG014`) - [`import-outside-top-level`](https://docs.astral.sh/ruff/rules/import-outside-top-level) (`PLC0415`) - [`unnecessary-dict-index-lookup`](https://docs.astral.sh/ruff/rules/unnecessary-dict-index-lookup) (`PLR1733`) - [`nan-comparison`](https://docs.astral.sh/ruff/rules/nan-comparison) (`PLW0177`) - [`eq-without-hash`](https://docs.astral.sh/ruff/rules/eq-without-hash) (`PLW1641`) - [`pytest-parameter-with-default-argument`](https://docs.astral.sh/ruff/rules/pytest-parameter-with-default-argument) (`PT028`) - [`pytest-warns-too-broad`](https://docs.astral.sh/ruff/rules/pytest-warns-too-broad) (`PT030`) - [`pytest-warns-with-multiple-statements`](https://docs.astral.sh/ruff/rules/pytest-warns-with-multiple-statements) (`PT031`) - [`invalid-formatter-suppression-comment`](https://docs.astral.sh/ruff/rules/invalid-formatter-suppression-comment) (`RUF028`) - [`dataclass-enum`](https://docs.astral.sh/ruff/rules/dataclass-enum) (`RUF049`) - [`class-with-mixed-type-vars`](https://docs.astral.sh/ruff/rules/class-with-mixed-type-vars) (`RUF053`) - [`unnecessary-round`](https://docs.astral.sh/ruff/rules/unnecessary-round) (`RUF057`) - [`starmap-zip`](https://docs.astral.sh/ruff/rules/starmap-zip) (`RUF058`) - [`non-pep604-annotation-optional`](https://docs.astral.sh/ruff/rules/non-pep604-annotation-optional) (`UP045`) - [`non-pep695-generic-class`](https://docs.astral.sh/ruff/rules/non-pep695-generic-class) (`UP046`) - [`non-pep695-generic-function`](https://docs.astral.sh/ruff/rules/non-pep695-generic-function) (`UP047`) - [`private-type-parameter`](https://docs.astral.sh/ruff/rules/private-type-parameter) (`UP049`) The following behaviors have been stabilized: - [`collection-literal-concatenation`] (`RUF005`) now recognizes slices, in addition to list literals and variables. - The fix for [`readlines-in-for`] (`FURB129`) is now marked as always safe. - [`if-else-block-instead-of-if-exp`] (`SIM108`) will now further simplify expressions to use `or` instead of an `if` expression, where possible. - [`unused-noqa`] (`RUF100`) now checks for file-level `noqa` comments as well as 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 that include `bool`, like `bool | int` or `typing.Optional[bool]`, in addition to plain `bool` annotations. - [`non-pep604-annotation-union`] (`UP007`) has now been split into two rules. `UP007` now applies only to `typing.Union`, while [`non-pep604-annotation-optional`] (`UP045`) checks for use of `typing.Optional`. `UP045` has also been stabilized in this release, but you may need to update existing `include`, `ignore`, or `noqa` settings to accommodate this change. [`collection-literal-concatenation`]: https://docs.astral.sh/ruff/rules/collection-literal-concatenation [`readlines-in-for`]: https://docs.astral.sh/ruff/rules/readlines-in-for [`if-else-block-instead-of-if-exp`]: https://docs.astral.sh/ruff/rules/if-else-block-instead-of-if-exp [`unused-noqa`]: https://docs.astral.sh/ruff/rules/unused-noqa [`subprocess-without-shell-equals-true`]: https://docs.astral.sh/ruff/rules/subprocess-without-shell-equals-true [`boolean-type-hint-positional-argument`]: https://docs.astral.sh/ruff/rules/boolean-type-hint-positional-argument [`non-pep604-annotation-union`]: https://docs.astral.sh/ruff/rules/non-pep604-annotation-union [`non-pep604-annotation-optional`]: https://docs.astral.sh/ruff/rules/non-pep604-annotation-optional ##### Preview features - \[`ruff`] Check for non-context-manager use of `pytest.raises`, `pytest.warns`, and `pytest.deprecated_call` (`RUF061`) ([#&#8203;17368](https://github.com/astral-sh/ruff/pull/17368)) - \[syntax-errors] Raise unsupported syntax error for template strings prior to Python 3.14 ([#&#8203;18664](https://github.com/astral-sh/ruff/pull/18664)) ##### Bug fixes - Add syntax error when conversion flag does not immediately follow exclamation mark ([#&#8203;18706](https://github.com/astral-sh/ruff/pull/18706)) - Add trailing space around `readlines` ([#&#8203;18542](https://github.com/astral-sh/ruff/pull/18542)) - Fix `\r` and `\r\n` handling in t- and f-string debug texts ([#&#8203;18673](https://github.com/astral-sh/ruff/pull/18673)) - Hug closing `}` when f-string expression has a format specifier ([#&#8203;18704](https://github.com/astral-sh/ruff/pull/18704)) - \[`flake8-pyi`] Avoid syntax error in the case of starred and keyword arguments (`PYI059`) ([#&#8203;18611](https://github.com/astral-sh/ruff/pull/18611)) - \[`flake8-return`] Fix `RET504` autofix generating a syntax error ([#&#8203;18428](https://github.com/astral-sh/ruff/pull/18428)) - \[`pep8-naming`] Suppress fix for `N804` and `N805` if the recommended name is already used ([#&#8203;18472](https://github.com/astral-sh/ruff/pull/18472)) - \[`pycodestyle`] Avoid causing a syntax error in expressions spanning multiple lines (`E731`) ([#&#8203;18479](https://github.com/astral-sh/ruff/pull/18479)) - \[`pyupgrade`] Suppress `UP008` if `super` is shadowed ([#&#8203;18688](https://github.com/astral-sh/ruff/pull/18688)) - \[`refurb`] Parenthesize lambda and ternary expressions (`FURB122`, `FURB142`) ([#&#8203;18592](https://github.com/astral-sh/ruff/pull/18592)) - \[`ruff`] Handle extra arguments to `deque` (`RUF037`) ([#&#8203;18614](https://github.com/astral-sh/ruff/pull/18614)) - \[`ruff`] Preserve parentheses around `deque` in fix for `unnecessary-empty-iterable-within-deque-call` (`RUF037`) ([#&#8203;18598](https://github.com/astral-sh/ruff/pull/18598)) - \[`ruff`] Validate arguments before offering a fix (`RUF056`) ([#&#8203;18631](https://github.com/astral-sh/ruff/pull/18631)) - \[`ruff`] Skip fix for `RUF059` if dummy name is already bound ([#&#8203;18509](https://github.com/astral-sh/ruff/pull/18509)) - \[`pylint`] Fix `PLW0128` to check assignment targets in square brackets and after asterisks ([#&#8203;18665](https://github.com/astral-sh/ruff/pull/18665)) ##### Rule changes - Fix false positive on mutations in `return` statements (`B909`) ([#&#8203;18408](https://github.com/astral-sh/ruff/pull/18408)) - Treat `ty:` comments as pragma comments ([#&#8203;18532](https://github.com/astral-sh/ruff/pull/18532)) - \[`flake8-pyi`] Apply `custom-typevar-for-self` to string annotations (`PYI019`) ([#&#8203;18311](https://github.com/astral-sh/ruff/pull/18311)) - \[`pyupgrade`] Don't offer a fix for `Optional[None]` (`UP007`, `UP045)` ([#&#8203;18545](https://github.com/astral-sh/ruff/pull/18545)) - \[`pyupgrade`] Fix `super(__class__, self)` detection (`UP008`) ([#&#8203;18478](https://github.com/astral-sh/ruff/pull/18478)) - \[`refurb`] Make the fix for `FURB163` unsafe for `log2`, `log10`, `*args`, and deleted comments ([#&#8203;18645](https://github.com/astral-sh/ruff/pull/18645)) ##### Server - Support cancellation requests ([#&#8203;18627](https://github.com/astral-sh/ruff/pull/18627)) ##### Documentation - Drop confusing second `*` from glob pattern example for `per-file-target-version` ([#&#8203;18709](https://github.com/astral-sh/ruff/pull/18709)) - Update Neovim configuration examples ([#&#8203;18491](https://github.com/astral-sh/ruff/pull/18491)) - \[`pylint`] De-emphasize `__hash__ = Parent.__hash__` (`PLW1641`) ([#&#8203;18613](https://github.com/astral-sh/ruff/pull/18613)) - \[`refurb`] Add a note about float literal handling (`FURB157`) ([#&#8203;18615](https://github.com/astral-sh/ruff/pull/18615)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;DetachHead](https://github.com/DetachHead) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;K-dash](https://github.com/K-dash) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;RazerM](https://github.com/RazerM) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;benbaror](https://github.com/benbaror) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;close2code-palm](https://github.com/close2code-palm) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;felixscherz](https://github.com/felixscherz) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;grievejia](https://github.com/grievejia) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;njhearp](https://github.com/njhearp) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;shimies](https://github.com/shimies) - [@&#8203;suneettipirneni](https://github.com/suneettipirneni) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;twentyone212121](https://github.com/twentyone212121) #### Install ruff 0.12.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.12.0 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.12.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.13`](https://github.com/astral-sh/ruff/releases/tag/0.11.13) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.12...0.11.13) #### Release Notes ##### Preview features - \[`airflow`] Add unsafe fix for module moved cases (`AIR301`,`AIR311`,`AIR312`,`AIR302`) ([#&#8203;18367](https://github.com/astral-sh/ruff/pull/18367),[#&#8203;18366](https://github.com/astral-sh/ruff/pull/18366),[#&#8203;18363](https://github.com/astral-sh/ruff/pull/18363),[#&#8203;18093](https://github.com/astral-sh/ruff/pull/18093)) - \[`refurb`] Add coverage of `set` and `frozenset` calls (`FURB171`) ([#&#8203;18035](https://github.com/astral-sh/ruff/pull/18035)) - \[`refurb`] Mark `FURB180` fix unsafe when class has bases ([#&#8203;18149](https://github.com/astral-sh/ruff/pull/18149)) ##### Bug fixes - \[`perflint`] Fix missing parentheses for lambda and ternary conditions (`PERF401`, `PERF403`) ([#&#8203;18412](https://github.com/astral-sh/ruff/pull/18412)) - \[`pyupgrade`] Apply `UP035` only on py313+ for `get_type_hints()` ([#&#8203;18476](https://github.com/astral-sh/ruff/pull/18476)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP004`,`UP050`) ([#&#8203;18393](https://github.com/astral-sh/ruff/pull/18393), [#&#8203;18390](https://github.com/astral-sh/ruff/pull/18390)) ##### Rule changes - \[`fastapi`] Avoid false positive for class dependencies (`FAST003`) ([#&#8203;18271](https://github.com/astral-sh/ruff/pull/18271)) ##### Documentation - Update editor setup docs for Neovim and Vim ([#&#8203;18324](https://github.com/astral-sh/ruff/pull/18324)) ##### Other changes - Support Python 3.14 template strings (t-strings) in formatter and parser ([#&#8203;17851](https://github.com/astral-sh/ruff/pull/17851)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Viicos](https://github.com/Viicos) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;lipefree](https://github.com/lipefree) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;naslundx](https://github.com/naslundx) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;otakutyrant](https://github.com/otakutyrant) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;robsdedude](https://github.com/robsdedude) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;twentyone212121](https://github.com/twentyone212121) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.11.13 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh 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 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.13/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.12`](https://github.com/astral-sh/ruff/releases/tag/0.11.12) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.11...0.11.12) #### Release Notes ##### Preview features - \[`airflow`] Revise fix titles (`AIR3`) ([#&#8203;18215](https://github.com/astral-sh/ruff/pull/18215)) - \[`pylint`] Implement `missing-maxsplit-arg` (`PLC0207`) ([#&#8203;17454](https://github.com/astral-sh/ruff/pull/17454)) - \[`pyupgrade`] New rule `UP050` (`useless-class-metaclass-type`) ([#&#8203;18334](https://github.com/astral-sh/ruff/pull/18334)) - \[`flake8-use-pathlib`] Replace `os.symlink` with `Path.symlink_to` (`PTH211`) ([#&#8203;18337](https://github.com/astral-sh/ruff/pull/18337)) ##### Bug fixes - \[`flake8-bugbear`] Ignore `__debug__` attribute in `B010` ([#&#8203;18357](https://github.com/astral-sh/ruff/pull/18357)) - \[`flake8-async`] Fix `anyio.sleep` argument name (`ASYNC115`, `ASYNC116`) ([#&#8203;18262](https://github.com/astral-sh/ruff/pull/18262)) - \[`refurb`] Fix `FURB129` autofix generating invalid syntax ([#&#8203;18235](https://github.com/astral-sh/ruff/pull/18235)) ##### Rule changes - \[`flake8-implicit-str-concat`] Add autofix for `ISC003` ([#&#8203;18256](https://github.com/astral-sh/ruff/pull/18256)) - \[`pycodestyle`] Improve the diagnostic message for `E712` ([#&#8203;18328](https://github.com/astral-sh/ruff/pull/18328)) - \[`flake8-2020`] Fix diagnostic message for `!=` comparisons (`YTT201`) ([#&#8203;18293](https://github.com/astral-sh/ruff/pull/18293)) - \[`pyupgrade`] Make fix unsafe if it deletes comments (`UP010`) ([#&#8203;18291](https://github.com/astral-sh/ruff/pull/18291)) ##### Documentation - Simplify rules table to improve readability ([#&#8203;18297](https://github.com/astral-sh/ruff/pull/18297)) - Update editor integrations link in README ([#&#8203;17977](https://github.com/astral-sh/ruff/pull/17977)) - \[`flake8-bugbear`] Add fix safety section (`B006`) ([#&#8203;17652](https://github.com/astral-sh/ruff/pull/17652)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MaddyGuthridge](https://github.com/MaddyGuthridge) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Vasanth-96](https://github.com/Vasanth-96) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dsherret](https://github.com/dsherret) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;felixscherz](https://github.com/felixscherz) - [@&#8203;fennr](https://github.com/fennr) - [@&#8203;j178](https://github.com/j178) - [@&#8203;lipefree](https://github.com/lipefree) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;otakutyrant](https://github.com/otakutyrant) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;vjurczenia](https://github.com/vjurczenia) #### Install ruff 0.11.12 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh 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 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.12/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.11`](https://github.com/astral-sh/ruff/releases/tag/0.11.11) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.10...0.11.11) #### Release Notes ##### Preview features - \[`airflow`] Add autofixes for `AIR302` and `AIR312` ([#&#8203;17942](https://github.com/astral-sh/ruff/pull/17942)) - \[`airflow`] Move rules from `AIR312` to `AIR302` ([#&#8203;17940](https://github.com/astral-sh/ruff/pull/17940)) - \[`airflow`] Update `AIR301` and `AIR311` with the latest Airflow implementations ([#&#8203;17985](https://github.com/astral-sh/ruff/pull/17985)) - \[`flake8-simplify`] Enable fix in preview mode (`SIM117`) ([#&#8203;18208](https://github.com/astral-sh/ruff/pull/18208)) ##### Bug fixes - Fix inconsistent formatting of match-case on `[]` and `_` ([#&#8203;18147](https://github.com/astral-sh/ruff/pull/18147)) - \[`pylint`] Fix `PLW1514` not recognizing the `encoding` positional argument of `codecs.open` ([#&#8203;18109](https://github.com/astral-sh/ruff/pull/18109)) ##### CLI - Add full option name in formatter warning ([#&#8203;18217](https://github.com/astral-sh/ruff/pull/18217)) ##### Documentation - Fix rendering of admonition in docs ([#&#8203;18163](https://github.com/astral-sh/ruff/pull/18163)) - \[`flake8-print`] Improve print/pprint docs for `T201` and `T203` ([#&#8203;18130](https://github.com/astral-sh/ruff/pull/18130)) - \[`flake8-simplify`] Add fix safety section (`SIM110`,`SIM210`) ([#&#8203;18114](https://github.com/astral-sh/ruff/pull/18114),[#&#8203;18100](https://github.com/astral-sh/ruff/pull/18100)) - \[`pylint`] Fix docs example that produced different output (`PLW0603`) ([#&#8203;18216](https://github.com/astral-sh/ruff/pull/18216)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BradonZhang](https://github.com/BradonZhang) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CodeMan62](https://github.com/CodeMan62) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;Mathemmagician](https://github.com/Mathemmagician) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;TomerBin](https://github.com/TomerBin) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;adamaaronson](https://github.com/adamaaronson) - [@&#8203;brainwane](https://github.com/brainwane) - [@&#8203;brandtbucher](https://github.com/brandtbucher) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dragon-dxw](https://github.com/dragon-dxw) - [@&#8203;felixscherz](https://github.com/felixscherz) - [@&#8203;kiran-4444](https://github.com/kiran-4444) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;twentyone212121](https://github.com/twentyone212121) #### Install ruff 0.11.11 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh 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 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.11/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.10`](https://github.com/astral-sh/ruff/releases/tag/0.11.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.9...0.11.10) #### Release Notes ##### Preview features - \[`ruff`] Implement a recursive check for `RUF060` ([#&#8203;17976](https://github.com/astral-sh/ruff/pull/17976)) - \[`airflow`] Enable autofixes for `AIR301` and `AIR311` ([#&#8203;17941](https://github.com/astral-sh/ruff/pull/17941)) - \[`airflow`] Apply try catch guard to all `AIR3` rules ([#&#8203;17887](https://github.com/astral-sh/ruff/pull/17887)) - \[`airflow`] Extend `AIR311` rules ([#&#8203;17913](https://github.com/astral-sh/ruff/pull/17913)) ##### Bug fixes - \[`flake8-bugbear`] Ignore `B028` if `skip_file_prefixes` is present ([#&#8203;18047](https://github.com/astral-sh/ruff/pull/18047)) - \[`flake8-pie`] Mark autofix for `PIE804` as unsafe if the dictionary contains comments ([#&#8203;18046](https://github.com/astral-sh/ruff/pull/18046)) - \[`flake8-simplify`] Correct behavior for `str.split`/`rsplit` with `maxsplit=0` (`SIM905`) ([#&#8203;18075](https://github.com/astral-sh/ruff/pull/18075)) - \[`flake8-simplify`] Fix `SIM905` autofix for `rsplit` creating a reversed list literal ([#&#8203;18045](https://github.com/astral-sh/ruff/pull/18045)) - \[`flake8-use-pathlib`] Suppress diagnostics for all `os.*` functions that have the `dir_fd` parameter (`PTH`) ([#&#8203;17968](https://github.com/astral-sh/ruff/pull/17968)) - \[`refurb`] Mark autofix as safe only for number literals (`FURB116`) ([#&#8203;17692](https://github.com/astral-sh/ruff/pull/17692)) ##### Rule changes - \[`flake8-bandit`] Skip `S608` for expressionless f-strings ([#&#8203;17999](https://github.com/astral-sh/ruff/pull/17999)) - \[`flake8-pytest-style`] Don't recommend `usefixtures` for `parametrize` values (`PT019`) ([#&#8203;17650](https://github.com/astral-sh/ruff/pull/17650)) - \[`pyupgrade`] Add `resource.error` as deprecated alias of `OSError` (`UP024`) ([#&#8203;17933](https://github.com/astral-sh/ruff/pull/17933)) ##### CLI - Disable jemalloc on Android ([#&#8203;18033](https://github.com/astral-sh/ruff/pull/18033)) ##### Documentation - Update Neovim setup docs ([#&#8203;18108](https://github.com/astral-sh/ruff/pull/18108)) - \[`flake8-simplify`] Add fix safety section (`SIM103`) ([#&#8203;18086](https://github.com/astral-sh/ruff/pull/18086)) - \[`flake8-simplify`] Add fix safety section (`SIM112`) ([#&#8203;18099](https://github.com/astral-sh/ruff/pull/18099)) - \[`pylint`] Add fix safety section (`PLC0414`) ([#&#8203;17802](https://github.com/astral-sh/ruff/pull/17802)) - \[`pylint`] Add fix safety section (`PLE4703`) ([#&#8203;17824](https://github.com/astral-sh/ruff/pull/17824)) - \[`pylint`] Add fix safety section (`PLW1514`) ([#&#8203;17932](https://github.com/astral-sh/ruff/pull/17932)) - \[`pylint`] Add fix safety section (`PLW3301`) ([#&#8203;17878](https://github.com/astral-sh/ruff/pull/17878)) - \[`ruff`] Add fix safety section (`RUF007`) ([#&#8203;17755](https://github.com/astral-sh/ruff/pull/17755)) - \[`ruff`] Add fix safety section (`RUF033`) ([#&#8203;17760](https://github.com/astral-sh/ruff/pull/17760)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Rogdham](https://github.com/Rogdham) - [@&#8203;Usul-Dev](https://github.com/Usul-Dev) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;bombsimon](https://github.com/bombsimon) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;kiran-4444](https://github.com/kiran-4444) - [@&#8203;lukeanderson93](https://github.com/lukeanderson93) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;naslundx](https://github.com/naslundx) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;omahs](https://github.com/omahs) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;swnb](https://github.com/swnb) - [@&#8203;yunchipang](https://github.com/yunchipang) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.11.10 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.10 | File | Platform | Checksum | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.9`](https://github.com/astral-sh/ruff/releases/tag/0.11.9) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.8...0.11.9) #### Release Notes ##### Preview features - Default to latest supported Python version for version-related syntax errors ([#&#8203;17529](https://github.com/astral-sh/ruff/pull/17529)) - Implement deferred annotations for Python 3.14 ([#&#8203;17658](https://github.com/astral-sh/ruff/pull/17658)) - \[`airflow`] Fix `SQLTableCheckOperator` typo (`AIR302`) ([#&#8203;17946](https://github.com/astral-sh/ruff/pull/17946)) - \[`airflow`] Remove `airflow.utils.dag_parsing_context.get_parsing_context` (`AIR301`) ([#&#8203;17852](https://github.com/astral-sh/ruff/pull/17852)) - \[`airflow`] Skip attribute check in try catch block (`AIR301`) ([#&#8203;17790](https://github.com/astral-sh/ruff/pull/17790)) - \[`flake8-bandit`] Mark tuples of string literals as trusted input in `S603` ([#&#8203;17801](https://github.com/astral-sh/ruff/pull/17801)) - \[`isort`] Check full module path against project root(s) when categorizing first-party imports ([#&#8203;16565](https://github.com/astral-sh/ruff/pull/16565)) - \[`ruff`] Add new rule `in-empty-collection` (`RUF060`) ([#&#8203;16480](https://github.com/astral-sh/ruff/pull/16480)) ##### Bug fixes - Fix missing `combine` call for `lint.typing-extensions` setting ([#&#8203;17823](https://github.com/astral-sh/ruff/pull/17823)) - \[`flake8-async`] Fix module name in `ASYNC110`, `ASYNC115`, and `ASYNC116` fixes ([#&#8203;17774](https://github.com/astral-sh/ruff/pull/17774)) - \[`pyupgrade`] Add spaces between tokens as necessary to avoid syntax errors in `UP018` autofix ([#&#8203;17648](https://github.com/astral-sh/ruff/pull/17648)) - \[`refurb`] Fix false positive for float and complex numbers in `FURB116` ([#&#8203;17661](https://github.com/astral-sh/ruff/pull/17661)) - \[parser] Flag single unparenthesized generator expr with trailing comma in arguments. ([#&#8203;17893](https://github.com/astral-sh/ruff/pull/17893)) ##### Documentation - Add instructions on how to upgrade to a newer Rust version ([#&#8203;17928](https://github.com/astral-sh/ruff/pull/17928)) - Update code of conduct email address ([#&#8203;17875](https://github.com/astral-sh/ruff/pull/17875)) - Add fix safety sections to `PLC2801`, `PLR1722`, and `RUF013` ([#&#8203;17825](https://github.com/astral-sh/ruff/pull/17825), [#&#8203;17826](https://github.com/astral-sh/ruff/pull/17826), [#&#8203;17759](https://github.com/astral-sh/ruff/pull/17759)) - Add link to `check-typed-exception` from `S110` and `S112` ([#&#8203;17786](https://github.com/astral-sh/ruff/pull/17786)) ##### Other changes - Allow passing a virtual environment to `ruff analyze graph` ([#&#8203;17743](https://github.com/astral-sh/ruff/pull/17743)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;ercbot](https://github.com/ercbot) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;naslundx](https://github.com/naslundx) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) - [@&#8203;yunchipang](https://github.com/yunchipang) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.11.9 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.9 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.9/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.8`](https://github.com/astral-sh/ruff/releases/tag/0.11.8) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.7...0.11.8) #### Release Notes ##### Preview features - \[`airflow`] Apply auto fixes to cases where the names have changed in Airflow 3 (`AIR302`, `AIR311`) ([#&#8203;17553](https://github.com/astral-sh/ruff/pull/17553), [#&#8203;17570](https://github.com/astral-sh/ruff/pull/17570), [#&#8203;17571](https://github.com/astral-sh/ruff/pull/17571)) - \[`airflow`] Extend `AIR301` rule ([#&#8203;17598](https://github.com/astral-sh/ruff/pull/17598)) - \[`airflow`] Update existing `AIR302` rules with better suggestions ([#&#8203;17542](https://github.com/astral-sh/ruff/pull/17542)) - \[`refurb`] Mark fix as safe for `readlines-in-for` (`FURB129`) ([#&#8203;17644](https://github.com/astral-sh/ruff/pull/17644)) - \[syntax-errors] `nonlocal` declaration at module level ([#&#8203;17559](https://github.com/astral-sh/ruff/pull/17559)) - \[syntax-errors] Detect single starred expression assignment `x = *y` ([#&#8203;17624](https://github.com/astral-sh/ruff/pull/17624)) ##### Bug fixes - \[`flake8-pyi`] Ensure `Literal[None,] | Literal[None,]` is not autofixed to `None | None` (`PYI061`) ([#&#8203;17659](https://github.com/astral-sh/ruff/pull/17659)) - \[`flake8-use-pathlib`] Avoid suggesting `Path.iterdir()` for `os.listdir` with file descriptor (`PTH208`) ([#&#8203;17715](https://github.com/astral-sh/ruff/pull/17715)) - \[`flake8-use-pathlib`] Fix `PTH104` false positive when `rename` is passed a file descriptor ([#&#8203;17712](https://github.com/astral-sh/ruff/pull/17712)) - \[`flake8-use-pathlib`] Fix `PTH116` false positive when `stat` is passed a file descriptor ([#&#8203;17709](https://github.com/astral-sh/ruff/pull/17709)) - \[`flake8-use-pathlib`] Fix `PTH123` false positive when `open` is passed a file descriptor from a function call ([#&#8203;17705](https://github.com/astral-sh/ruff/pull/17705)) - \[`pycodestyle`] Fix duplicated diagnostic in `E712` ([#&#8203;17651](https://github.com/astral-sh/ruff/pull/17651)) - \[`pylint`] Detect `global` declarations in module scope (`PLE0118`) ([#&#8203;17411](https://github.com/astral-sh/ruff/pull/17411)) - \[syntax-errors] Make `async-comprehension-in-sync-comprehension` more specific ([#&#8203;17460](https://github.com/astral-sh/ruff/pull/17460)) ##### Configuration - Add option to disable `typing_extensions` imports ([#&#8203;17611](https://github.com/astral-sh/ruff/pull/17611)) ##### Documentation - Fix example syntax for the `lint.pydocstyle.ignore-var-parameters` option ([#&#8203;17740](https://github.com/astral-sh/ruff/pull/17740)) - Add fix safety sections (`ASYNC116`, `FLY002`, `D200`, `RUF005`, `RUF017`, `RUF027`, `RUF028`, `RUF057`) ([#&#8203;17497](https://github.com/astral-sh/ruff/pull/17497), [#&#8203;17496](https://github.com/astral-sh/ruff/pull/17496), [#&#8203;17502](https://github.com/astral-sh/ruff/pull/17502), [#&#8203;17484](https://github.com/astral-sh/ruff/pull/17484), [#&#8203;17480](https://github.com/astral-sh/ruff/pull/17480), [#&#8203;17485](https://github.com/astral-sh/ruff/pull/17485), [#&#8203;17722](https://github.com/astral-sh/ruff/pull/17722), [#&#8203;17483](https://github.com/astral-sh/ruff/pull/17483)) ##### Other changes - Add Python 3.14 to configuration options ([#&#8203;17647](https://github.com/astral-sh/ruff/pull/17647)) - Make syntax error for unparenthesized except tuples version specific to before 3.14 ([#&#8203;17660](https://github.com/astral-sh/ruff/pull/17660)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Jie211](https://github.com/Jie211) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) - [@&#8203;LaBatata101](https://github.com/LaBatata101) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;abhijeetbodas2001](https://github.com/abhijeetbodas2001) - [@&#8203;brendancooley](https://github.com/brendancooley) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejchap](https://github.com/thejchap) #### Install ruff 0.11.8 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.8 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.8/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.7`](https://github.com/astral-sh/ruff/releases/tag/0.11.7) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.6...0.11.7) #### Release Notes ##### Preview features - \[`airflow`] Apply auto fixes to cases where the names have changed in Airflow 3 (`AIR301`) ([#&#8203;17355](https://github.com/astral-sh/ruff/pull/17355)) - \[`perflint`] Implement fix for `manual-dict-comprehension` (`PERF403`) ([#&#8203;16719](https://github.com/astral-sh/ruff/pull/16719)) - \[syntax-errors] Make duplicate parameter names a semantic error ([#&#8203;17131](https://github.com/astral-sh/ruff/pull/17131)) ##### Bug fixes - \[`airflow`] Fix typos in provider package names (`AIR302`, `AIR312`) ([#&#8203;17574](https://github.com/astral-sh/ruff/pull/17574)) - \[`flake8-type-checking`] Visit keyword arguments in checks involving `typing.cast`/`typing.NewType` arguments ([#&#8203;17538](https://github.com/astral-sh/ruff/pull/17538)) - \[`pyupgrade`] Preserve parenthesis when fixing native literals containing newlines (`UP018`) ([#&#8203;17220](https://github.com/astral-sh/ruff/pull/17220)) - \[`refurb`] Mark the `FURB161` fix unsafe except for integers and booleans ([#&#8203;17240](https://github.com/astral-sh/ruff/pull/17240)) ##### Rule changes - \[`perflint`] Allow list function calls to be replaced with a comprehension (`PERF401`) ([#&#8203;17519](https://github.com/astral-sh/ruff/pull/17519)) - \[`pycodestyle`] Auto-fix redundant boolean comparison (`E712`) ([#&#8203;17090](https://github.com/astral-sh/ruff/pull/17090)) - \[`pylint`] make fix unsafe if delete comments (`PLR1730`) ([#&#8203;17459](https://github.com/astral-sh/ruff/pull/17459)) ##### Documentation - Add fix safety sections to docs for several rules ([#&#8203;17410](https://github.com/astral-sh/ruff/pull/17410),[#&#8203;17440](https://github.com/astral-sh/ruff/pull/17440),[#&#8203;17441](https://github.com/astral-sh/ruff/pull/17441),[#&#8203;17443](https://github.com/astral-sh/ruff/pull/17443),[#&#8203;17444](https://github.com/astral-sh/ruff/pull/17444)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;camper42](https://github.com/camper42) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;jnooree](https://github.com/jnooree) - [@&#8203;knavdeep152002](https://github.com/knavdeep152002) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;w0nder1ng](https://github.com/w0nder1ng) #### Install ruff 0.11.7 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.7 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.7/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.6`](https://github.com/astral-sh/ruff/releases/tag/0.11.6) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.5...0.11.6) #### Release Notes ##### Preview features - Avoid adding whitespace to the end of a docstring after an escaped quote ([#&#8203;17216](https://github.com/astral-sh/ruff/pull/17216)) - \[`airflow`] Extract `AIR311` from `AIR301` rules (`AIR301`, `AIR311`) ([#&#8203;17310](https://github.com/astral-sh/ruff/pull/17310), [#&#8203;17422](https://github.com/astral-sh/ruff/pull/17422)) ##### Bug fixes - Raise syntax error when `\` is at end of file ([#&#8203;17409](https://github.com/astral-sh/ruff/pull/17409)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) #### Install ruff 0.11.6 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.6 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.6/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.5`](https://github.com/astral-sh/ruff/releases/tag/0.11.5) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.4...0.11.5) #### Release Notes ##### Preview features - \[`airflow`] Add missing `AIR302` attribute check ([#&#8203;17115](https://github.com/astral-sh/ruff/pull/17115)) - \[`airflow`] Expand module path check to individual symbols (`AIR302`) ([#&#8203;17278](https://github.com/astral-sh/ruff/pull/17278)) - \[`airflow`] Extract `AIR312` from `AIR302` rules (`AIR302`, `AIR312`) ([#&#8203;17152](https://github.com/astral-sh/ruff/pull/17152)) - \[`airflow`] Update oudated `AIR301`, `AIR302` rules ([#&#8203;17123](https://github.com/astral-sh/ruff/pull/17123)) - \[syntax-errors] Async comprehension in sync comprehension ([#&#8203;17177](https://github.com/astral-sh/ruff/pull/17177)) - \[syntax-errors] Check annotations in annotated assignments ([#&#8203;17283](https://github.com/astral-sh/ruff/pull/17283)) - \[syntax-errors] Extend annotation checks to `await` ([#&#8203;17282](https://github.com/astral-sh/ruff/pull/17282)) ##### Bug fixes - \[`flake8-pie`] Avoid false positive for multiple assignment with `auto()` (`PIE796`) ([#&#8203;17274](https://github.com/astral-sh/ruff/pull/17274)) ##### Rule changes - \[`ruff`] Fix `RUF100` to detect unused file-level `noqa` directives with specific codes ([#&#8203;17042](https://github.com/astral-sh/ruff/issues/17042)) ([#&#8203;17061](https://github.com/astral-sh/ruff/pull/17061)) - \[`flake8-pytest-style`] Avoid false positive for legacy form of `pytest.raises` (`PT011`) ([#&#8203;17231](https://github.com/astral-sh/ruff/pull/17231)) ##### Documentation - Fix formatting of "See Style Guide" link ([#&#8203;17272](https://github.com/astral-sh/ruff/pull/17272)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Skylion007](https://github.com/Skylion007) - [@&#8203;browniebroke](https://github.com/browniebroke) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;twentyone212121](https://github.com/twentyone212121) #### Install ruff 0.11.5 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.5 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.5/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.4`](https://github.com/astral-sh/ruff/releases/tag/0.11.4) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.3...0.11.4) #### Release Notes ##### Preview features - \[`ruff`] Implement `invalid-rule-code` as `RUF102` ([#&#8203;17138](https://github.com/astral-sh/ruff/pull/17138)) - \[syntax-errors] Detect duplicate keys in `match` mapping patterns ([#&#8203;17129](https://github.com/astral-sh/ruff/pull/17129)) - \[syntax-errors] Detect duplicate attributes in `match` class patterns ([#&#8203;17186](https://github.com/astral-sh/ruff/pull/17186)) - \[syntax-errors] Detect invalid syntax in annotations ([#&#8203;17101](https://github.com/astral-sh/ruff/pull/17101)) ##### Bug fixes - \[syntax-errors] Fix multiple assignment error for class fields in `match` patterns ([#&#8203;17184](https://github.com/astral-sh/ruff/pull/17184)) - Don't skip visiting non-tuple slice in `typing.Annotated` subscripts ([#&#8203;17201](https://github.com/astral-sh/ruff/pull/17201)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;Gankra](https://github.com/Gankra) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;sharkdp](https://github.com/sharkdp) #### Install ruff 0.11.4 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.4 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.4/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.3`](https://github.com/astral-sh/ruff/releases/tag/0.11.3) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.2...0.11.3) #### Release Notes ##### Preview features - \[`airflow`] Add more autofixes for `AIR302` ([#&#8203;16876](https://github.com/astral-sh/ruff/pull/16876), [#&#8203;16977](https://github.com/astral-sh/ruff/pull/16977), [#&#8203;16976](https://github.com/astral-sh/ruff/pull/16976), [#&#8203;16965](https://github.com/astral-sh/ruff/pull/16965)) - \[`airflow`] Move `AIR301` to `AIR002` ([#&#8203;16978](https://github.com/astral-sh/ruff/pull/16978)) - \[`airflow`] Move `AIR302` to `AIR301` and `AIR303` to `AIR302` ([#&#8203;17151](https://github.com/astral-sh/ruff/pull/17151)) - \[`flake8-bandit`] Mark `str` and `list[str]` literals as trusted input (`S603`) ([#&#8203;17136](https://github.com/astral-sh/ruff/pull/17136)) - \[`ruff`] Support slices in `RUF005` ([#&#8203;17078](https://github.com/astral-sh/ruff/pull/17078)) - \[syntax-errors] Start detecting compile-time syntax errors ([#&#8203;16106](https://github.com/astral-sh/ruff/pull/16106)) - \[syntax-errors] Duplicate type parameter names ([#&#8203;16858](https://github.com/astral-sh/ruff/pull/16858)) - \[syntax-errors] Irrefutable `case` pattern before final case ([#&#8203;16905](https://github.com/astral-sh/ruff/pull/16905)) - \[syntax-errors] Multiple assignments in `case` pattern ([#&#8203;16957](https://github.com/astral-sh/ruff/pull/16957)) - \[syntax-errors] Single starred assignment target ([#&#8203;17024](https://github.com/astral-sh/ruff/pull/17024)) - \[syntax-errors] Starred expressions in `return`, `yield`, and `for` ([#&#8203;17134](https://github.com/astral-sh/ruff/pull/17134)) - \[syntax-errors] Store to or delete `__debug__` ([#&#8203;16984](https://github.com/astral-sh/ruff/pull/16984)) ##### Bug fixes - Error instead of `panic!` when running Ruff from a deleted directory ([#&#8203;16903](https://github.com/astral-sh/ruff/issues/16903)) ([#&#8203;17054](https://github.com/astral-sh/ruff/pull/17054)) - \[syntax-errors] Fix false positive for parenthesized tuple index ([#&#8203;16948](https://github.com/astral-sh/ruff/pull/16948)) ##### CLI - Check `pyproject.toml` correctly when it is passed via stdin ([#&#8203;16971](https://github.com/astral-sh/ruff/pull/16971)) ##### Configuration - \[`flake8-import-conventions`] Add import `numpy.typing as npt` to default `flake8-import-conventions.aliases` ([#&#8203;17133](https://github.com/astral-sh/ruff/pull/17133)) ##### Documentation - \[`refurb`] Document why `UserDict`, `UserList`, and `UserString` are preferred over `dict`, `list`, and `str` (`FURB189`) ([#&#8203;16927](https://github.com/astral-sh/ruff/pull/16927)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;akx](https://github.com/akx) - [@&#8203;alex-700](https://github.com/alex-700) - [@&#8203;amin-not-found](https://github.com/amin-not-found) - [@&#8203;ashb](https://github.com/ashb) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dan-wilton](https://github.com/dan-wilton) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;john-science](https://github.com/john-science) - [@&#8203;manzt](https://github.com/manzt) - [@&#8203;maxmynter](https://github.com/maxmynter) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;trag1c](https://github.com/trag1c) #### Install ruff 0.11.3 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.3 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.3/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.2`](https://github.com/astral-sh/ruff/releases/tag/0.11.2) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.1...0.11.2) #### Release Notes ##### Preview features - \[syntax-errors] Fix false-positive syntax errors emitted for annotations on variadic parameters before Python 3.11 ([#&#8203;16878](https://github.com/astral-sh/ruff/pull/16878)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) #### Install ruff 0.11.2 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.2 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.2/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.1`](https://github.com/astral-sh/ruff/releases/tag/0.11.1) [Compare Source](https://github.com/astral-sh/ruff/compare/0.11.0...0.11.1) #### Release Notes ##### Preview features - \[`airflow`] Add `chain`, `chain_linear` and `cross_downstream` for `AIR302` ([#&#8203;16647](https://github.com/astral-sh/ruff/pull/16647)) - \[syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors ([#&#8203;16581](https://github.com/astral-sh/ruff/pull/16581)) - \[syntax-errors] PEP 701 f-strings before Python 3.12 ([#&#8203;16543](https://github.com/astral-sh/ruff/pull/16543)) - \[syntax-errors] Parenthesized context managers before Python 3.9 ([#&#8203;16523](https://github.com/astral-sh/ruff/pull/16523)) - \[syntax-errors] Star annotations before Python 3.11 ([#&#8203;16545](https://github.com/astral-sh/ruff/pull/16545)) - \[syntax-errors] Star expression in index before Python 3.11 ([#&#8203;16544](https://github.com/astral-sh/ruff/pull/16544)) - \[syntax-errors] Unparenthesized assignment expressions in sets and indexes ([#&#8203;16404](https://github.com/astral-sh/ruff/pull/16404)) ##### Bug fixes - Server: Allow `FixAll` action in presence of version-specific syntax errors ([#&#8203;16848](https://github.com/astral-sh/ruff/pull/16848)) - \[`flake8-bandit`] Allow raw strings in `suspicious-mark-safe-usage` (`S308`) [#&#8203;16702](https://github.com/astral-sh/ruff/issues/16702) ([#&#8203;16770](https://github.com/astral-sh/ruff/pull/16770)) - \[`refurb`] Avoid panicking `unwrap` in `verbose-decimal-constructor` (`FURB157`) ([#&#8203;16777](https://github.com/astral-sh/ruff/pull/16777)) - \[`refurb`] Fix starred expressions fix (`FURB161`) ([#&#8203;16550](https://github.com/astral-sh/ruff/pull/16550)) - Fix `--statistics` reporting for unsafe fixes ([#&#8203;16756](https://github.com/astral-sh/ruff/pull/16756)) ##### Rule changes - \[`flake8-executables`] Allow `uv run` in shebang line for `shebang-missing-python` (`EXE003`) ([#&#8203;16849](https://github.com/astral-sh/ruff/pull/16849),[#&#8203;16855](https://github.com/astral-sh/ruff/pull/16855)) ##### CLI - Add `--exit-non-zero-on-format` ([#&#8203;16009](https://github.com/astral-sh/ruff/pull/16009)) ##### Documentation - Update Ruff tutorial to avoid non-existent fix in `__init__.py` ([#&#8203;16818](https://github.com/astral-sh/ruff/pull/16818)) - \[`flake8-gettext`] Swap `format-` and `printf-in-get-text-func-call` examples (`INT002`, `INT003`) ([#&#8203;16769](https://github.com/astral-sh/ruff/pull/16769)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MatthewMckee4](https://github.com/MatthewMckee4) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;ZedThree](https://github.com/ZedThree) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;kaxil](https://github.com/kaxil) - [@&#8203;mfontanaar](https://github.com/mfontanaar) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;thejcannon](https://github.com/thejcannon) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.11.1 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.1 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.1/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.11.0`](https://github.com/astral-sh/ruff/releases/tag/0.11.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.10.0...0.11.0) #### Release Notes This is a follow-up to [release 0.10.0](https://github.com/astral-sh/ruff/releases/tag/0.10.0). The `requires-python` inference changes were unintentionally omitted from 0.10.0, and have been included here. This release also includes stabilization of the preview behavior for `PGH004`. ##### Breaking changes - **Changes to how the Python version is inferred when a `target-version` is not specified** ([#&#8203;16319](https://github.com/astral-sh/ruff/pull/16319)) In previous versions of Ruff, you could specify your Python version with: - The `target-version` option in a `ruff.toml` file or the `[tool.ruff]` section of a pyproject.toml file. - The `project.requires-python` field in a `pyproject.toml` file with a `[tool.ruff]` section. These options worked well in most cases, and are still recommended for fine control of the Python version. However, because of the way Ruff discovers config files, `pyproject.toml` files without a `[tool.ruff]` section would be ignored, including the `requires-python` setting. Ruff would then use the default Python version (3.9 as of this writing) instead, which is surprising when you've attempted to request another version. In v0.10, config discovery has been updated to address this issue: - If Ruff finds a `ruff.toml` file without a `target-version`, it will check for a `pyproject.toml` file in the same directory and respect its `requires-python` version, even if it does not contain a `[tool.ruff]` section. - If Ruff finds a user-level configuration, the `requires-python` field of the closest `pyproject.toml` in a parent directory will take precedence. - If there is no config file (`ruff.toml`or `pyproject.toml` with a `[tool.ruff]` section) in the directory of the file being checked, Ruff will search for the closest `pyproject.toml` in the parent directories and use its `requires-python` setting. ##### Stabilization The following behaviors have been stabilized: - [`blanket-noqa`](https://docs.astral.sh/ruff/rules/blanket-noqa/) (`PGH004`): Also detect blanked file-level noqa comments (and not just line level comments). ##### Preview features - \[syntax-errors] Tuple unpacking in `for` statement iterator clause before Python 3.9 ([#&#8203;16558](https://github.com/astral-sh/ruff/pull/16558)) #### Install ruff 0.11.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.11.0 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.11.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.10.0`](https://github.com/astral-sh/ruff/releases/tag/0.10.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.10...0.10.0) #### Release Notes Check out the [blog post](https://astral.sh/blog/ruff-v0.10.0) for a migration guide and overview of the changes! ##### Breaking changes See also, the "Remapped rules" section which may result in disabled rules. - **Changes to how the Python version is inferred when a `target-version` is not specified** ([#&#8203;16319](https://github.com/astral-sh/ruff/pull/16319)) While this change was intended to be released in 0.10.0, it was unintentionally omitted. It was subsequently released in [0.11.0](https://github.com/astral-sh/ruff/releases/tag/0.11.0) — see the changelog there for details. - **Updated `TYPE_CHECKING` behavior** ([#&#8203;16669](https://github.com/astral-sh/ruff/pull/16669)) Previously, Ruff only recognized typechecking blocks that tested the `typing.TYPE_CHECKING` symbol. Now, Ruff recognizes any local variable named `TYPE_CHECKING`. This release also removes support for the legacy `if 0:` and `if False:` typechecking checks. Use a local `TYPE_CHECKING` variable instead. - **More robust noqa parsing** ([#&#8203;16483](https://github.com/astral-sh/ruff/pull/16483)) The syntax for both file-level and in-line suppression comments has been unified and made more robust to certain errors. In most cases, this will result in more suppression comments being read by Ruff, but there are a few instances where previously read comments will now log an error to the user instead. Please refer to the documentation on [*Error suppression*](https://docs.astral.sh/ruff/linter/#error-suppression) for the full specification. - **Avoid unnecessary parentheses around with statements with a single context manager and a trailing comment** ([#&#8203;14005](https://github.com/astral-sh/ruff/pull/14005)) This change fixes a bug in the formatter where it introduced unnecessary parentheses around with statements with a single context manager and a trailing comment. This change may result in a change in formatting for some users. - **Bump alpine default tag to 3.21 for derived Docker images** ([#&#8203;16456](https://github.com/astral-sh/ruff/pull/16456)) Alpine 3.21 was released in Dec 2024 and is used in the official Alpine-based Python images. Now the ruff:alpine image will use 3.21 instead of 3.20 and ruff:alpine3.20 will no longer be updated. ##### Deprecated Rules The following rules have been deprecated: - [`non-pep604-isinstance`](https://docs.astral.sh/ruff/rules/non-pep604-isinstance/) (`UP038`) - [`suspicious-xmle-tree-usage`](https://docs.astral.sh/ruff/rules/suspicious-xmle-tree-usage/) (`S320`) ##### Remapped rules The following rules have been remapped to new rule codes: - \[`unsafe-markup-use`]: `RUF035` to `S704` ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`batched-without-explicit-strict`](https://docs.astral.sh/ruff/rules/batched-without-explicit-strict) (`B911`) - [`unnecessary-dict-comprehension-for-iterable`](https://docs.astral.sh/ruff/rules/unnecessary-dict-comprehension-for-iterable) (`C420`) - [`datetime-min-max`](https://docs.astral.sh/ruff/rules/datetime-min-max) (`DTZ901`) - [`fast-api-unused-path-parameter`](https://docs.astral.sh/ruff/rules/fast-api-unused-path-parameter) (`FAST003`) - [`root-logger-call`](https://docs.astral.sh/ruff/rules/root-logger-call) (`LOG015`) - [`len-test`](https://docs.astral.sh/ruff/rules/len-test) (`PLC1802`) - [`shallow-copy-environ`](https://docs.astral.sh/ruff/rules/shallow-copy-environ) (`PLW1507`) - [`os-listdir`](https://docs.astral.sh/ruff/rules/os-listdir) (`PTH208`) - [`invalid-pathlib-with-suffix`](https://docs.astral.sh/ruff/rules/invalid-pathlib-with-suffix) (`PTH210`) - [`invalid-assert-message-literal-argument`](https://docs.astral.sh/ruff/rules/invalid-assert-message-literal-argument) (`RUF040`) - [`unnecessary-nested-literal`](https://docs.astral.sh/ruff/rules/unnecessary-nested-literal) (`RUF041`) - [`unnecessary-cast-to-int`](https://docs.astral.sh/ruff/rules/unnecessary-cast-to-int) (`RUF046`) - [`map-int-version-parsing`](https://docs.astral.sh/ruff/rules/map-int-version-parsing) (`RUF048`) - [`if-key-in-dict-del`](https://docs.astral.sh/ruff/rules/if-key-in-dict-del) (`RUF051`) - [`unsafe-markup-use`](https://docs.astral.sh/ruff/rules/unsafe-markup-use) (`S704`). This rule has also been renamed from `RUF035`. - [`split-static-string`](https://docs.astral.sh/ruff/rules/split-static-string) (`SIM905`) - [`runtime-cast-value`](https://docs.astral.sh/ruff/rules/runtime-cast-value) (`TC006`) - [`unquoted-type-alias`](https://docs.astral.sh/ruff/rules/unquoted-type-alias) (`TC007`) - [`non-pep646-unpack`](https://docs.astral.sh/ruff/rules/non-pep646-unpack) (`UP044`) The following behaviors have been stabilized: - [`bad-staticmethod-argument`](https://docs.astral.sh/ruff/rules/bad-staticmethod-argument/) (`PLW0211`) [`invalid-first-argument-name-for-class-method`](https://docs.astral.sh/ruff/rules/invalid-first-argument-name-for-class-method/) (`N804`): `__new__` methods are now no longer flagged by `invalid-first-argument-name-for-class-method` (`N804`) but instead by `bad-staticmethod-argument` (`PLW0211`) - [`bad-str-strip-call`](https://docs.astral.sh/ruff/rules/bad-str-strip-call/) (`PLE1310`): The rule now applies to objects which are known to have type `str` or `bytes`. - [`custom-type-var-for-self`](https://docs.astral.sh/ruff/rules/custom-type-var-for-self/) (`PYI019`): More accurate detection of custom `TypeVars` replaceable by `Self`. The range of the diagnostic is now the full function header rather than just the return annotation. - [`invalid-argument-name`](https://docs.astral.sh/ruff/rules/invalid-argument-name/) (`N803`): Ignore argument names of functions decorated with `typing.override` - [`invalid-envvar-default`](https://docs.astral.sh/ruff/rules/invalid-envvar-default/) (`PLW1508`): Detect default value arguments to `os.environ.get` with invalid type. - [`pytest-raises-with-multiple-statements`](https://docs.astral.sh/ruff/rules/pytest-raises-with-multiple-statements/) (`PT012`) [`pytest-warns-with-multiple-statements`](https://docs.astral.sh/ruff/rules/pytest-warns-with-multiple-statements/) (`PT031`): Allow `for` statements with an empty body in `pytest.raises` and `pytest.warns` `with` statements. - [`redundant-open-modes`](https://docs.astral.sh/ruff/rules/redundant-open-modes/) (`UP015`): The diagnostic range is now the range of the redundant mode argument where it previously was the range of the entire open call. You may have to replace your `noqa` comments when suppressing `UP015`. - [`stdlib-module-shadowing`](https://docs.astral.sh/ruff/rules/stdlib-module-shadowing/) (`A005`): Changes the default value of `lint.flake8-builtins.strict-checking` from `true` to `false`. - [`type-none-comparison`](https://docs.astral.sh/ruff/rules/type-none-comparison/) (`FURB169`): Now also recognizes `type(expr) is type(None)` comparisons where `expr` isn't a name expression. The following fixes or improvements to fixes have been stabilized: - [`repeated-equality-comparison`](https://docs.astral.sh/ruff/rules/repeated-equality-comparison/) (`PLR1714`) ([#&#8203;16685](https://github.com/astral-sh/ruff/pull/16685)) - [`needless-bool`](https://docs.astral.sh/ruff/rules/needless-bool/) (`SIM103`) ([#&#8203;16684](https://github.com/astral-sh/ruff/pull/16684)) - [`unused-private-type-var`](https://docs.astral.sh/ruff/rules/unused-private-type-var/) (`PYI018`) ([#&#8203;16682](https://github.com/astral-sh/ruff/pull/16682)) ##### Server - Remove logging output for `ruff.printDebugInformation` ([#&#8203;16617](https://github.com/astral-sh/ruff/pull/16617)) ##### Configuration - \[`flake8-builtins`] Deprecate the `builtins-` prefixed options in favor of the unprefixed options (e.g. `builtins-allowed-modules` is now deprecated in favor of `allowed-modules`) ([#&#8203;16092](https://github.com/astral-sh/ruff/pull/16092)) ##### Bug fixes - \[flake8-bandit] Fix mixed-case hash algorithm names (S324) ([#&#8203;16552](https://github.com/astral-sh/ruff/pull/16552)) ##### CLI - \[`ruff`] Fix `last_tag`/`commits_since_last_tag` for `version` command ([#&#8203;16686](https://github.com/astral-sh/ruff/pull/16686)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;ZedThree](https://github.com/ZedThree) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;jgeralnik](https://github.com/jgeralnik) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;sharkdp](https://github.com/sharkdp) #### Install ruff 0.10.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.10.0 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.10.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.10`](https://github.com/astral-sh/ruff/releases/tag/0.9.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.9...0.9.10) #### Release Notes ##### Preview features - \[`ruff`] Add new rule `RUF059`: Unused unpacked assignment ([#&#8203;16449](https://github.com/astral-sh/ruff/pull/16449)) - \[`syntax-errors`] Detect assignment expressions before Python 3.8 ([#&#8203;16383](https://github.com/astral-sh/ruff/pull/16383)) - \[`syntax-errors`] Named expressions in decorators before Python 3.9 ([#&#8203;16386](https://github.com/astral-sh/ruff/pull/16386)) - \[`syntax-errors`] Parenthesized keyword argument names after Python 3.8 ([#&#8203;16482](https://github.com/astral-sh/ruff/pull/16482)) - \[`syntax-errors`] Positional-only parameters before Python 3.8 ([#&#8203;16481](https://github.com/astral-sh/ruff/pull/16481)) - \[`syntax-errors`] Tuple unpacking in `return` and `yield` before Python 3.8 ([#&#8203;16485](https://github.com/astral-sh/ruff/pull/16485)) - \[`syntax-errors`] Type parameter defaults before Python 3.13 ([#&#8203;16447](https://github.com/astral-sh/ruff/pull/16447)) - \[`syntax-errors`] Type parameter lists before Python 3.12 ([#&#8203;16479](https://github.com/astral-sh/ruff/pull/16479)) - \[`syntax-errors`] `except*` before Python 3.11 ([#&#8203;16446](https://github.com/astral-sh/ruff/pull/16446)) - \[`syntax-errors`] `type` statements before Python 3.12 ([#&#8203;16478](https://github.com/astral-sh/ruff/pull/16478)) ##### Bug fixes - Escape template filenames in glob patterns in configuration ([#&#8203;16407](https://github.com/astral-sh/ruff/pull/16407)) - \[`flake8-simplify`] Exempt unittest context methods for `SIM115` rule ([#&#8203;16439](https://github.com/astral-sh/ruff/pull/16439)) - Formatter: Fix syntax error location in notebooks ([#&#8203;16499](https://github.com/astral-sh/ruff/pull/16499)) - \[`pyupgrade`] Do not offer fix when at least one target is `global`/`nonlocal` (`UP028`) ([#&#8203;16451](https://github.com/astral-sh/ruff/pull/16451)) - \[`flake8-builtins`] Ignore variables matching module attribute names (`A001`) ([#&#8203;16454](https://github.com/astral-sh/ruff/pull/16454)) - \[`pylint`] Convert `code` keyword argument to a positional argument in fix for (`PLR1722`) ([#&#8203;16424](https://github.com/astral-sh/ruff/pull/16424)) ##### CLI - Move rule code from `description` to `check_name` in GitLab output serializer ([#&#8203;16437](https://github.com/astral-sh/ruff/pull/16437)) ##### Documentation - \[`pydocstyle`] Clarify that `D417` only checks docstrings with an arguments section ([#&#8203;16494](https://github.com/astral-sh/ruff/pull/16494)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;adamchainz](https://github.com/adamchainz) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;ericmarkmartin](https://github.com/ericmarkmartin) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;mtshiba](https://github.com/mtshiba) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) #### Install ruff 0.9.10 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.10 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.9`](https://github.com/astral-sh/ruff/releases/tag/0.9.9) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.8...0.9.9) #### Release Notes ##### Preview features - Fix caching of unsupported-syntax errors ([#&#8203;16425](https://github.com/astral-sh/ruff/pull/16425)) ##### Bug fixes - Only show unsupported-syntax errors in editors when preview mode is enabled ([#&#8203;16429](https://github.com/astral-sh/ruff/pull/16429)) #### Contributors - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;ntBre](https://github.com/ntBre) #### Install ruff 0.9.9 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.9 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.9/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.8`](https://github.com/astral-sh/ruff/releases/tag/0.9.8) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.7...0.9.8) #### Release Notes ##### Preview features - Start detecting version-related syntax errors in the parser ([#&#8203;16090](https://github.com/astral-sh/ruff/pull/16090)) ##### Rule changes - \[`pylint`] Mark fix unsafe (`PLW1507`) ([#&#8203;16343](https://github.com/astral-sh/ruff/pull/16343)) - \[`pylint`] Catch `case np.nan`/`case math.nan` in `match` statements (`PLW0177`) ([#&#8203;16378](https://github.com/astral-sh/ruff/pull/16378)) - \[`ruff`] Add more Pydantic models variants to the list of default copy semantics (`RUF012`) ([#&#8203;16291](https://github.com/astral-sh/ruff/pull/16291)) ##### Server - Avoid indexing the project if `configurationPreference` is `editorOnly` ([#&#8203;16381](https://github.com/astral-sh/ruff/pull/16381)) - Avoid unnecessary info at non-trace server log level ([#&#8203;16389](https://github.com/astral-sh/ruff/pull/16389)) - Expand `ruff.configuration` to allow inline config ([#&#8203;16296](https://github.com/astral-sh/ruff/pull/16296)) - Notify users for invalid client settings ([#&#8203;16361](https://github.com/astral-sh/ruff/pull/16361)) ##### Configuration - Add `per-file-target-version` option ([#&#8203;16257](https://github.com/astral-sh/ruff/pull/16257)) ##### Bug fixes - \[`refurb`] Do not consider docstring(s) (`FURB156`) ([#&#8203;16391](https://github.com/astral-sh/ruff/pull/16391)) - \[`flake8-self`] Ignore attribute accesses on instance-like variables (`SLF001`) ([#&#8203;16149](https://github.com/astral-sh/ruff/pull/16149)) - \[`pylint`] Fix false positives, add missing methods, and support positional-only parameters (`PLE0302`) ([#&#8203;16263](https://github.com/astral-sh/ruff/pull/16263)) - \[`flake8-pyi`] Mark `PYI030` fix unsafe when comments are deleted ([#&#8203;16322](https://github.com/astral-sh/ruff/pull/16322)) ##### Documentation - Fix example for `S611` ([#&#8203;16316](https://github.com/astral-sh/ruff/pull/16316)) - Normalize inconsistent markdown headings in docstrings ([#&#8203;16364](https://github.com/astral-sh/ruff/pull/16364)) - Document MSRV policy ([#&#8203;16384](https://github.com/astral-sh/ruff/pull/16384)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;CNSeniorious000](https://github.com/CNSeniorious000) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;Viicos](https://github.com/Viicos) - [@&#8203;aripollak](https://github.com/aripollak) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcarrier](https://github.com/dcarrier) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.9.8 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.8 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.8/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.7`](https://github.com/astral-sh/ruff/releases/tag/0.9.7) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.6...0.9.7) #### Release Notes ##### Preview features - Consider `__new__` methods as special function type for enforcing class method or static method rules ([#&#8203;13305](https://github.com/astral-sh/ruff/pull/13305)) - \[`airflow`] Improve the internal logic to differentiate deprecated symbols (`AIR303`) ([#&#8203;16013](https://github.com/astral-sh/ruff/pull/16013)) - \[`refurb`] Manual timezone monkeypatching (`FURB162`) ([#&#8203;16113](https://github.com/astral-sh/ruff/pull/16113)) - \[`ruff`] Implicit class variable in dataclass (`RUF045`) ([#&#8203;14349](https://github.com/astral-sh/ruff/pull/14349)) - \[`ruff`] Skip singleton starred expressions for `incorrectly-parenthesized-tuple-in-subscript` (`RUF031`) ([#&#8203;16083](https://github.com/astral-sh/ruff/pull/16083)) - \[`refurb`] Check for subclasses includes subscript expressions (`FURB189`) ([#&#8203;16155](https://github.com/astral-sh/ruff/pull/16155)) ##### Rule changes - \[`flake8-debugger`] Also flag `sys.breakpointhook` and `sys.__breakpointhook__` (`T100`) ([#&#8203;16191](https://github.com/astral-sh/ruff/pull/16191)) - \[`pycodestyle`] Exempt `site.addsitedir(...)` calls (`E402`) ([#&#8203;16251](https://github.com/astral-sh/ruff/pull/16251)) ##### Formatter - Fix unstable formatting of trailing end-of-line comments of parenthesized attribute values ([#&#8203;16187](https://github.com/astral-sh/ruff/pull/16187)) ##### Server - Fix handling of requests received after shutdown message ([#&#8203;16262](https://github.com/astral-sh/ruff/pull/16262)) - Ignore `source.organizeImports.ruff` and `source.fixAll.ruff` code actions for a notebook cell ([#&#8203;16154](https://github.com/astral-sh/ruff/pull/16154)) - Include document specific debug info for `ruff.printDebugInformation` ([#&#8203;16215](https://github.com/astral-sh/ruff/pull/16215)) - Update server to return the debug info as string with `ruff.printDebugInformation` ([#&#8203;16214](https://github.com/astral-sh/ruff/pull/16214)) ##### CLI - Warn on invalid `noqa` even when there are no diagnostics ([#&#8203;16178](https://github.com/astral-sh/ruff/pull/16178)) - Better error messages while loading configuration `extend`s ([#&#8203;15658](https://github.com/astral-sh/ruff/pull/15658)) ##### Bug fixes - \[`flake8-comprehensions`] Handle trailing comma in `C403` fix ([#&#8203;16110](https://github.com/astral-sh/ruff/pull/16110)) - \[`flake8-pyi`] Avoid flagging `custom-typevar-for-self` on metaclass methods (`PYI019`) ([#&#8203;16141](https://github.com/astral-sh/ruff/pull/16141)) - \[`pydocstyle`] Handle arguments with the same names as sections (`D417`) ([#&#8203;16011](https://github.com/astral-sh/ruff/pull/16011)) - \[`pylint`] Correct ordering of arguments in fix for `if-stmt-min-max` (`PLR1730`) ([#&#8203;16080](https://github.com/astral-sh/ruff/pull/16080)) - \[`pylint`] Do not offer fix for raw strings (`PLE251`) ([#&#8203;16132](https://github.com/astral-sh/ruff/pull/16132)) - \[`pyupgrade`] Do not upgrade functional `TypedDicts` with private field names to the class-based syntax (`UP013`) ([#&#8203;16219](https://github.com/astral-sh/ruff/pull/16219)) - \[`pyupgrade`] Handle micro version numbers correctly (`UP036`) ([#&#8203;16091](https://github.com/astral-sh/ruff/pull/16091)) - \[`pyupgrade`] Unwrap unary expressions correctly (`UP018`) ([#&#8203;15919](https://github.com/astral-sh/ruff/pull/15919)) - \[`refurb`] Correctly handle lengths of literal strings in `slice-to-remove-prefix-or-suffix` (`FURB188`) ([#&#8203;16237](https://github.com/astral-sh/ruff/pull/16237)) - \[`ruff`] Skip `RUF001` diagnostics when visiting string type definitions ([#&#8203;16122](https://github.com/astral-sh/ruff/pull/16122)) ##### Documentation - Add FAQ entry for `source.*` code actions in Notebook ([#&#8203;16212](https://github.com/astral-sh/ruff/pull/16212)) - Add `SECURITY.md` ([#&#8203;16224](https://github.com/astral-sh/ruff/pull/16224)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Skylion007](https://github.com/Skylion007) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;ayushbaweja](https://github.com/ayushbaweja) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;purajit](https://github.com/purajit) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;sobolevn](https://github.com/sobolevn) - [@&#8203;vladNed](https://github.com/vladNed) #### Install ruff 0.9.7 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.7 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.7/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.6`](https://github.com/astral-sh/ruff/releases/tag/0.9.6) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.5...0.9.6) #### Release Notes ##### Preview features - \[`airflow`] Add `external_task.{ExternalTaskMarker, ExternalTaskSensor}` for `AIR302` ([#&#8203;16014](https://github.com/astral-sh/ruff/pull/16014)) - \[`flake8-builtins`] Make strict module name comparison optional (`A005`) ([#&#8203;15951](https://github.com/astral-sh/ruff/pull/15951)) - \[`flake8-pyi`] Extend fix to Python <= 3.9 for `redundant-none-literal` (`PYI061`) ([#&#8203;16044](https://github.com/astral-sh/ruff/pull/16044)) - \[`pylint`] Also report when the object isn't a literal (`PLE1310`) ([#&#8203;15985](https://github.com/astral-sh/ruff/pull/15985)) - \[`ruff`] Implement `indented-form-feed` (`RUF054`) ([#&#8203;16049](https://github.com/astral-sh/ruff/pull/16049)) - \[`ruff`] Skip type definitions for `missing-f-string-syntax` (`RUF027`) ([#&#8203;16054](https://github.com/astral-sh/ruff/pull/16054)) ##### Rule changes - \[`flake8-annotations`] Correct syntax for `typing.Union` in suggested return type fixes for `ANN20x` rules ([#&#8203;16025](https://github.com/astral-sh/ruff/pull/16025)) - \[`flake8-builtins`] Match upstream module name comparison (`A005`) ([#&#8203;16006](https://github.com/astral-sh/ruff/pull/16006)) - \[`flake8-comprehensions`] Detect overshadowed `list`/`set`/`dict`, ignore variadics and named expressions (`C417`) ([#&#8203;15955](https://github.com/astral-sh/ruff/pull/15955)) - \[`flake8-pie`] Remove following comma correctly when the unpacked dictionary is empty (`PIE800`) ([#&#8203;16008](https://github.com/astral-sh/ruff/pull/16008)) - \[`flake8-simplify`] Only trigger `SIM401` on known dictionaries ([#&#8203;15995](https://github.com/astral-sh/ruff/pull/15995)) - \[`pylint`] Do not report calls when object type and argument type mismatch, remove custom escape handling logic (`PLE1310`) ([#&#8203;15984](https://github.com/astral-sh/ruff/pull/15984)) - \[`pyupgrade`] Comments within parenthesized value ranges should not affect applicability (`UP040`) ([#&#8203;16027](https://github.com/astral-sh/ruff/pull/16027)) - \[`pyupgrade`] Don't introduce invalid syntax when upgrading old-style type aliases with parenthesized multiline values (`UP040`) ([#&#8203;16026](https://github.com/astral-sh/ruff/pull/16026)) - \[`pyupgrade`] Ensure we do not rename two type parameters to the same name (`UP049`) ([#&#8203;16038](https://github.com/astral-sh/ruff/pull/16038)) - \[`pyupgrade`] \[`ruff`] Don't apply renamings if the new name is shadowed in a scope of one of the references to the binding (`UP049`, `RUF052`) ([#&#8203;16032](https://github.com/astral-sh/ruff/pull/16032)) - \[`ruff`] Update `RUF009` to behave similar to `B008` and ignore attributes with immutable types ([#&#8203;16048](https://github.com/astral-sh/ruff/pull/16048)) ##### Server - Root exclusions in the server to project root ([#&#8203;16043](https://github.com/astral-sh/ruff/pull/16043)) ##### Bug fixes - \[`flake8-datetime`] Ignore `.replace()` calls while looking for `.astimezone` ([#&#8203;16050](https://github.com/astral-sh/ruff/pull/16050)) - \[`flake8-type-checking`] Avoid `TC004` false positive where the runtime definition is provided by `__getattr__` ([#&#8203;16052](https://github.com/astral-sh/ruff/pull/16052)) ##### Documentation - Improve `ruff-lsp` migration document ([#&#8203;16072](https://github.com/astral-sh/ruff/pull/16072)) - Undeprecate `ruff.nativeServer` ([#&#8203;16039](https://github.com/astral-sh/ruff/pull/16039)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;carlosgmartin](https://github.com/carlosgmartin) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;junhsonjb](https://github.com/junhsonjb) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;smokyabdulrahman](https://github.com/smokyabdulrahman) #### Install ruff 0.9.6 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.6 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.6/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.5`](https://github.com/astral-sh/ruff/releases/tag/0.9.5) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.4...0.9.5) #### Release Notes ##### Preview features - Recognize all symbols named `TYPE_CHECKING` for `in_type_checking_block` ([#&#8203;15719](https://github.com/astral-sh/ruff/pull/15719)) - \[`flake8-comprehensions`] Handle builtins at top of file correctly for `unnecessary-dict-comprehension-for-iterable` (`C420`) ([#&#8203;15837](https://github.com/astral-sh/ruff/pull/15837)) - \[`flake8-logging`] `.exception()` and `exc_info=` outside exception handlers (`LOG004`, `LOG014`) ([#&#8203;15799](https://github.com/astral-sh/ruff/pull/15799)) - \[`flake8-pyi`] Fix incorrect behaviour of `custom-typevar-return-type` preview-mode autofix if `typing` was already imported (`PYI019`) ([#&#8203;15853](https://github.com/astral-sh/ruff/pull/15853)) - \[`flake8-pyi`] Fix more complex cases (`PYI019`) ([#&#8203;15821](https://github.com/astral-sh/ruff/pull/15821)) - \[`flake8-pyi`] Make `PYI019` autofixable for `.py` files in preview mode as well as stubs ([#&#8203;15889](https://github.com/astral-sh/ruff/pull/15889)) - \[`flake8-pyi`] Remove type parameter correctly when it is the last (`PYI019`) ([#&#8203;15854](https://github.com/astral-sh/ruff/pull/15854)) - \[`pylint`] Fix missing parens in unsafe fix for `unnecessary-dunder-call` (`PLC2801`) ([#&#8203;15762](https://github.com/astral-sh/ruff/pull/15762)) - \[`pyupgrade`] Better messages and diagnostic range (`UP015`) ([#&#8203;15872](https://github.com/astral-sh/ruff/pull/15872)) - \[`pyupgrade`] Rename private type parameters in PEP 695 generics (`UP049`) ([#&#8203;15862](https://github.com/astral-sh/ruff/pull/15862)) - \[`refurb`] Also report non-name expressions (`FURB169`) ([#&#8203;15905](https://github.com/astral-sh/ruff/pull/15905)) - \[`refurb`] Mark fix as unsafe if there are comments (`FURB171`) ([#&#8203;15832](https://github.com/astral-sh/ruff/pull/15832)) - \[`ruff`] Classes with mixed type variable style (`RUF053`) ([#&#8203;15841](https://github.com/astral-sh/ruff/pull/15841)) - \[`airflow`] `BashOperator` has been moved to `airflow.providers.standard.operators.bash.BashOperator` (`AIR302`) ([#&#8203;15922](https://github.com/astral-sh/ruff/pull/15922)) - \[`flake8-pyi`] Add autofix for unused-private-type-var (`PYI018`) ([#&#8203;15999](https://github.com/astral-sh/ruff/pull/15999)) - \[`flake8-pyi`] Significantly improve accuracy of `PYI019` if preview mode is enabled ([#&#8203;15888](https://github.com/astral-sh/ruff/pull/15888)) ##### Rule changes - Preserve triple quotes and prefixes for strings ([#&#8203;15818](https://github.com/astral-sh/ruff/pull/15818)) - \[`flake8-comprehensions`] Skip when `TypeError` present from too many (kw)args for `C410`,`C411`, and `C418` ([#&#8203;15838](https://github.com/astral-sh/ruff/pull/15838)) - \[`flake8-pyi`] Rename `PYI019` and improve its diagnostic message ([#&#8203;15885](https://github.com/astral-sh/ruff/pull/15885)) - \[`pep8-naming`] Ignore `@override` methods (`N803`) ([#&#8203;15954](https://github.com/astral-sh/ruff/pull/15954)) - \[`pyupgrade`] Reuse replacement logic from `UP046` and `UP047` to preserve more comments (`UP040`) ([#&#8203;15840](https://github.com/astral-sh/ruff/pull/15840)) - \[`ruff`] Analyze deferred annotations before enforcing `mutable-(data)class-default` and `function-call-in-dataclass-default-argument` (`RUF008`,`RUF009`,`RUF012`) ([#&#8203;15921](https://github.com/astral-sh/ruff/pull/15921)) - \[`pycodestyle`] Exempt `sys.path += ...` calls (`E402`) ([#&#8203;15980](https://github.com/astral-sh/ruff/pull/15980)) ##### Configuration - Config error only when `flake8-import-conventions` alias conflicts with `isort.required-imports` bound name ([#&#8203;15918](https://github.com/astral-sh/ruff/pull/15918)) - Workaround Even Better TOML crash related to `allOf` ([#&#8203;15992](https://github.com/astral-sh/ruff/pull/15992)) ##### Bug fixes - \[`flake8-comprehensions`] Unnecessary `list` comprehension (rewrite as a `set` comprehension) (`C403`) - Handle extraneous parentheses around list comprehension ([#&#8203;15877](https://github.com/astral-sh/ruff/pull/15877)) - \[`flake8-comprehensions`] Handle trailing comma in fixes for `unnecessary-generator-list/set` (`C400`,`C401`) ([#&#8203;15929](https://github.com/astral-sh/ruff/pull/15929)) - \[`flake8-pyi`] Fix several correctness issues with `custom-type-var-return-type` (`PYI019`) ([#&#8203;15851](https://github.com/astral-sh/ruff/pull/15851)) - \[`pep8-naming`] Consider any number of leading underscore for `N801` ([#&#8203;15988](https://github.com/astral-sh/ruff/pull/15988)) - \[`pyflakes`] Visit forward annotations in `TypeAliasType` as types (`F401`) ([#&#8203;15829](https://github.com/astral-sh/ruff/pull/15829)) - \[`pylint`] Correct min/max auto-fix and suggestion for (`PL1730`) ([#&#8203;15930](https://github.com/astral-sh/ruff/pull/15930)) - \[`refurb`] Handle unparenthesized tuples correctly (`FURB122`, `FURB142`) ([#&#8203;15953](https://github.com/astral-sh/ruff/pull/15953)) - \[`refurb`] Avoid `None | None` as well as better detection and fix (`FURB168`) ([#&#8203;15779](https://github.com/astral-sh/ruff/pull/15779)) ##### Documentation - Add deprecation warning for `ruff-lsp` related settings ([#&#8203;15850](https://github.com/astral-sh/ruff/pull/15850)) - Docs (`linter.md`): clarify that Python files are always searched for in subdirectories ([#&#8203;15882](https://github.com/astral-sh/ruff/pull/15882)) - Fix a typo in `non_pep695_generic_class.rs` ([#&#8203;15946](https://github.com/astral-sh/ruff/pull/15946)) - Improve Docs: Pylint subcategories' codes ([#&#8203;15909](https://github.com/astral-sh/ruff/pull/15909)) - Remove non-existing `lint.extendIgnore` editor setting ([#&#8203;15844](https://github.com/astral-sh/ruff/pull/15844)) - Update black deviations ([#&#8203;15928](https://github.com/astral-sh/ruff/pull/15928)) - Mention `UP049` in `UP046` and `UP047`, add `See also` section to `UP040` ([#&#8203;15956](https://github.com/astral-sh/ruff/pull/15956)) - Add instance variable examples to `RUF012` ([#&#8203;15982](https://github.com/astral-sh/ruff/pull/15982)) - Explain precedence for `ignore` and `select` config ([#&#8203;15883](https://github.com/astral-sh/ruff/pull/15883)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;RayBB](https://github.com/RayBB) - [@&#8203;VascoSch92](https://github.com/VascoSch92) - [@&#8203;anordin95](https://github.com/anordin95) - [@&#8203;ayushbaweja](https://github.com/ayushbaweja) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;github-actions](https://github.com/github-actions) - [@&#8203;jbramley](https://github.com/jbramley) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;tjkuson](https://github.com/tjkuson) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.9.5 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.5 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.5/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.4`](https://github.com/astral-sh/ruff/releases/tag/0.9.4) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.3...0.9.4) #### Release Notes ##### Preview features - \[`airflow`] Extend airflow context parameter check for `BaseOperator.execute` (`AIR302`) ([#&#8203;15713](https://github.com/astral-sh/ruff/pull/15713)) - \[`airflow`] Update `AIR302` to check for deprecated context keys ([#&#8203;15144](https://github.com/astral-sh/ruff/pull/15144)) - \[`flake8-bandit`] Permit suspicious imports within stub files (`S4`) ([#&#8203;15822](https://github.com/astral-sh/ruff/pull/15822)) - \[`pylint`] Do not trigger `PLR6201` on empty collections ([#&#8203;15732](https://github.com/astral-sh/ruff/pull/15732)) - \[`refurb`] Do not emit diagnostic when loop variables are used outside loop body (`FURB122`) ([#&#8203;15757](https://github.com/astral-sh/ruff/pull/15757)) - \[`ruff`] Add support for more `re` patterns (`RUF055`) ([#&#8203;15764](https://github.com/astral-sh/ruff/pull/15764)) - \[`ruff`] Check for shadowed `map` before suggesting fix (`RUF058`) ([#&#8203;15790](https://github.com/astral-sh/ruff/pull/15790)) - \[`ruff`] Do not emit diagnostic when all arguments to `zip()` are variadic (`RUF058`) ([#&#8203;15744](https://github.com/astral-sh/ruff/pull/15744)) - \[`ruff`] Parenthesize fix when argument spans multiple lines for `unnecessary-round` (`RUF057`) ([#&#8203;15703](https://github.com/astral-sh/ruff/pull/15703)) ##### Rule changes - Preserve quote style in generated code ([#&#8203;15726](https://github.com/astral-sh/ruff/pull/15726), [#&#8203;15778](https://github.com/astral-sh/ruff/pull/15778), [#&#8203;15794](https://github.com/astral-sh/ruff/pull/15794)) - \[`flake8-bugbear`] Exempt `NewType` calls where the original type is immutable (`B008`) ([#&#8203;15765](https://github.com/astral-sh/ruff/pull/15765)) - \[`pylint`] Honor banned top-level imports by `TID253` in `PLC0415`. ([#&#8203;15628](https://github.com/astral-sh/ruff/pull/15628)) - \[`pyupgrade`] Ignore `is_typeddict` and `TypedDict` for `deprecated-import` (`UP035`) ([#&#8203;15800](https://github.com/astral-sh/ruff/pull/15800)) ##### CLI - Fix formatter warning message for `flake8-quotes` option ([#&#8203;15788](https://github.com/astral-sh/ruff/pull/15788)) - Implement tab autocomplete for `ruff config` ([#&#8203;15603](https://github.com/astral-sh/ruff/pull/15603)) ##### Bug fixes - \[`flake8-comprehensions`] Do not emit `unnecessary-map` diagnostic when lambda has different arity (`C417`) ([#&#8203;15802](https://github.com/astral-sh/ruff/pull/15802)) - \[`flake8-comprehensions`] Parenthesize `sorted` when needed for `unnecessary-call-around-sorted` (`C413`) ([#&#8203;15825](https://github.com/astral-sh/ruff/pull/15825)) - \[`pyupgrade`] Handle end-of-line comments for `quoted-annotation` (`UP037`) ([#&#8203;15824](https://github.com/astral-sh/ruff/pull/15824)) ##### Documentation - Add missing config docstrings ([#&#8203;15803](https://github.com/astral-sh/ruff/pull/15803)) - Add references to `trio.run_process` and `anyio.run_process` ([#&#8203;15761](https://github.com/astral-sh/ruff/pull/15761)) - Use `uv init --lib` in tutorial ([#&#8203;15718](https://github.com/astral-sh/ruff/pull/15718)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Garrett-R](https://github.com/Garrett-R) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;leotaku](https://github.com/leotaku) - [@&#8203;marekhanus](https://github.com/marekhanus) - [@&#8203;mishamsk](https://github.com/mishamsk) - [@&#8203;naslundx](https://github.com/naslundx) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;sunank200](https://github.com/sunank200) - [@&#8203;tjkuson](https://github.com/tjkuson) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.9.4 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.4 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.4/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.3`](https://github.com/astral-sh/ruff/releases/tag/0.9.3) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.2...0.9.3) #### Release Notes ##### Preview features - \[`airflow`] Argument `fail_stop` in DAG has been renamed as `fail_fast` (`AIR302`) ([#&#8203;15633](https://github.com/astral-sh/ruff/pull/15633)) - \[`airflow`] Extend `AIR303` with more symbols ([#&#8203;15611](https://github.com/astral-sh/ruff/pull/15611)) - \[`flake8-bandit`] Report all references to suspicious functions (`S3`) ([#&#8203;15541](https://github.com/astral-sh/ruff/pull/15541)) - \[`flake8-pytest-style`] Do not emit diagnostics for empty `for` loops (`PT012`, `PT031`) ([#&#8203;15542](https://github.com/astral-sh/ruff/pull/15542)) - \[`flake8-simplify`] Avoid double negations (`SIM103`) ([#&#8203;15562](https://github.com/astral-sh/ruff/pull/15562)) - \[`pyflakes`] Fix infinite loop with unused local import in `__init__.py` (`F401`) ([#&#8203;15517](https://github.com/astral-sh/ruff/pull/15517)) - \[`pylint`] Do not report methods with only one `EM101`-compatible `raise` (`PLR6301`) ([#&#8203;15507](https://github.com/astral-sh/ruff/pull/15507)) - \[`pylint`] Implement `redefined-slots-in-subclass` (`W0244`) ([#&#8203;9640](https://github.com/astral-sh/ruff/pull/9640)) - \[`pyupgrade`] Add rules to use PEP 695 generics in classes and functions (`UP046`, `UP047`) ([#&#8203;15565](https://github.com/astral-sh/ruff/pull/15565), [#&#8203;15659](https://github.com/astral-sh/ruff/pull/15659)) - \[`refurb`] Implement `for-loop-writes` (`FURB122`) ([#&#8203;10630](https://github.com/astral-sh/ruff/pull/10630)) - \[`ruff`] Implement `needless-else` clause (`RUF047`) ([#&#8203;15051](https://github.com/astral-sh/ruff/pull/15051)) - \[`ruff`] Implement `starmap-zip` (`RUF058`) ([#&#8203;15483](https://github.com/astral-sh/ruff/pull/15483)) ##### Rule changes - \[`flake8-bugbear`] Do not raise error if keyword argument is present and target-python version is less or equals than 3.9 (`B903`) ([#&#8203;15549](https://github.com/astral-sh/ruff/pull/15549)) - \[`flake8-comprehensions`] strip parentheses around generators in `unnecessary-generator-set` (`C401`) ([#&#8203;15553](https://github.com/astral-sh/ruff/pull/15553)) - \[`flake8-pytest-style`] Rewrite references to `.exception` (`PT027`) ([#&#8203;15680](https://github.com/astral-sh/ruff/pull/15680)) - \[`flake8-simplify`] Mark fixes as unsafe (`SIM201`, `SIM202`) ([#&#8203;15626](https://github.com/astral-sh/ruff/pull/15626)) - \[`flake8-type-checking`] Fix some safe fixes being labeled unsafe (`TC006`,`TC008`) ([#&#8203;15638](https://github.com/astral-sh/ruff/pull/15638)) - \[`isort`] Omit trailing whitespace in `unsorted-imports` (`I001`) ([#&#8203;15518](https://github.com/astral-sh/ruff/pull/15518)) - \[`pydoclint`] Allow ignoring one line docstrings for `DOC` rules ([#&#8203;13302](https://github.com/astral-sh/ruff/pull/13302)) - \[`pyflakes`] Apply redefinition fixes by source code order (`F811`) ([#&#8203;15575](https://github.com/astral-sh/ruff/pull/15575)) - \[`pyflakes`] Avoid removing too many imports in `redefined-while-unused` (`F811`) ([#&#8203;15585](https://github.com/astral-sh/ruff/pull/15585)) - \[`pyflakes`] Group redefinition fixes by source statement (`F811`) ([#&#8203;15574](https://github.com/astral-sh/ruff/pull/15574)) - \[`pylint`] Include name of base class in message for `redefined-slots-in-subclass` (`W0244`) ([#&#8203;15559](https://github.com/astral-sh/ruff/pull/15559)) - \[`ruff`] Update fix for `RUF055` to use `var == value` ([#&#8203;15605](https://github.com/astral-sh/ruff/pull/15605)) ##### Formatter - Fix bracket spacing for single-element tuples in f-string expressions ([#&#8203;15537](https://github.com/astral-sh/ruff/pull/15537)) - Fix unstable f-string formatting for expressions containing a trailing comma ([#&#8203;15545](https://github.com/astral-sh/ruff/pull/15545)) ##### Performance - Avoid quadratic membership check in import fixes ([#&#8203;15576](https://github.com/astral-sh/ruff/pull/15576)) ##### Server - Allow `unsafe-fixes` settings for code actions ([#&#8203;15666](https://github.com/astral-sh/ruff/pull/15666)) ##### Bug fixes - \[`flake8-bandit`] Add missing single-line/dotall regex flag (`S608`) ([#&#8203;15654](https://github.com/astral-sh/ruff/pull/15654)) - \[`flake8-import-conventions`] Fix infinite loop between `ICN001` and `I002` (`ICN001`) ([#&#8203;15480](https://github.com/astral-sh/ruff/pull/15480)) - \[`flake8-simplify`] Do not emit diagnostics for expressions inside string type annotations (`SIM222`, `SIM223`) ([#&#8203;15405](https://github.com/astral-sh/ruff/pull/15405)) - \[`pyflakes`] Treat arguments passed to the `default=` parameter of `TypeVar` as type expressions (`F821`) ([#&#8203;15679](https://github.com/astral-sh/ruff/pull/15679)) - \[`pyupgrade`] Avoid syntax error when the iterable is a non-parenthesized tuple (`UP028`) ([#&#8203;15543](https://github.com/astral-sh/ruff/pull/15543)) - \[`ruff`] Exempt `NewType` calls where the original type is immutable (`RUF009`) ([#&#8203;15588](https://github.com/astral-sh/ruff/pull/15588)) - Preserve raw string prefix and escapes in all codegen fixes ([#&#8203;15694](https://github.com/astral-sh/ruff/pull/15694)) ##### Documentation - Generate documentation redirects for lowercase rule codes ([#&#8203;15564](https://github.com/astral-sh/ruff/pull/15564)) - `TRY300`: Add some extra notes on not catching exceptions you didn't expect ([#&#8203;15036](https://github.com/astral-sh/ruff/pull/15036)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;alex-700](https://github.com/alex-700) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;calumy](https://github.com/calumy) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;guillaumeLepape](https://github.com/guillaumeLepape) - [@&#8203;kiran-4444](https://github.com/kiran-4444) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;tsugumi-sys](https://github.com/tsugumi-sys) - [@&#8203;wlach](https://github.com/wlach) - [@&#8203;wooly18](https://github.com/wooly18) - [@&#8203;zanieb](https://github.com/zanieb) #### Install ruff 0.9.3 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.3 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.3/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.2`](https://github.com/astral-sh/ruff/releases/tag/0.9.2) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.1...0.9.2) #### Release Notes ##### Preview features - \[`airflow`] Fix typo "security\_managr" to "security\_manager" (`AIR303`) ([#&#8203;15463](https://github.com/astral-sh/ruff/pull/15463)) - \[`airflow`] extend and fix AIR302 rules ([#&#8203;15525](https://github.com/astral-sh/ruff/pull/15525)) - \[`fastapi`] Handle parameters with `Depends` correctly (`FAST003`) ([#&#8203;15364](https://github.com/astral-sh/ruff/pull/15364)) - \[`flake8-pytest-style`] Implement pytest.warns diagnostics (`PT029`, `PT030`, `PT031`) ([#&#8203;15444](https://github.com/astral-sh/ruff/pull/15444)) - \[`flake8-pytest-style`] Test function parameters with default arguments (`PT028`) ([#&#8203;15449](https://github.com/astral-sh/ruff/pull/15449)) - \[`flake8-type-checking`] Avoid false positives for `|` in `TC008` ([#&#8203;15201](https://github.com/astral-sh/ruff/pull/15201)) ##### Rule changes - \[`flake8-todos`] Allow VSCode GitHub PR extension style links in `missing-todo-link` (`TD003`) ([#&#8203;15519](https://github.com/astral-sh/ruff/pull/15519)) - \[`pyflakes`] Show syntax error message for `F722` ([#&#8203;15523](https://github.com/astral-sh/ruff/pull/15523)) ##### Formatter - Fix curly bracket spacing around f-string expressions containing curly braces ([#&#8203;15471](https://github.com/astral-sh/ruff/pull/15471)) - Fix joining of f-strings with different quotes when using quote style `Preserve` ([#&#8203;15524](https://github.com/astral-sh/ruff/pull/15524)) ##### Server - Avoid indexing the same workspace multiple times ([#&#8203;15495](https://github.com/astral-sh/ruff/pull/15495)) - Display context for `ruff.configuration` errors ([#&#8203;15452](https://github.com/astral-sh/ruff/pull/15452)) ##### Configuration - Remove `flatten` to improve deserialization error messages ([#&#8203;15414](https://github.com/astral-sh/ruff/pull/15414)) ##### Bug fixes - Parse triple-quoted string annotations as if parenthesized ([#&#8203;15387](https://github.com/astral-sh/ruff/pull/15387)) - \[`fastapi`] Update `Annotated` fixes (`FAST002`) ([#&#8203;15462](https://github.com/astral-sh/ruff/pull/15462)) - \[`flake8-bandit`] Check for `builtins` instead of `builtin` (`S102`, `PTH123`) ([#&#8203;15443](https://github.com/astral-sh/ruff/pull/15443)) - \[`flake8-pathlib`] Fix `--select` for `os-path-dirname` (`PTH120`) ([#&#8203;15446](https://github.com/astral-sh/ruff/pull/15446)) - \[`ruff`] Fix false positive on global keyword (`RUF052`) ([#&#8203;15235](https://github.com/astral-sh/ruff/pull/15235)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;BurntSushi](https://github.com/BurntSushi) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;Garrett-R](https://github.com/Garrett-R) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;Lee-W](https://github.com/Lee-W) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;cake-monotone](https://github.com/cake-monotone) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;tjkuson](https://github.com/tjkuson) #### Install ruff 0.9.2 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.2 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.2/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.1`](https://github.com/astral-sh/ruff/releases/tag/0.9.1) [Compare Source](https://github.com/astral-sh/ruff/compare/0.9.0...0.9.1) #### Release Notes ##### Preview features - \[`pycodestyle`] Run `too-many-newlines-at-end-of-file` on each cell in notebooks (`W391`) ([#&#8203;15308](https://github.com/astral-sh/ruff/pull/15308)) - \[`ruff`] Omit diagnostic for shadowed private function parameters in `used-dummy-variable` (`RUF052`) ([#&#8203;15376](https://github.com/astral-sh/ruff/pull/15376)) ##### Rule changes - \[`flake8-bugbear`] Improve `assert-raises-exception` message (`B017`) ([#&#8203;15389](https://github.com/astral-sh/ruff/pull/15389)) ##### Formatter - Preserve trailing end-of line comments for the last string literal in implicitly concatenated strings ([#&#8203;15378](https://github.com/astral-sh/ruff/pull/15378)) ##### Server - Fix a bug where the server and client notebooks were out of sync after reordering cells ([#&#8203;15398](https://github.com/astral-sh/ruff/pull/15398)) ##### Bug fixes - \[`flake8-pie`] Correctly remove wrapping parentheses (`PIE800`) ([#&#8203;15394](https://github.com/astral-sh/ruff/pull/15394)) - \[`pyupgrade`] Handle comments and multiline expressions correctly (`UP037`) ([#&#8203;15337](https://github.com/astral-sh/ruff/pull/15337)) #### Contributors - [@&#8203;AntoineD](https://github.com/AntoineD) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;calumy](https://github.com/calumy) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;tjkuson](https://github.com/tjkuson) #### Install ruff 0.9.1 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.1 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.1/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ### [`v0.9.0`](https://github.com/astral-sh/ruff/releases/tag/0.9.0) [Compare Source](https://github.com/astral-sh/ruff/compare/0.8.6...0.9.0) #### Release Notes Check out the [blog post](https://astral.sh/blog/ruff-v0.9.0) for a migration guide and overview of the changes! ##### Breaking changes Ruff now formats your code according to the 2025 style guide. As a result, your code might now get formatted differently. See the formatter section for a detailed list of changes. This release doesn’t remove or remap any existing stable rules. ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`stdlib-module-shadowing`](https://docs.astral.sh/ruff/rules/stdlib-module-shadowing/) (`A005`). This rule has also been renamed: previously, it was called `builtin-module-shadowing`. - [`builtin-lambda-argument-shadowing`](https://docs.astral.sh/ruff/rules/builtin-lambda-argument-shadowing/) (`A006`) - [`slice-to-remove-prefix-or-suffix`](https://docs.astral.sh/ruff/rules/slice-to-remove-prefix-or-suffix/) (`FURB188`) - [`boolean-chained-comparison`](https://docs.astral.sh/ruff/rules/boolean-chained-comparison/) (`PLR1716`) - [`decimal-from-float-literal`](https://docs.astral.sh/ruff/rules/decimal-from-float-literal/) (`RUF032`) - [`post-init-default`](https://docs.astral.sh/ruff/rules/post-init-default/) (`RUF033`) - [`useless-if-else`](https://docs.astral.sh/ruff/rules/useless-if-else/) (`RUF034`) The following behaviors have been stabilized: - [`pytest-parametrize-names-wrong-type`](https://docs.astral.sh/ruff/rules/pytest-parametrize-names-wrong-type/) (`PT006`): Detect [`pytest.parametrize`](https://docs.pytest.org/en/7.1.x/how-to/parametrize.html#parametrize) calls outside decorators and calls with keyword arguments. - [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file/) (`E402`): Ignore [`pytest.importorskip`](https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest-importorskip) calls between import statements. - [`mutable-dataclass-default`](https://docs.astral.sh/ruff/rules/mutable-dataclass-default/) (`RUF008`) and [`function-call-in-dataclass-default-argument`](https://docs.astral.sh/ruff/rules/function-call-in-dataclass-default-argument/) (`RUF009`): Add support for [`attrs`](https://www.attrs.org/en/stable/). - [`bad-version-info-comparison`](https://docs.astral.sh/ruff/rules/bad-version-info-comparison/) (`PYI006`): Extend the rule to check non-stub files. The following fixes or improvements to fixes have been stabilized: - [`redundant-numeric-union`](https://docs.astral.sh/ruff/rules/redundant-numeric-union/) (`PYI041`) - [`duplicate-union-members`](https://docs.astral.sh/ruff/rules/duplicate-union-member/) (`PYI016`) ##### Formatter This release introduces the new 2025 stable style ([#&#8203;13371](https://github.com/astral-sh/ruff/issues/13371)), stabilizing the following changes: - Format expressions in f-string elements ([#&#8203;7594](https://github.com/astral-sh/ruff/issues/7594)) - Alternate quotes for strings inside f-strings ([#&#8203;13860](https://github.com/astral-sh/ruff/pull/13860)) - Preserve the casing of hex codes in f-string debug expressions ([#&#8203;14766](https://github.com/astral-sh/ruff/issues/14766)) - Choose the quote style for each string literal in an implicitly concatenated f-string rather than for the entire string ([#&#8203;13539](https://github.com/astral-sh/ruff/pull/13539)) - Automatically join an implicitly concatenated string into a single string literal if it fits on a single line ([#&#8203;9457](https://github.com/astral-sh/ruff/issues/9457)) - Remove the [`ISC001`](https://docs.astral.sh/ruff/rules/single-line-implicit-string-concatenation/) incompatibility warning ([#&#8203;15123](https://github.com/astral-sh/ruff/pull/15123)) - Prefer parenthesizing the `assert` message over breaking the assertion expression ([#&#8203;9457](https://github.com/astral-sh/ruff/issues/9457)) - Automatically parenthesize over-long `if` guards in `match` `case` clauses ([#&#8203;13513](https://github.com/astral-sh/ruff/pull/13513)) - More consistent formatting for `match` `case` patterns ([#&#8203;6933](https://github.com/astral-sh/ruff/issues/6933)) - Avoid unnecessary parentheses around return type annotations ([#&#8203;13381](https://github.com/astral-sh/ruff/pull/13381)) - Keep the opening parentheses on the same line as the `if` keyword for comprehensions where the condition has a leading comment ([#&#8203;12282](https://github.com/astral-sh/ruff/pull/12282)) - More consistent formatting for `with` statements with a single context manager for Python 3.8 or older ([#&#8203;10276](https://github.com/astral-sh/ruff/pull/10276)) - Correctly calculate the line-width for code blocks in docstrings when using `max-doc-code-line-length = "dynamic"` ([#&#8203;13523](https://github.com/astral-sh/ruff/pull/13523)) ##### Preview features - \[`flake8-bugbear`] Implement `class-as-data-structure` (`B903`) ([#&#8203;9601](https://github.com/astral-sh/ruff/pull/9601)) - \[`flake8-type-checking`] Apply `quoted-type-alias` more eagerly in `TYPE_CHECKING` blocks and ignore it in stubs (`TC008`) ([#&#8203;15180](https://github.com/astral-sh/ruff/pull/15180)) - \[`pylint`] Ignore `eq-without-hash` in stub files (`PLW1641`) ([#&#8203;15310](https://github.com/astral-sh/ruff/pull/15310)) - \[`pyupgrade`] Split `UP007` into two individual rules: `UP007` for `Union` and `UP045` for `Optional` (`UP007`, `UP045`) ([#&#8203;15313](https://github.com/astral-sh/ruff/pull/15313)) - \[`ruff`] New rule that detects classes that are both an enum and a `dataclass` (`RUF049`) ([#&#8203;15299](https://github.com/astral-sh/ruff/pull/15299)) - \[`ruff`] Recode `RUF025` to `RUF037` (`RUF037`) ([#&#8203;15258](https://github.com/astral-sh/ruff/pull/15258)) ##### Rule changes - \[`flake8-builtins`] Ignore [`stdlib-module-shadowing`](https://docs.astral.sh/ruff/rules/stdlib-module-shadowing/) in stub files(`A005`) ([#&#8203;15350](https://github.com/astral-sh/ruff/pull/15350)) - \[`flake8-return`] Add support for functions returning `typing.Never` (`RET503`) ([#&#8203;15298](https://github.com/astral-sh/ruff/pull/15298)) ##### Server - Improve the observability by removing the need for the ["trace" value](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#traceValue) to turn on or off logging. The server logging is solely controlled using the [`logLevel` server setting](https://docs.astral.sh/ruff/editors/settings/#loglevel) which defaults to `info`. This addresses the issue where users were notified about an error and told to consult the log, but it didn’t contain any messages. ([#&#8203;15232](https://github.com/astral-sh/ruff/pull/15232)) - Ignore diagnostics from other sources for code action requests ([#&#8203;15373](https://github.com/astral-sh/ruff/pull/15373)) ##### CLI - Improve the error message for `--config key=value` when the `key` is for a table and it’s a simple `value` ##### Bug fixes - \[`eradicate`] Ignore metadata blocks directly followed by normal blocks (`ERA001`) ([#&#8203;15330](https://github.com/astral-sh/ruff/pull/15330)) - \[`flake8-django`] Recognize other magic methods (`DJ012`) ([#&#8203;15365](https://github.com/astral-sh/ruff/pull/15365)) - \[`pycodestyle`] Avoid false positives related to type aliases (`E252`) ([#&#8203;15356](https://github.com/astral-sh/ruff/pull/15356)) - \[`pydocstyle`] Avoid treating newline-separated sections as sub-sections (`D405`) ([#&#8203;15311](https://github.com/astral-sh/ruff/pull/15311)) - \[`pyflakes`] Remove call when removing final argument from `format` (`F523`) ([#&#8203;15309](https://github.com/astral-sh/ruff/pull/15309)) - \[`refurb`] Mark fix as unsafe when the right-hand side is a string (`FURB171`) ([#&#8203;15273](https://github.com/astral-sh/ruff/pull/15273)) - \[`ruff`] Treat `)` as a regex metacharacter (`RUF043`, `RUF055`) ([#&#8203;15318](https://github.com/astral-sh/ruff/pull/15318)) - \[`ruff`] Parenthesize the `int`-call argument when removing the `int` call would change semantics (`RUF046`) ([#&#8203;15277](https://github.com/astral-sh/ruff/pull/15277)) #### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;Glyphack](https://github.com/Glyphack) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dcreager](https://github.com/dcreager) - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;diceroll123](https://github.com/diceroll123) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;eclbg](https://github.com/eclbg) - [@&#8203;rtpg](https://github.com/rtpg) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;viccie30](https://github.com/viccie30) #### Install ruff 0.9.0 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy ByPass -c "irm https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-installer.ps1 | iex" ``` #### Download ruff 0.9.0 | File | Platform | Checksum | | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.9.0/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIzMS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
chore(deps): update dependency ruff to ^0.15.0
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have met minimum release age requirement
0665d16312
Author
Collaborator

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: pyproject.toml
Artifact update for ruff resolved to version 0.15.14, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.15.13
This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.
Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries)
See also: https://docs.renovatebot.com/dependency-pinning/
### ⚠️ Artifact update problem Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is. ♻ Renovate will retry this branch, including artifacts, only when one of the following happens: - any of the package files in this branch needs updating, or - the branch becomes conflicted, or - you click the rebase/retry checkbox if found above, or - you rename this PR's title to start with "rebase!" to trigger it manually The artifact failure details are included below: ##### File name: pyproject.toml ``` Artifact update for ruff resolved to version 0.15.14, which is a pending version that has not yet passed the Minimum Release Age threshold. Renovate was attempting to update to 0.15.13 This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them. Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries) See also: https://docs.renovatebot.com/dependency-pinning/ ```
Some checks failed
renovate/artifacts Artifact file update failure
renovate/stability-days Updates have met minimum release age requirement
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/ruff-0.x:renovate/ruff-0.x
git switch renovate/ruff-0.x

Merge

Merge the changes and update on Forgejo.
git switch main
git merge --no-ff renovate/ruff-0.x
git switch renovate/ruff-0.x
git rebase main
git switch main
git merge --ff-only renovate/ruff-0.x
git switch renovate/ruff-0.x
git rebase main
git switch main
git merge --no-ff renovate/ruff-0.x
git switch main
git merge --squash renovate/ruff-0.x
git switch main
git merge --ff-only renovate/ruff-0.x
git switch main
git merge renovate/ruff-0.x
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gravityfargo/envoyer!2
No description provided.