github astral-sh/ruff 0.9.5

23 hours ago

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

Don't miss a new ruff release

NewReleases is sending notifications on new releases.