# ruff 0.16.6 - Product: ruff (https://whatsnew.fyi/product/ruff) - Vendor: ruff - Date: 2026-09-03 - Version: 0.16.6 - Original notes: https://github.com/astral-sh/ruff/releases/tag/0.16.6 - Permalink: https://whatsnew.fyi/product/ruff/releases/0.16.6 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add an autofix for PT020 in flake8-pytest-style - **added** — Add display-only fix for os.listdir (PTH208) in flake8-use-pathlib - **changed** — Move pytest-fixture-autouse to the restriction category - **changed** — Exclude pragma comments from line length calculation (I001) in isort - **changed** — Allow unary plus in match patterns on Python 3.15 - **fixed** — Validate unary expressions when parsing - **fixed** — Recognize builtins.open in flake8-async and pylint (ASYNC230, PLW1514) - **fixed** — Fix panic on match subjects (B031) in flake8-bugbear - **fixed** — Reject tzinfo=None for datetime bounds (DTZ901) in flake8-datetimez - **fixed** — Avoid duplicate PT017 diagnostics in flake8-pytest-style - **fixed** — Remove lint.external hint for Ruff-specific suppressions (RUF102) - **fixed** — Prevent fix loop between TID254 and TID255 in flake8-tidy-imports ##### Release Notes Released on 2026-09-03. ###### Preview features - Move `pytest-fixture-autouse` to the `restriction` category ([#28219](https://github.com/astral-sh/ruff/pull/28219)) - \[`flake8-pytest-style`\] Add an autofix for `PT020` ([#27993](https://github.com/astral-sh/ruff/pull/27993)) - \[`flake8-tidy-imports`\] Prevent fix loop between `TID254` and `TID255` ([#28262](https://github.com/astral-sh/ruff/pull/28262)) - \[`isort`\] Exclude pragma comments from line length calculation (`I001`) ([#27313](https://github.com/astral-sh/ruff/pull/27313)) ###### Bug fixes - Validate unary expressions when parsing ([#28233](https://github.com/astral-sh/ruff/pull/28233)) - \[`flake8-async`, `pylint`\] Recognize `builtins.open` (`ASYNC230`, `PLW1514`) ([#28021](https://github.com/astral-sh/ruff/pull/28021)) - \[`flake8-bugbear`\] Fix panic on `match` subjects (`B031`) ([#27781](https://github.com/astral-sh/ruff/pull/27781)) - \[`flake8-datetimez`\] Reject `tzinfo=None` for `datetime` bounds (`DTZ901`) ([#28022](https://github.com/astral-sh/ruff/pull/28022)) - \[`flake8-pytest-style`\] Avoid duplicate `PT017` diagnostics ([#27918](https://github.com/astral-sh/ruff/pull/27918)) - \[`ruff`\] Remove `lint.external` hint for Ruff-specific suppressions (`RUF102`) ([#27923](https://github.com/astral-sh/ruff/pull/27923)) ###### Rule changes - \[`flake8-use-pathlib`\] Add display-only fix for `os.listdir` (`PTH208`) ([#28027](https://github.com/astral-sh/ruff/pull/28027)) ###### Documentation - Add another example and glob reference for `lint.per-file-ignores` ([#28106](https://github.com/astral-sh/ruff/pull/28106)) - Add duplicate work guidance ([#28229](https://github.com/astral-sh/ruff/pull/28229)) - \[`flake8-async`\] Document thread offloading (`ASYNC240`) ([#28008](https://github.com/astral-sh/ruff/pull/28008)) - \[`pyupgrade`\] Clarify default `encoding` argument handling (`UP012`) ([#27315](https://github.com/astral-sh/ruff/pull/27315)) ###### Other changes - Allow unary plus in match patterns on Python 3.15 ([#28231](https://github.com/astral-sh/ruff/pull/28231)) ###### Contributors - [@flying-sheep](https://github.com/flying-sheep) - [@pikammmmm](https://github.com/pikammmmm) - [@fly1d](https://github.com/fly1d) - [@waterWang](https://github.com/waterWang) - [@Pierre-Sassoulas](https://github.com/Pierre-Sassoulas) - [@ntBre](https://github.com/ntBre) - [@jelle-openai](https://github.com/jelle-openai) - [@ericbuehl](https://github.com/ericbuehl) - [@tjkuson](https://github.com/tjkuson) - [@AbhinavMir](https://github.com/AbhinavMir) - [@Whning0513](https://github.com/Whning0513) - [@chirizxc](https://github.com/chirizxc) ##### Install ruff 0.16.6 ###### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-installer.sh | sh ``` ###### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-installer.ps1 | iex" ``` ##### Download ruff 0.16.6 | File | Platform | Checksum | |--------|----------|----------| | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-aarch64-pc-windows-msvc.zip.sha256) _[Truncated at 4000 characters — full notes: https://github.com/astral-sh/ruff/releases/tag/0.16.6]_