Ruff 0.17.1
OK RUFF 0.17.1 JUST DROPPED ☕️ Released October 15, 2026, one day after uv 0.13.1, because the Astral team does not sleep. This is a patch. It is not flashy. It still fixes stuff you will hit. Let's go. 🧵
🚀 The Fast Fixes
Four bugs got squashed and one of them is PYI036 false positives on quoted annotations in stub files. If you write .pyi stubs, that one matters. Period.
- Dedent with multiple leading comments now works, so your formatter stops mangling blocks that start with two or more comment lines.
PYI063catches legacy positional-only parameters in__new__methods. Stub authors, this is your rule.PYI036false positives fixed for quoted annotations. No more noise on valid stubs.PERF401andPERF403stop suggesting invalid comprehensions. A bad suggestion is worse than no suggestion, so this is a genuine win for the perflint crowd.
🧪 Preview Feature
Under preview, the pycodestyle whitespace rules E271 through E274 no longer treat None, True, or False as keywords. Tiny change. Real reduction in nonsense warnings. 👌
🔧 Rule Change
More collections and weakref containers are now treated as mutable. If you rely on rules that flag mutable class attributes or mutable default arguments, this expands coverage to containers that were slipping through. Check your output after upgrading, because new hits are the point.
📝 Docs
The flake8-import-conventions documentation got updated default and example aliases, and the PYI docs picked up fixes for invalid markup and HTML snippets. Boring but useful.
🙌 Shoutouts
Six contributors shipped this one: @fixfon, @mmaxjr, @joshuavetos, @nekomario28, @ntBre, and @shan3520. 👏
⬆️ Upgrade RNN
uv tool upgrade ruff or pip install -U ruff==0.17.1. Then run ruff check with the new version before you commit, because the mutable-container rule change can surface fresh findings. Go update. 🔗