changelogs/0.6.x.md
Check out the blog post for a migration guide and overview of the changes!
See also, the "Remapped rules" section which may result in disabled rules.
src layouts by default for isort rules (#12848)PT001 and PT023 now default to omitting the decorator parentheses when there are no arguments (#12838).The following rules are now deprecated:
pytest-missing-fixture-name-underscore (PT004)pytest-incorrect-fixture-name-underscore (PT005)unpacked-list-comprehension (UP027)The following rules have been remapped to new rule codes:
unnecessary-dict-comprehension-for-iterable: RUF025 to C420The following rules have been stabilized and are no longer in preview:
singledispatch-method (PLE1519)singledispatchmethod-function (PLE1520)bad-staticmethod-argument (PLW0211)if-stmt-min-max (PLR1730)invalid-bytes-return-type (PLE0308)invalid-hash-return-type (PLE0309)invalid-index-return-type (PLE0305)invalid-length-return-type (PLEE303)self-or-cls-assignment (PLW0642)byte-string-usage (PYI057)duplicate-literal-member (PYI062)redirected-noqa (RUF101)The following behaviors have been stabilized:
cancel-scope-no-checkpoint (ASYNC100): Support asyncio and anyio context managers.async-function-with-timeout (ASYNC109): Support asyncio and anyio context managers.async-busy-wait (ASYNC110): Support asyncio and anyio context managers.async-zero-sleep (ASYNC115): Support anyio context managers.long-sleep-not-forever (ASYNC116): Support anyio context managers.The following fixes have been stabilized:
superfluous-else-return (RET505)superfluous-else-raise (RET506)superfluous-else-continue (RET507)superfluous-else-break (RET508)flake8-simplify] Further simplify to binary in preview for (SIM108) (#12796)pyupgrade] Show violations without auto-fix (UP031) (#11229)flake8-import-conventions] Add xml.etree.ElementTree to default conventions (#12455)flake8-pytest-style] Add a space after comma in CSV output (PT006) (#12853)flake8-async] Do not lint yield in context manager (ASYNC100) (#12896)flake8-comprehensions] Do not lint async for comprehensions (C419) (#12895)flake8-return] Only add return None at end of a function (RET503) (#11074)flake8-type-checking] Avoid treating dataclasses.KW_ONLY as typing-only (TCH003) (#12863)pep8-naming] Treat type(Protocol) et al as metaclass base (N805) (#12770)pydoclint] Don't enforce returns and yields in abstract methods (DOC201, DOC202) (#12771)ruff] Skip tuples with slice expressions in (RUF031) (#12768)ruff] Ignore unparenthesized tuples in subscripts when the subscript is a type annotation or type alias (RUF031) (#12762)ruff] Ignore template strings passed to logging and builtins._() calls (RUF027) (#12889)ruff] Do not remove parens for tuples with starred expressions in Python <=3.10 (RUF031) (#12784)kernelspec notebook metadata when detecting the preferred language for a Jupyter Notebook (#12875)This is a hotfix release to address an issue with ruff-pre-commit. In v0.6,
Ruff changed its behavior to lint and format Jupyter notebooks by default;
however, due to an oversight, these files were still excluded by default if
Ruff was run via pre-commit, leading to inconsistent behavior.
This has now been fixed.
fastapi] Implement fast-api-unused-path-parameter (FAST003) (#12638)pylint] Rename too-many-positional to too-many-positional-arguments (R0917) (#12905)flake8-naming]: Respect import conventions (N817) (#12922)flake8-simplify] Extend open-file-with-context-handler to work with other standard-library IO modules (SIM115) (#12959)ruff] Avoid unused-async for functions with FastAPI route decorator (RUF029) (#12938)ruff] Ignore fstring-missing-syntax (RUF027) for fastAPI paths (#12939)ruff] Implement check for Decimal called with a float literal (RUF032) (#12909)flake8-bugbear] Update diagnostic message when expression is at the end of function (B015) (#12944)flake8-pyi] Skip type annotations in string-or-bytes-too-long (PYI053) (#13002)flake8-type-checking] Always recognise relative imports as first-party (#12994)flake8-unused-arguments] Ignore unused arguments on stub functions (ARG001) (#12966)pylint] Ignore augmented assignment for self-cls-assignment (PLW0642) (#12957)pep8-naming] Don't flag from imports following conventional import names (N817) (#12946)pylint] - Allow __new__ methods to have cls as their first argument even if decorated with @staticmethod for bad-staticmethod-argument (PLW0211) (#12958)hyperfine installation instructions; update hyperfine code samples (#13034)PT001 as per the new default behavior (#13019)perflint] Improve docs for try-except-in-loop (PERF203) (#12947)pydocstyle] Add reference to lint.pydocstyle.ignore-decorators setting to rule docs (#12996)flake8-simplify] Extend open-file-with-context-handler to work with dbm.sqlite3 (SIM115) (#13104)pycodestyle] Disable E741 in stub files (.pyi) (#13119)pydoclint] Avoid DOC201 on explicit returns in functions that only return None (#13064)flake8-async] Disable check for asyncio before Python 3.11 (ASYNC109) (#13023)FastAPI] Avoid introducing invalid syntax in fix for fast-api-non-annotated-dependency (FAST002) (#13133)flake8-implicit-str-concat] Normalize octals before merging concatenated strings in single-line-implicit-string-concatenation (ISC001) (#13118)flake8-pytest-style] Improve help message for pytest-incorrect-mark-parentheses-style (PT023) (#13092)pylint] Avoid autofix for calls that aren't min or max as starred expression (PLW3301) (#13089)ruff] Add datetime.time, datetime.tzinfo, and datetime.timezone as immutable function calls (RUF009) (#13109)ruff] Extend comment deletion for RUF100 to include trailing text from noqa directives while preserving any following comments on the same line, if any (#13105)flake8-builtins] Use dynamic builtins list based on Python version (#13172)pydoclint] Permit yielding None in DOC402 and DOC403 (#13148)pylint] Update diagnostic message for PLW3201 (#13194)ruff] Implement post-init-default (RUF033) (#13192)ruff] Implement useless if-else (RUF034) (#13218)flake8-pyi] Respect pep8_naming.classmethod-decorators settings when determining if a method is a classmethod in custom-type-var-return-type (PYI019) (#13162)flake8-pyi] Teach various rules that annotations might be stringized (#12951)pylint] Avoid no-self-use for attrs-style validators (#13166)pylint] Recurse into subscript subexpressions when searching for list/dict lookups (PLR1733, PLR1736) (#13186)pyupgrade] Detect aiofiles.open calls in UP015 (#13173)pyupgrade] Mark sys.version_info[0] < 3 and similar comparisons as outdated (UP036) (#13175)ruff format output (#13212)pydocstyle] Improve heuristics for detecting Google-style docstrings (#13142)refurb] Treat sep arguments with effects as unsafe removals (FURB105) (#13165)pydoclint] Ignore DOC201 when function name is "new" (#13300)refurb] Implement slice-to-remove-prefix-or-suffix (FURB188) (#13256)eradicate] Ignore script-comments with multiple end-tags (ERA001) (#13283)pyflakes] Improve error message for UndefinedName when a builtin was added in a newer version than specified in Ruff config (F821) (#13293)ruff] Handle unary operators in decimal-from-float-literal (RUF032) (#13275)refurb] Skip slice-to-remove-prefix-or-suffix (FURB188) when non-trivial slice steps are present (#13405)LineIndex::offset calculation (#13407)fastapi] Respect FastAPI aliases in route definitions (#13394)pydocstyle] Respect word boundaries when detecting function signature in docs (#13388)FURB188 docs (#13406)exclude support to ruff analyze (#13425)pycodestyle] Fix: Don't autofix if the first line ends in a question mark? (D400) (#13399)lint.exclude in ruff check --add-noqa (#13427)forget for module resolver database (#13438)match case clauses (#13510)if guards in match..case clauses (#13513)ruff analyze graph (#13486)pylint] Implement boolean-chained-comparison (R1716) (#13435)lake8-simplify] Detect SIM910 when using variadic keyword arguments, i.e., **kwargs (#13503)pyupgrade] Avoid false negatives with non-reference shadowed bindings of loop variables (UP028) (#13504)*args (#13512)refurb] Mark FURB118 fix as unsafe (#13613)pydocstyle] Don't raise D208 when last line is non-empty (#13372)pylint] Preserve trivia (i.e. comments) in PLR5501 autofix (#13573)pyflakes] Add allow-unused-imports setting for unused-import rule (F401) (#13601)flake8-bugbear] Avoid short circuiting B017 for multiple context managers (#13609)pylint] Do not offer an invalid fix for PLR1716 when the comparisons contain parenthesis (#13527)pyupgrade] Fix UP043 to apply to collections.abc.Generator and collections.abc.AsyncGenerator (#13611)refurb] Fix handling of slices in tuples for FURB118, e.g., x[:, 1] (#13518)astral-sh/ruff-action (#13551)