mirror of
https://github.com/astral-sh/ruff
synced 2026-01-21 05:20:49 -05:00
Summary -- During the release today, I noticed that the changelog is finally too long to render at all on GitHub. This PR follows the same splitting procedure as in uv (astral-sh/uv#11510, astral-sh/uv#12099): first splitting the file into one per minor version, and then reversing the contents of each file to start with the breaking release (`changelogs/0.11.x.md` starts with 0.11.0 instead of 0.11.13 as in the old changelog). For the second part, I used [`reverse-changelog.py`](https://github.com/astral-sh/uv/blob/main/scripts/reverse-changelog.py) from the uv repo, so hopefully everything is correct. I spot-checked 0.7.0 at least.
20 KiB
20 KiB
Changelog 0.6.x
0.6.0
Check out the blog post for a migration guide and overview of the changes!
Breaking changes
See also, the "Remapped rules" section which may result in disabled rules.
- Lint and format Jupyter Notebook by default (#12878).
- Detect imports in
srclayouts by default forisortrules (#12848) - The pytest rules
PT001andPT023now default to omitting the decorator parentheses when there are no arguments (#12838).
Deprecations
The following rules are now deprecated:
pytest-missing-fixture-name-underscore(PT004)pytest-incorrect-fixture-name-underscore(PT005)unpacked-list-comprehension(UP027)
Remapped rules
The following rules have been remapped to new rule codes:
unnecessary-dict-comprehension-for-iterable:RUF025toC420
Stabilization
The 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): Supportasyncioandanyiocontext managers.async-function-with-timeout(ASYNC109): Supportasyncioandanyiocontext managers.async-busy-wait(ASYNC110): Supportasyncioandanyiocontext managers.async-zero-sleep(ASYNC115): Supportanyiocontext managers.long-sleep-not-forever(ASYNC116): Supportanyiocontext managers.
The following fixes have been stabilized:
superfluous-else-return(RET505)superfluous-else-raise(RET506)superfluous-else-continue(RET507)superfluous-else-break(RET508)
Preview features
- [
flake8-simplify] Further simplify to binary in preview for (SIM108) (#12796) - [
pyupgrade] Show violations without auto-fix (UP031) (#11229)
Rule changes
- [
flake8-import-conventions] Addxml.etree.ElementTreeto default conventions (#12455) - [
flake8-pytest-style] Add a space after comma in CSV output (PT006) (#12853)
Server
- Show a message for incorrect settings (#12781)
Bug fixes
- [
flake8-async] Do not lint yield in context manager (ASYNC100) (#12896) - [
flake8-comprehensions] Do not lintasync forcomprehensions (C419) (#12895) - [
flake8-return] Only add returnNoneat end of a function (RET503) (#11074) - [
flake8-type-checking] Avoid treatingdataclasses.KW_ONLYas typing-only (TCH003) (#12863) - [
pep8-naming] Treattype(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 andbuiltins._()calls (RUF027) (#12889) - [
ruff] Do not remove parens for tuples with starred expressions in Python <=3.10 (RUF031) (#12784) - Evaluate default parameter values for a function in that function's enclosing scope (#12852)
Other changes
- Respect VS Code cell metadata when detecting the language of Jupyter Notebook cells (#12864)
- Respect
kernelspecnotebook metadata when detecting the preferred language for a Jupyter Notebook (#12875)
0.6.1
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.
Preview features
- [
fastapi] Implementfast-api-unused-path-parameter(FAST003) (#12638)
Rule changes
- [
pylint] Renametoo-many-positionaltotoo-many-positional-arguments(R0917) (#12905)
Server
- Fix crash when applying "fix-all" code-action to notebook cells (#12929)
Other changes
- [
flake8-naming]: Respect import conventions (N817) (#12922)
0.6.2
Preview features
- [
flake8-simplify] Extendopen-file-with-context-handlerto work with other standard-library IO modules (SIM115) (#12959) - [
ruff] Avoidunused-asyncfor functions with FastAPI route decorator (RUF029) (#12938) - [
ruff] Ignorefstring-missing-syntax(RUF027) forfastAPIpaths (#12939) - [
ruff] Implement check for Decimal called with a float literal (RUF032) (#12909)
Rule changes
- [
flake8-bugbear] Update diagnostic message when expression is at the end of function (B015) (#12944) - [
flake8-pyi] Skip type annotations instring-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 forself-cls-assignment(PLW0642) (#12957)
Server
- Show full context in error log messages (#13029)
Bug fixes
- [
pep8-naming] Don't flagfromimports following conventional import names (N817) (#12946) - [
pylint] - Allow__new__methods to haveclsas their first argument even if decorated with@staticmethodforbad-staticmethod-argument(PLW0211) (#12958)
Documentation
- Add
hyperfineinstallation instructions; updatehyperfinecode samples (#13034) - Expand note to use Ruff with other language server in Kate (#12806)
- Update example for
PT001as per the new default behavior (#13019) - [
perflint] Improve docs fortry-except-in-loop(PERF203) (#12947) - [
pydocstyle] Add reference tolint.pydocstyle.ignore-decoratorssetting to rule docs (#12996)
0.6.3
Preview features
- [
flake8-simplify] Extendopen-file-with-context-handlerto work withdbm.sqlite3(SIM115) (#13104) - [
pycodestyle] DisableE741in stub files (.pyi) (#13119) - [
pydoclint] AvoidDOC201on explicit returns in functions that only returnNone(#13064)
Rule changes
- [
flake8-async] Disable check forasynciobefore Python 3.11 (ASYNC109) (#13023)
Bug fixes
- [
FastAPI] Avoid introducing invalid syntax in fix forfast-api-non-annotated-dependency(FAST002) (#13133) - [
flake8-implicit-str-concat] Normalize octals before merging concatenated strings insingle-line-implicit-string-concatenation(ISC001) (#13118) - [
flake8-pytest-style] Improve help message forpytest-incorrect-mark-parentheses-style(PT023) (#13092) - [
pylint] Avoid autofix for calls that aren'tminormaxas starred expression (PLW3301) (#13089) - [
ruff] Adddatetime.time,datetime.tzinfo, anddatetime.timezoneas immutable function calls (RUF009) (#13109) - [
ruff] Extend comment deletion forRUF100to include trailing text fromnoqadirectives while preserving any following comments on the same line, if any (#13105) - Fix dark theme on initial page load for the Ruff playground (#13077)
0.6.4
Preview features
- [
flake8-builtins] Use dynamic builtins list based on Python version (#13172) - [
pydoclint] Permit yieldingNoneinDOC402andDOC403(#13148) - [
pylint] Update diagnostic message forPLW3201(#13194) - [
ruff] Implementpost-init-default(RUF033) (#13192) - [
ruff] Implement useless if-else (RUF034) (#13218)
Rule changes
- [
flake8-pyi] Respectpep8_naming.classmethod-decoratorssettings when determining if a method is a classmethod incustom-type-var-return-type(PYI019) (#13162) - [
flake8-pyi] Teach various rules that annotations might be stringized (#12951) - [
pylint] Avoidno-self-useforattrs-style validators (#13166) - [
pylint] Recurse into subscript subexpressions when searching for list/dict lookups (PLR1733,PLR1736) (#13186) - [
pyupgrade] Detectaiofiles.opencalls inUP015(#13173) - [
pyupgrade] Marksys.version_info[0] < 3and similar comparisons as outdated (UP036) (#13175)
CLI
- Enrich messages of SARIF results (#13180)
- Handle singular case for incompatible rules warning in
ruff formatoutput (#13212)
Bug fixes
- [
pydocstyle] Improve heuristics for detecting Google-style docstrings (#13142) - [
refurb] Treatseparguments with effects as unsafe removals (FURB105) (#13165)
0.6.5
Preview features
- [
pydoclint] IgnoreDOC201when function name is "new" (#13300) - [
refurb] Implementslice-to-remove-prefix-or-suffix(FURB188) (#13256)
Rule changes
- [
eradicate] Ignore script-comments with multiple end-tags (ERA001) (#13283) - [
pyflakes] Improve error message forUndefinedNamewhen a builtin was added in a newer version than specified in Ruff config (F821) (#13293)
Server
- Add support for extensionless Python files for server (#13326)
- Fix configuration inheritance for configurations specified in the LSP settings (#13285)
Bug fixes
- [
ruff] Handle unary operators indecimal-from-float-literal(RUF032) (#13275)
CLI
- Only include rules with diagnostics in SARIF metadata (#13268)
Playground
- Add "Copy as pyproject.toml/ruff.toml" and "Paste from TOML" (#13328)
- Fix errors not shown for restored snippet on page load (#13262)
0.6.6
Preview features
- [
refurb] Skipslice-to-remove-prefix-or-suffix(FURB188) when non-trivial slice steps are present (#13405) - Add a subcommand to generate dependency graphs (#13402)
Formatter
- Fix placement of inline parameter comments (#13379)
Server
- Fix off-by one error in the
LineIndex::offsetcalculation (#13407)
Bug fixes
- [
fastapi] Respect FastAPI aliases in route definitions (#13394) - [
pydocstyle] Respect word boundaries when detecting function signature in docs (#13388)
Documentation
- Add backlinks to rule overview linter (#13368)
- Fix documentation for editor vim plugin ALE (#13348)
- Fix rendering of
FURB188docs (#13406)
0.6.7
Preview features
- Add Python version support to ruff analyze CLI (#13426)
- Add
excludesupport toruff analyze(#13425) - Fix parentheses around return type annotations (#13381)
Rule changes
- [
pycodestyle] Fix: Don't autofix if the first line ends in a question mark? (D400) (#13399)
Bug fixes
- Respect
lint.excludein ruff check--add-noqa(#13427)
Performance
- Avoid tracking module resolver files in Salsa (#13437)
- Use
forgetfor module resolver database (#13438)
0.6.8
Preview features
- Remove unnecessary parentheses around
match caseclauses (#13510) - Parenthesize overlong
ifguards inmatch..caseclauses (#13513) - Detect basic wildcard imports in
ruff analyze graph(#13486) - [
pylint] Implementboolean-chained-comparison(R1716) (#13435)
Rule changes
- [
lake8-simplify] DetectSIM910when using variadic keyword arguments, i.e.,**kwargs(#13503) - [
pyupgrade] Avoid false negatives with non-reference shadowed bindings of loop variables (UP028) (#13504)
Bug fixes
- Detect tuples bound to variadic positional arguments i.e.
*args(#13512) - Exit gracefully on broken pipe errors (#13485)
- Avoid panic when analyze graph hits broken pipe (#13484)
Performance
0.6.9
Preview features
- Fix codeblock dynamic line length calculation for indented docstring examples (#13523)
- [
refurb] MarkFURB118fix as unsafe (#13613)
Rule changes
- [
pydocstyle] Don't raiseD208when last line is non-empty (#13372) - [
pylint] Preserve trivia (i.e. comments) inPLR5501autofix (#13573)
Configuration
- [
pyflakes] Addallow-unused-importssetting forunused-importrule (F401) (#13601)
Bug fixes
- Support ruff discovery in pip build environments (#13591)
- [
flake8-bugbear] Avoid short circuitingB017for multiple context managers (#13609) - [
pylint] Do not offer an invalid fix forPLR1716when the comparisons contain parenthesis (#13527) - [
pyupgrade] FixUP043to apply tocollections.abc.Generatorandcollections.abc.AsyncGenerator(#13611) - [
refurb] Fix handling of slices in tuples forFURB118, e.g.,x[:, 1](#13518)
Documentation
- Update GitHub Action link to
astral-sh/ruff-action(#13551)