changelogs/0.7.x.md
Check out the blog post for a migration guide and overview of the changes!
PT001 and PT023 now default to omitting the decorator parentheses when there are no arguments
(#12838, #13292).
This was a change that we attempted to make in Ruff v0.6.0, but only partially made due to an error on our part.
See the blog post for more details.useless-try-except rule (in our tryceratops category) has been recoded from TRY302 to
TRY203 (#13502). This ensures Ruff's code is consistent with
the same rule in the tryceratops linter.lint.allow-unused-imports setting has been removed (#13677). Use
lint.pyflakes.allow-unused-imports
instead.refurb] implement hardcoded-string-charset (FURB156) (#13530)refurb] Count codepoints not bytes for slice-to-remove-prefix-or-suffix (FURB188) (#13631)pylint] Mark PLE1141 fix as unsafe (#13629)flake8-async] Consider async generators to be "checkpoints" for cancel-scope-no-checkpoint (ASYNC100) (#13639)flake8-bugbear] Do not suggest setting parameter strict= to False in B905 diagnostic message (#13656)flake8-todos] Only flag the word "TODO", not words starting with "todo" (TD006) (#13640)pycodestyle] Fix whitespace-related false positives and false negatives inside type-parameter lists (E231, E251) (#13704)flake8-simplify] Stabilize preview behavior for SIM115 so that the rule can detect files
being opened from a wider range of standard-library functions (#12959).--statistics command (#13774)pyflakes] Allow ipytest cell magic (F401) (#13745)flake8-use-pathlib] Fix PTH123 false positive when open is passed a file descriptor (#13616)flake8-bandit] Detect patterns from multi line SQL statements (S608) (#13574)flake8-pyi] - Fix dropped expressions in PYI030 autofix (#13727)E221 and E222 to flag missing or extra whitespace around == operator (#13890)pylint] Restrict iteration-over-set to only work on sets of literals (PLC0208) (#13731)flake8-type-checking] Support auto-quoting when annotations contain quotes (#11811)ARG002 compatible with EM101 when raising NotImplementedError (#13714)pyupgrade] Add PEP 646 Unpack conversion to * with fix (UP044) (#13988)known_stdlibs.rs with stdlibs 2024.10.25 (#13963)flake8-no-pep420] Skip namespace package enforcement for PEP 723 scripts (INP001) (#13974)flake8-type-checking] Fix false positive for singledispatchmethod (TCH003) (#13941)flake8-type-checking] Treat return type of singledispatch as runtime-required (TCH003) (#13957)flake8-simplify] Include caveats of enabling if-else-block-instead-of-if-exp (SIM108) (#14019)flake8-pyi] Include all Python file types for PYI006 and PYI066 (#14059)flake8-simplify] Implement split-of-static-string (SIM905) (#14008)refurb] Implement subclass-builtin (FURB189) (#14105)ruff] Improve diagnostic messages and docs (RUF031, RUF032, RUF034) (#14068)B033, PLC0208) (#14064)eradicate] Better detection of IntelliJ language injection comments (ERA001) (#14094)flake8-pyi] Add autofix for docstring-in-stub (PYI021) (#14150)flake8-pyi] Update duplicate-literal-member (PYI062) to always provide an autofix (#14188)pyflakes] Detect items that hash to same value in duplicate dictionaries (F601) (#14065)ruff] Fix false positive for decorators (RUF028) (#14061)# noqa (#12809)eradicate] ignore # language= in commented-out-code rule (ERA001) (#14069)flake8-bugbear] - do not run mutable-argument-default on stubs (B006) (#14058)flake8-builtins] Skip lambda expressions in builtin-argument-shadowing (A002) (#14144)flake8-comprehension] Also remove trailing comma while fixing C409 and C419 (#14097)flake8-simplify] Allow open without context manager in return statement (SIM115) (#14066)pylint] Respect hash-equivalent literals in iteration-over-set (PLC0208) (#14063)pylint] Update known dunder methods for Python 3.13 (PLW3201) (#14146)pyupgrade] - ignore kwarg unpacking for UP044 (#14053)refurb] Parse more exotic decimal strings in verbose-decimal-constructor (FURB157) (#14098)flake8-datetimez] Detect usages of datetime.max/datetime.min (DTZ901) (#14288)flake8-logging] Implement root-logger-calls (LOG015) (#14302)flake8-no-pep420] Detect empty implicit namespace packages (INP001) (#14236)flake8-pyi] Add "replace with Self" fix (PYI019) (#14238)perflint] Implement quick-fix for manual-list-comprehension (PERF401) (#13919)pylint] Implement shallow-copy-environ (W1507) (#14241)ruff] Implement none-not-at-end-of-union (RUF036) (#14314)ruff] Implementation unsafe-markup-call from flake8-markupsafe plugin (RUF035) (#14224)ruff] Report problems for attrs dataclasses (RUF008, RUF009) (#14327)flake8-boolean-trap] Exclude dunder methods that define operators (FBT001) (#14203)flake8-pyi] Add "replace with Self" fix (PYI034) (#14217)flake8-pyi] Always autofix duplicate-union-members (PYI016) (#14270)flake8-pyi] Improve autofix for nested and mixed type unions for unnecessary-type-union (PYI055) (#14272)flake8-pyi] Mark fix as unsafe when type annotation contains comments for duplicate-literal-member (PYI062) (#14268)ruff.configuration (#14352)PLC014 (useless-import-alias) and I002 (missing-required-import) by considering lint.isort.required-imports for PLC014 (#14287)flake8-type-checking] Skip quoting annotation if it becomes invalid syntax (TCH001)flake8-pyi] Avoid using typing.Self in stub files pre-Python 3.11 (PYI034) (#14230)flake8-pytest-style] Flag pytest.raises call with keyword argument expected_exception (PT011) (#14298)flake8-simplify] Infer "unknown" truthiness for literal iterables whose items are all unpacks (SIM222) (#14263)flake8-type-checking] Fix false positives for typing.Annotated (TCH001) (#14311)pylint] Allow await at the top-level scope of a notebook (PLE1142) (#14225)pylint] Fix miscellaneous issues in await-outside-async detection (PLE1142) (#14218)pyupgrade] Avoid applying PEP 646 rewrites in invalid contexts (UP044) (#14234)pyupgrade] Detect permutations in redundant open modes (UP015) (#14255)refurb] Avoid triggering hardcoded-string-charset for reordered sets (FURB156) (#14233)refurb] Further special cases added to verbose-decimal-constructor (FURB157) (#14216)refurb] Use UserString instead of non-existent UserStr (FURB189) (#14209)ruff] Avoid treating lowercase letters as # noqa codes (RUF100) (#14229)ruff] Do not report when Optional has no type arguments (RUF013) (#14181)