mirror of
https://github.com/astral-sh/ruff
synced 2026-01-20 21:10:48 -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.2.x
0.2.0
Breaking changes
- The
NURSERYselector cannot be used anymore - Legacy selection of nursery rules by exact codes is no longer allowed without preview enabled
See also, the "Remapped rules" section which may result in disabled rules.
Deprecations
The following rules are now deprecated:
missing-type-self(ANN101)missing-type-cls(ANN102)
The following command line options are now deprecated:
--show-source; use--output-format fullinstead--no-show-source; use--output-format conciseinstead--output-format text; usefullorconciseinstead
The following settings have moved and the previous name is deprecated:
ruff.allowed-confusables→ruff.lint.allowed-confusablesruff.dummy-variable-rgx→ruff.lint.dummy-variable-rgxruff.explicit-preview-rules→ruff.lint.explicit-preview-rulesruff.extend-fixable→ruff.lint.extend-fixableruff.extend-ignore→ruff.lint.extend-ignoreruff.extend-per-file-ignores→ruff.lint.extend-per-file-ignoresruff.extend-safe-fixes→ruff.lint.extend-safe-fixesruff.extend-select→ruff.lint.extend-selectruff.extend-unfixable→ruff.lint.extend-unfixableruff.extend-unsafe-fixes→ruff.lint.extend-unsafe-fixesruff.external→ruff.lint.externalruff.fixable→ruff.lint.fixableruff.flake8-annotations→ruff.lint.flake8-annotationsruff.flake8-bandit→ruff.lint.flake8-banditruff.flake8-bugbear→ruff.lint.flake8-bugbearruff.flake8-builtins→ruff.lint.flake8-builtinsruff.flake8-comprehensions→ruff.lint.flake8-comprehensionsruff.flake8-copyright→ruff.lint.flake8-copyrightruff.flake8-errmsg→ruff.lint.flake8-errmsgruff.flake8-gettext→ruff.lint.flake8-gettextruff.flake8-implicit-str-concat→ruff.lint.flake8-implicit-str-concatruff.flake8-import-conventions→ruff.lint.flake8-import-conventionsruff.flake8-pytest-style→ruff.lint.flake8-pytest-styleruff.flake8-quotes→ruff.lint.flake8-quotesruff.flake8-self→ruff.lint.flake8-selfruff.flake8-tidy-imports→ruff.lint.flake8-tidy-importsruff.flake8-type-checking→ruff.lint.flake8-type-checkingruff.flake8-unused-arguments→ruff.lint.flake8-unused-argumentsruff.ignore→ruff.lint.ignoreruff.ignore-init-module-imports→ruff.lint.ignore-init-module-importsruff.isort→ruff.lint.isortruff.logger-objects→ruff.lint.logger-objectsruff.mccabe→ruff.lint.mccaberuff.pep8-naming→ruff.lint.pep8-namingruff.per-file-ignores→ruff.lint.per-file-ignoresruff.pycodestyle→ruff.lint.pycodestyleruff.pydocstyle→ruff.lint.pydocstyleruff.pyflakes→ruff.lint.pyflakesruff.pylint→ruff.lint.pylintruff.pyupgrade→ruff.lint.pyupgraderuff.select→ruff.lint.selectruff.task-tags→ruff.lint.task-tagsruff.typing-modules→ruff.lint.typing-modulesruff.unfixable→ruff.lint.unfixable
Remapped rules
The following rules have been remapped to new codes:
raise-without-from-inside-except:TRY200toB904suspicious-eval-usage:PGH001toS307logging-warn:PGH002toG010static-key-dict-comprehension:RUF011toB035runtime-string-union:TCH006toTCH010
Stabilizations
The following rules have been stabilized and are no longer in preview:
trio-timeout-without-await(TRIO100)trio-sync-call(TRIO105)trio-async-function-with-timeout(TRIO109)trio-unneeded-sleep(TRIO110)trio-zero-sleep-call(TRIO115)unnecessary-escaped-quote(Q004)enumerate-for-loop(SIM113)zip-dict-keys-and-values(SIM911)timeout-error-alias(UP041)flask-debug-true(S201)tarfile-unsafe-members(S202)ssl-insecure-version(S502)ssl-with-bad-defaults(S503)ssl-with-no-version(S504)weak-cryptographic-key(S505)ssh-no-host-key-verification(S507)django-raw-sql(S611)mako-templates(S702)generator-return-from-iter-method(PYI058)runtime-string-union(TCH006)numpy2-deprecation(NPY201)quadratic-list-summation(RUF017)assignment-in-assert(RUF018)unnecessary-key-check(RUF019)never-union(RUF020)direct-logger-instantiation(LOG001)invalid-get-logger-argument(LOG002)exception-without-exc-info(LOG007)undocumented-warn(LOG009)
Fixes for the following rules have been stabilized and are now available without preview:
triple-single-quotes(D300)non-pep604-annotation(UP007)dict-get-with-none-default(SIM910)in-dict-keys(SIM118)collapsible-else-if(PLR5501)if-with-same-arms(SIM114)useless-else-on-loop(PLW0120)unnecessary-literal-union(PYI030)unnecessary-spread(PIE800)error-instead-of-exception(TRY400)redefined-while-unused(F811)duplicate-value(B033)multiple-imports-on-one-line(E401)non-pep585-annotation(UP006)
Fixes for the following rules have been promoted from unsafe to safe:
unaliased-collections-abc-set-import(PYI025)
The following behaviors have been stabilized:
module-import-not-at-top-of-file(E402) allowssys.pathmodifications between importsreimplemented-container-builtin(PIE807) includes lambdas that can be replaced withdictunnecessary-placeholder(PIE790) applies to unnecessary ellipses (...)if-else-block-instead-of-dict-get(SIM401) applies toif-elseexpressions
Preview features
- [
refurb] Implementmetaclass_abcmeta(FURB180) (#9658) - Implement
blank_line_after_nested_stub_classpreview style (#9155) - The preview rule
and-or-ternary(PLR1706) was removed
Bug fixes
- [
flake8-async] Takepathlib.Pathinto account when analyzing async functions (#9703) - [
flake8-return] - fix indentation syntax error (RET505) (#9705) - Detect multi-statement lines in else removal (#9748)
RUF022,RUF023: never add two trailing commas to the end of a sequence (#9698)RUF023: Don't sort__match_args__, only__slots__(#9724)- [
flake8-simplify] - Fix syntax error in autofix (SIM114) (#9704) - [
pylint] Show verbatim constant inmagic-value-comparison(PLR2004) (#9694) - Removing trailing whitespace inside multiline strings is unsafe (#9744)
- Support
IfExpwith dual string arms ininvalid-envvar-default(#9734) - [
pylint] Add__mro_entries__to known dunder methods (PLW3201) (#9706)
Documentation
- Removed rules are now retained in the documentation (#9691)
- Deprecated rules are now indicated in the documentation (#9689)
0.2.1
This release includes support for range formatting (i.e., the ability to format specific lines within a source file).
Preview features
Formatter
Bug fixes
- Skip empty lines when determining base indentation (#9795)
- Drop
__get__and__set__fromunnecessary-dunder-call(#9791) - Respect generic
Protocolin ellipsis removal (#9841) - Revert "Use publicly available Apple Silicon runners (#9726)" (#9834)
Performance
- Skip LibCST parsing for standard dedent adjustments (#9769)
- Remove CST-based fixer for
C408(#9822) - Add our own ignored-names abstractions (#9802)
- Remove CST-based fixers for
C400,C401,C410, andC418(#9819) - Use
AhoCorasickto speed up quote match (#9773) - Remove CST-based fixers for
C405andC409(#9821) - Add fast-path for comment detection (#9808)
- Invert order of checks in
zero-sleep-call(#9766) - Short-circuit typing matches based on imports (#9800)
- Run dunder method rule on methods directly (#9815)
- Track top-level module imports in the semantic model (#9775)
- Slight speed-up for lowercase and uppercase identifier checks (#9798)
- Remove LibCST-based fixer for
C403(#9818)
Documentation
- Update
max-pos-argsexample tomax-positional-args(#9797) - Fixed example code in
weak_cryptographic_key.rs(#9774) - Fix references to deprecated
ANNrules in changelog (#9771) - Fix default for
max-positional-args(#9838)
0.2.2
Highlights include:
- Initial support formatting f-strings (in
--preview). - Support for overriding arbitrary configuration options via the CLI through an expanded
--configargument (e.g.,--config "lint.isort.combine-as-imports=false"). - Significant performance improvements in Ruff's lexer, parser, and lint rules.
Preview features
- Implement minimal f-string formatting (#9642)
- [
pycodestyle] Add blank line(s) rules (E301,E302,E303,E304,E305,E306) (#9266) - [
refurb] Implementreadlines_in_for(FURB129) (#9880)
Rule changes
- [
ruff] Ensure closing parentheses for multiline sequences are always on their own line (RUF022,RUF023) (#9793) - [
numpy] Add missing deprecation violations (NPY002) (#9862) - [
flake8-bandit] Detectmark_safeusages in decorators (#9887) - [
ruff] Expandasyncio-dangling-task(RUF006) to includenew_event_loop(#9976) - [
flake8-pyi] Ignore 'unused' private type dicts in class scopes (#9952)
Formatter
- Docstring formatting: Preserve tab indentation when using
indent-style=tabs(#9915) - Disable top-level docstring formatting for notebooks (#9957)
- Stabilize quote-style's
preservemode (#9922)
CLI
- Allow arbitrary configuration options to be overridden via the CLI (#9599)
Bug fixes
- Make
show-settingsfilters directory-agnostic (#9866) - Respect duplicates when rewriting type aliases (#9905)
- Respect tuple assignments in typing analyzer (#9969)
- Use atomic write when persisting cache (#9981)
- Use non-parenthesized range for
DebugText(#9953) - [
flake8-simplify] Avoid false positive withasyncfor loops (SIM113) (#9996) - [
flake8-trio] Respectasync withintimeout-without-await(#9859) - [
perflint] Catch a wider range of mutations inPERF101(#9955) - [
pycodestyle] FixE30Xpanics on blank lines with trailing white spaces (#9907) - [
pydocstyle] Allow usingparametersas a subsection header (D405) (#9894) - [
pydocstyle] Fix blank-line docstring rules for module-level docstrings (#9878) - [
pylint] Accept 0.0 and 1.0 as common magic values (PLR2004) (#9964) - [
pylint] Avoid suggesting set rewrites for non-hashable types (#9956) - [
ruff] Avoid false negatives with string literals inside of method calls (RUF027) (#9865) - [
ruff] Fix panic on with f-string detection (RUF027) (#9990) - [
ruff] Ignore builtins when detecting missing f-strings (#9849)
Performance
- Use
memchrfor string lexing (#9888) - Use
memchrfor tab-indentation detection (#9853) - Reduce
Result<Tok, LexicalError>size by usingBox<str>instead ofString(#9885) - Reduce size of
Exprfrom 80 to 64 bytes (#9900) - Improve trailing comma rule performance (#9867)
- Remove unnecessary string cloning from the parser (#9884)