Skip to content

Releases: astral-sh/ruff

0.5.3

18 Jul 17:10
f0d589d
Compare
Choose a tag to compare

Release Notes

Ruff 0.5.3 marks the stable release of the Ruff language server and introduces revamped documentation, including setup guides for your editor of choice and the language server itself.

Preview features

  • Formatter: Insert empty line between suite and alternative branch after function/class definition (#12294)
  • [pyupgrade] Implement unnecessary-default-type-args (UP043) (#12371)

Rule changes

  • [flake8-bugbear] Detect enumerate iterations in loop-iterator-mutation (B909) (#12366)
  • [flake8-bugbear] Remove discard, remove, and pop allowance for loop-iterator-mutation (B909) (#12365)
  • [pylint] Allow repeated-equality-comparison for mixed operations (PLR1714) (#12369)
  • [pylint] Ignore self and cls when counting arguments (PLR0913) (#12367)
  • [pylint] Use UTF-8 as default encoding in unspecified-encoding fix (PLW1514) (#12370)

Server

  • Build settings index in parallel for the native server (#12299)
  • Use fallback settings when indexing the project (#12362)
  • Consider --preview flag for server subcommand for the linter and formatter (#12208)

Bug fixes

  • [flake8-comprehensions] Allow additional arguments for sum and max comprehensions (C419) (#12364)
  • [pylint] Avoid dropping extra boolean operations in repeated-equality-comparison (PLR1714) (#12368)
  • [pylint] Consider expression before statement when determining binding kind (PLR1704) (#12346)

Documentation

  • Add docs for Ruff language server (#12344)
  • Migrate to standalone docs repo (#12341)
  • Update versioning policy for editor integration (#12375)

Other changes

  • Publish Wasm API to npm (#12317)

Contributors

Install ruff 0.5.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.3/ruff-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.3/ruff-installer.ps1 | iex"

Download ruff 0.5.3

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

0.5.2

14 Jul 15:11
dc8db1a
Compare
Choose a tag to compare

Release Notes

Preview features

  • Use space separator before parenthesized expressions in comprehensions with leading comments (#12282)
  • [flake8-async] Update ASYNC100 to include anyio and asyncio (#12221)
  • [flake8-async] Update ASYNC109 to include anyio and asyncio (#12236)
  • [flake8-async] Update ASYNC110 to include anyio and asyncio (#12261)
  • [flake8-async] Update ASYNC115 to include anyio and asyncio (#12262)
  • [flake8-async] Update ASYNC116 to include anyio and asyncio (#12266)

Rule changes

  • [flake8-return] Exempt properties from explicit return rule (RET501) (#12243)
  • [numpy] Add np.NAN-to-np.nan diagnostic (#12292)
  • [refurb] Make list-reverse-copy an unsafe fix (#12303)

Server

  • Consider include and extend-include settings in native server (#12252)
  • Include nested configurations in settings reloading (#12253)

CLI

  • Omit code frames for fixes with empty ranges (#12304)
  • Warn about formatter incompatibility for D203 (#12238)

Bug fixes

  • Make cache-write failures non-fatal on Windows (#12302)
  • Treat not operations as boolean tests (#12301)
  • [flake8-bandit] Avoid S310 violations for HTTP-safe f-strings (#12305)
  • [flake8-bandit] Support explicit string concatenations in S310 HTTP detection (#12315)
  • [flake8-bandit] fix S113 false positive for httpx without timeout argument (#12213)
  • [pycodestyle] Remove "non-obvious" allowance for E721 (#12300)
  • [pyflakes] Consider with blocks as single-item branches for redefinition analysis (#12311)
  • [refurb] Restrict forwarding for newline argument in open() calls to Python versions >= 3.10 (#12244)

Documentation

  • Update help and documentation to reflect --output-format full default (#12248)

Performance

  • Use more threads when discovering Python files (#12258)

Install ruff 0.5.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.2/ruff-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.2/ruff-installer.ps1 | iex"

Download ruff 0.5.2

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

0.5.1

05 Jul 13:30
3a72400
Compare
Choose a tag to compare

Release Notes

Preview features

  • [flake8-bugbear] Implement mutable-contextvar-default (B039) (#12113)
  • [pycodestyle] Whitespace after decorator (E204) (#12140)
  • [pytest] Reverse PT001 and PT0023 defaults (#12106)

Rule changes

  • Enable token-based rules on source with syntax errors (#11950)
  • [flake8-bandit] Detect httpx for S113 (#12174)
  • [numpy] Update NPY201 to include exception deprecations (#12065)
  • [pylint] Generate autofix for duplicate-bases (PLE0241) (#12105)

Server

  • Avoid syntax error notification for source code actions (#12148)
  • Consider the content of the new cells during notebook sync (#12203)
  • Fix replacement edit range computation (#12171)

Bug fixes

  • Disable auto-fix when source has syntax errors (#12134)
  • Fix cache key collisions for paths with separators (#12159)
  • Make requires-python inference robust to == (#12091)
  • Use char-wise width instead of str-width (#12135)
  • [pycodestyle] Avoid E275 if keyword followed by comma (#12136)
  • [pycodestyle] Avoid E275 if keyword is followed by a semicolon (#12095)
  • [pylint] Skip dummy variables for PLR1704 (#12190)

Performance

  • Remove allocation in parse_identifier (#12103)
  • Use CompactString for Identifier AST node (#12101)

Contributors

Install ruff 0.5.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.5.1/ruff-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -c "irm https://github.com/astral-sh/ruff/releases/download/0.5.1/ruff-installer.ps1 | iex"

Download ruff 0.5.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

0.5.0

27 Jun 15:42
244b923
Compare
Choose a tag to compare

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.

  • Follow the XDG specification to discover user-level configurations on macOS (same as on other Unix platforms)
  • Selecting ALL now excludes deprecated rules
  • The released archives now include an extra level of nesting, which can be removed with --strip-components=1 when untarring.
  • The release artifact's file name no longer includes the version tag. This enables users to install via /latest URLs on GitHub.
  • The diagnostic ranges for some flake8-bandit rules were modified (#10667).

Deprecations

The following rules are now deprecated:

Remapped rules

The following rules have been remapped to new rule codes:

Stabilization

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

The following behaviors have been stabilized:

Removals

The following deprecated settings have been removed:

  • output-format=text; use output-format=concise or output-format=full
  • tab-size; use indent-width

The following deprecated CLI options have been removed:

  • --show-source; use --output-format=full
  • --no-show-source; use --output-format=concise

The following deprecated CLI commands have been removed:

  • ruff <path>; use ruff check <path>
  • ruff --clean; use ruff clean
  • ruff --generate-shell-completion; use ruff generate-shell-completion

Preview features

  • [ruff] Add assert-with-print-message rule (#11981)

CLI

  • Use rule name rather than message in --statistics (#11697)
  • Use the output format full by default (#12010)
  • Don't log syntax errors to the console (#11902)

Rule changes

  • [ruff] Fix false positives if gettext is imported using an alias (RUF027) (#12025)
  • [numpy] Update trapz and in1d deprecation (NPY201) (#11948)
  • [flake8-bandit] Modify diagnostic ranges for shell-related rules (#10667)

Server

  • Closing an untitled, unsaved notebook document no longer throws an error (#11942)
  • Support the usage of tildes and environment variables in logFile (#11945)
  • Add option to configure whether to show syntax errors (#12059)

Bug fixes

  • [pycodestyle] Avoid E203 for f-string debug expression (#12024)
  • [pep8-naming] Match import-name ignores against both name and alias (N812, N817) (#12033)
  • [pyflakes] Detect assignments that shadow definitions (F811) (#11961)

Parser

  • Emit a syntax error for an empty type parameter list (#12030)
  • Avoid consuming the newline for unterminated strings (#12067)
  • Do not include the newline in the unterminated string range (#12017)
  • Use the correct range to highlight line continuation errors (#12016)
  • Consider 2-character EOL before line continuations (#12035)
  • Consider line continuation character for re-lexing (#12008)

Other changes

  • Upgrade the Unicode table used for measuring the line-length (#11194)
  • Remove the deprecation error message for the nursery selector (#10172)

Contributors

Read more

v0.4.10

20 Jun 17:46
b54922f
Compare
Choose a tag to compare

Changes

Parser

  • Implement re-lexing logic for better error recovery (#11845)

Rule changes

  • [flake8-copyright] Update CPY001 to check the first 4096 bytes instead of 1024 (#11927)
  • [pycodestyle] Update E999 to show all syntax errors instead of just the first one (#11900)

Server

  • Add tracing setup guide to Helix documentation (#11883)
  • Add tracing setup guide to Neovim documentation (#11884)
  • Defer notebook cell deletion to avoid an error message (#11864)

Security

  • Guard against malicious ecosystem comment artifacts (#11879)

Contributors

v0.4.9

14 Jun 15:21
4f49e91
Compare
Choose a tag to compare

Changes

Preview features

  • [pylint] Implement consider-dict-items (C0206) (#11688)
  • [refurb] Implement repeated-global (FURB154) (#11187)

Rule changes

  • [pycodestyle] Adapt fix for E203 to work identical to ruff format (#10999)

Formatter

  • Fix formatter instability for lines only consisting of zero-width characters (#11748)

Server

  • Add supported commands in server capabilities (#11850)
  • Use real file path when available in ruff server (#11800)
  • Improve error message when a command is run on an unavailable document (#11823)
  • Introduce the ruff.printDebugInformation command (#11831)
  • Tracing system now respects log level and trace level, with options to log to a file (#11747)

CLI

  • Handle non-printable characters in diff view (#11687)

Bug fixes

  • [refurb] Avoid suggesting starmap when arguments are used outside call (FURB140) (#11830)
  • [flake8-bugbear] Avoid panic in B909 when checking large loop blocks (#11772)
  • [refurb] Fix misbehavior of operator.itemgetter when getter param is a tuple (FURB118) (#11774)

Contributors

v0.4.8

05 Jun 15:36
a8cf709
Compare
Choose a tag to compare

Changes

Performance

  • Linter performance has been improved by around 10% on some microbenchmarks by refactoring the lexer and parser to maintain synchronicity between them (#11457)

Preview features

  • [flake8-bugbear] Implement return-in-generator (B901) (#11644)
  • [flake8-pyi] Implement PYI063 (#11699)
  • [pygrep_hooks] Check blanket ignores via file-level pragmas (PGH004) (#11540)

Rule changes

  • [pyupgrade] Update UP035 for Python 3.13 and the latest version of typing_extensions (#11693)
  • [numpy] Update NPY001 rule for NumPy 2.0 (#11735)

Server

  • Formatting a document with syntax problems no longer spams a visible error popup (#11745)

CLI

  • Add RDJson support for --output-format flag (#11682)

Bug fixes

  • [pyupgrade] Write empty string in lieu of panic when fixing UP032 (#11696)
  • [flake8-simplify] Simplify double negatives in SIM103 (#11684)
  • Ensure the expression generator adds a newline before type statements (#11720)
  • Respect per-file ignores for blanket and redirected noqa rules (#11728)

Contributors

v0.4.7

31 May 21:25
1ad5f9c
Compare
Choose a tag to compare

Changes

Preview features

  • [flake8-pyi] Implement PYI064 (#11325)
  • [flake8-pyi] Implement PYI066 (#11541)
  • [flake8-pyi] Implement PYI057 (#11486)
  • [pyflakes] Enable F822 in __init__.py files by default (#11370)

Formatter

  • Fix incorrect placement of trailing stub function comments (#11632)

Server

  • Respect file exclusions in ruff server (#11590)
  • Add support for documents not exist on disk (#11588)
  • Add Vim and Kate setup guide for ruff server (#11615)

Bug fixes

  • Avoid removing newlines between docstring headers and rST blocks (#11609)
  • Infer indentation with imports when logical indent is absent (#11608)
  • Use char index rather than position for indent slice (#11645)
  • [flake8-comprehension] Strip parentheses around generators in C400 (#11607)
  • Mark repeated-isinstance-calls as unsafe on Python 3.10 and later (#11622)

Contributors

v0.4.6

29 May 02:06
49a5a9c
Compare
Choose a tag to compare

Changes

Breaking changes

  • Use project-relative paths when calculating GitLab fingerprints (#11532)

Preview features

  • [flake8-async] Sleep with >24 hour interval should usually sleep forever (ASYNC116) (#11498)

Rule changes

  • [numpy] Add missing functions to NumPy 2.0 migration rule (#11528)
  • [mccabe] Consider irrefutable pattern similar to if .. else for C901 (#11565)
  • Consider match-case statements for C901, PLR0912, and PLR0915 (#11521)
  • Remove empty strings when converting to f-string (UP032) (#11524)
  • [flake8-bandit] request-without-timeout should warn for requests.request (#11548)
  • [flake8-self] Ignore sunder accesses in flake8-self rules (#11546)
  • [pyupgrade] Lint for TypeAliasType usages (UP040) (#11530)

Server

  • Respect excludes in ruff server configuration discovery (#11551)
  • Use default settings if initialization options is empty or not provided (#11566)
  • ruff server correctly treats .pyi files as stub files (#11535)
  • ruff server searches for configuration in parent directories (#11537)
  • ruff server: An empty code action filter no longer returns notebook source actions (#11526)

Bug fixes

  • [flake8-logging-format] Fix autofix title in logging-warn (G010) (#11514)
  • [refurb] Avoid recommending operator.itemgetter with dependence on lambda arguments (#11574)
  • [flake8-simplify] Avoid recommending context manager in __enter__ implementations (#11575)
  • Create intermediary directories for --output-file (#11550)
  • Propagate reads on global variables (#11584)
  • Treat all singledispatch arguments as runtime-required (#11523)

Contributors

v0.4.5

23 May 02:14
550aa87
Compare
Choose a tag to compare

Changes

Ruff's language server is now in Beta

v0.4.5 marks the official Beta release of ruff server, an integrated language server built into Ruff. ruff server supports the same feature set as ruff-lsp, powering linting, formatting, and code fixes in Ruff's editor integrations -- but with superior performance and no installation required. We'd love your feedback!

You can enable ruff server in the VS Code extension today.

To read more about this exciting milestone, check out our blog post!

Rule changes

  • [flake8-future-annotations] Reword future-rewritable-type-annotation (FA100) message (#11381)
  • [isort] Expanded the set of standard-library modules to include _string, etc. (#11374)
  • [pycodestyle] Consider soft keywords for E27 rules (#11446)
  • [pyflakes] Recommend adding unused import bindings to __all__ (#11314)
  • [pyflakes] Update documentation and deprecate ignore_init_module_imports (#11436)
  • [pyupgrade] Mark quotes as unnecessary for non-evaluated annotations (#11485)

Formatter

  • Avoid multiline quotes warning with quote-style = preserve (#11490)

Server

  • Support Jupyter Notebook files (#11206)
  • Support noqa comment code actions (#11276)
  • Fix automatic configuration reloading (#11492)
  • Fix several issues with configuration in Neovim and Helix (#11497)

CLI

  • Add --output-format as a CLI option for ruff config (#11438)

Bug fixes

  • Avoid PLE0237 for property with setter (#11377)
  • Avoid TCH005 for if stmt with elif/else block (#11376)
  • Avoid flagging __future__ annotations as required for non-evaluated type annotations (#11414)
  • Check for ruff executable in 'bin' directory as installed by 'pip install --target'. (#11450)
  • Sort edits prior to deduplicating in quotation fix (#11452)
  • Treat escaped newline as valid sequence (#11465)
  • [flake8-pie] Preserve parentheses in unnecessary-dict-kwargs (#11372)
  • [pylint] Ignore __slots__ with dynamic values (#11488)
  • [pylint] Remove try body from branch counting (#11487)
  • [refurb] Respect operator precedence in FURB110 (#11464)

Documentation

  • Add --preview to the README (#11395)
  • Add Python 3.13 to list of allowed Python versions (#11411)
  • Simplify Neovim setup documentation (#11489)
  • Update CONTRIBUTING.md to reflect the new parser (#11434)
  • Update server documentation with new migration guide (#11499)
  • [pycodestyle] Clarify motivation for E713 and E714 (#11483)
  • [pyflakes] Update docs to describe WAI behavior (F541) (#11362)
  • [pylint] Clearly indicate what is counted as a branch (#11423)

Contributors