mirror of
https://github.com/astral-sh/ruff
synced 2026-01-11 08:34:29 -05:00
56 KiB
56 KiB
Changelog
0.1.11
Preview features
- [
pylint] Implementsuper-without-brackets(W0245) (#9257)
Bug fixes
- Check path string properly in
python -m ruffinvocations (#9367)
Documentation
0.1.10
Preview features
- Improve
dummy_implementationspreview style formatting (#9240) - Normalise Hex and unicode escape sequences in strings (#9280)
- Parenthesize long type annotations in annotated assignments (#9210)
- Parenthesize multi-context managers in
withstatements (#9222) - [
flake8-pyi] Implementgenerator-return-from-iter-method(PYI058) (#9313) - [
pylint] Implementempty-comment(PLR2044) (#9174) - [
refurb] Implementbit-count(FURB161) (#9265) - [
ruff] Addnever-unionrule to detect redundanttyping.NoReturnandtyping.Never(#9217)
CLI
- Add paths to TOML parse errors (#9358)
- Add row and column numbers to formatter parse errors (#9321)
- Improve responsiveness when invoked via Python (#9315)
- Short rule messages should not end with a period (#9345)
Configuration
- Respect runtime-required decorators on functions (#9317)
Bug fixes
- Avoid
asyncio-dangling-taskfor nonlocal and global bindings (#9263) - Escape trailing placeholders in rule documentation (#9301)
- Fix continuation detection following multi-line strings (#9332)
- Fix scoping for generators in named expressions in classes (#9248)
- Port from obsolete wsl crate to is-wsl (#9356)
- Remove special pre-visit for module docstrings (#9261)
- Respect
__str__definitions from super classes (#9338) - Respect
unused-noqaviaper-file-ignores(#9300) - Respect attribute chains when resolving builtin call paths (#9309)
- Treat all
typing_extensionsmembers as typing aliases (#9335) - Use
Displayfor formatter parse errors (#9316) - Wrap subscripted dicts in parens for f-string conversion (#9238)
- [
flake8-annotations] Avoid adding return types to stub methods (#9277) - [
flake8-annotations] Respect mixedreturnandraisecases in return-type analysis (#9310) - [
flake8-bandit] Don't report violations whenSafeLoaderis imported fromyaml.loader(S506) (#9299) - [
pylint] Avoid panic when comment is preceded by Unicode (#9331) - [
pylint] ChangePLR0917error message to match otherPLR09XXmessages (#9308) - [
refurb] Avoid false positives formath-constant(FURB152) (#9290)
Documentation
- Expand target name for better rule documentation (#9302)
- Fix typos found by codespell (#9346)
- [
perflint] DocumentPERF102fix un-safety (#9351) - [
pyupgrade] DocumentUP007fix un-safety (#9306)
0.1.9
Breaking changes
- Add site-packages to default exclusions (#9188)
Preview features
- Fix: Avoid parenthesizing subscript targets and values (#9209)
- [
pylint] Implementtoo-many-locals(PLR0914) (#9163) - Implement
reimplemented_operator(FURB118) (#9171) - Add a rule to detect string members in runtime-evaluated unions (#9143)
- Implement
no_blank_line_before_class_docstringpreview style (#9154)
Rule changes
CONSTANT_CASEvariables are improperly flagged for yoda violation (SIM300) (#9164)- [
flake8-pyi] Cover ParamSpecs and TypeVarTuples (PYI018) (#9198) - [
flake8-bugbear] Add fix forzip-without-explicit-strict(B905) (#9176) - Add fix to automatically remove
printandpprintstatements (T201,T203) (#9208) - Prefer
NevertoNoReturnin auto-typing in Python >= 3.11 (ANN201) (#9213)
Formatter
can_omit_optional_parentheses: Exit early for unparenthesized expressions (#9125)- Fix
dynamicmode with doctests so that it doesn't exceed configured line width (#9129) - Fix
can_omit_optional_parenthesesfor expressions with a right most fstring (#9124) - Add
target_versionto formatter options (#9220)
CLI
- Update
ruff format --checkto display message for already formatted files (#9153)
Bug fixes
- Reverse order of arguments for
operator.contains(#9192) - Iterate over lambdas in deferred type annotations (#9175)
- Fix panic in
D208with multibyte indent (#9147) - Add support for
NoReturnin auto-return-typing (#9206) - Allow removal of
typingfromexempt-modules(#9214) - Avoid
mutable-class-defaultviolations for Pydantic subclasses (#9187) - Fix dropped union expressions for piped non-types in
PYI055autofix (#9161) - Enable annotation quoting for multi-line expressions (#9142)
- Deduplicate edits when quoting annotations (#9140)
- Prevent invalid utf8 indexing in cell magic detection (#9146)
- Avoid nested quotations in auto-quoting fix (#9168)
- Add base-class inheritance detection to flake8-django rules (#9151)
- Avoid
asyncio-dangling-taskviolations on shadowed bindings (#9215)
Documentation
- Fix blog post URL in changelog (#9119)
- Add error suppression hint for multi-line strings (#9205)
- Fix typo in SemanticModel.parent_expression docstring (#9167)
- Document link between import sorting and formatter (#9117)
0.1.8
This release includes opt-in support for formatting Python snippets within
docstrings via the docstring-code-format setting.
Check out the blog post for more details!
Preview features
- Add
"preserve"quote-style to mimic Black's skip-string-normalization (#8822) - Implement
prefer_splitting_right_hand_side_of_assignmentspreview style (#8943) - [
pycodestyle] Add fix forunexpected-spaces-around-keyword-parameter-equals(#9072) - [
pycodestyle] Add fix for comment-related whitespace rules (#9075) - [
pycodestyle] Allowsys.pathmodifications between imports (#9047) - [
refurb] Implementhashlib-digest-hex(FURB181) (#9077)
Rule changes
- Allow
flake8-type-checkingrules to automatically quote runtime-evaluated references (#6001) - Allow transparent cell magics in Jupyter Notebooks (#8911)
- [
flake8-annotations] AvoidANN2xxfixes for abstract methods with empty bodies (#9034) - [
flake8-self] Ignore underscore references in type annotations (#9036) - [
pep8-naming] Allow class names whenapps.get_modelis a non-string (#9065) - [
pycodestyle] Allowmatplotlib.usecalls to intersperse imports (#9094) - [
pyflakes] Support fixing unused assignments in tuples by renaming variables (F841) (#9107) - [
pylint] Add fix forsubprocess-run-without-check(PLW1510) (#6708)
Formatter
- Add
docstring-code-formatknob to enable docstring snippet formatting (#8854) - Use double quotes for all docstrings, including single-quoted docstrings (#9020)
- Implement "dynamic" line width mode for docstring code formatting (#9098)
- Support reformatting Markdown code blocks (#9030)
- add support for formatting reStructuredText code snippets (#9003)
- Avoid trailing comma for single-argument with positional separator (#9076)
- Fix handling of trailing target comment (#9051)
CLI
- Hide unsafe fix suggestions when explicitly disabled (#9095)
- Add SARIF support to
--output-format(#9078)
Bug fixes
- Apply unnecessary index rule prior to enumerate rewrite (#9012)
- [
flake8-err-msg] AllowEMfixes even ifmsgvariable is defined (#9059) - [
flake8-pie] Prevent keyword arguments duplication (#8450) - [
flake8-pie] Respect trailing comma inunnecessary-dict-kwargs(PIE804) (#9015) - [
flake8-raise] Avoid removing parentheses on ctypes.WinError (#9027) - [
isort] Avoid invalid combination offorce-sort-within-typesandlines-between-types(#9041) - [
isort] Ensure that from-style imports are always ordered first in__future__(#9039) - [
pycodestyle] Allow tab indentation before keyword (#9099) - [
pylint] Ignore@overridesand@overloadsfortoo-many-positional(#9000) - [
pyupgrade] Enableprintf-string-formattingfix with comments on right-hand side (#9037) - [
refurb] Makemath-constant(FURB152) rule more targeted (#9054) - [
refurb] Support floating-point base inredundant-log-base(FURB163) (#9100) - [
ruff] Detectunused-asyncio-dangling-task(RUF006) on unused assignments (#9060)
0.1.7
Preview features
- Implement multiline dictionary and list hugging for preview style (#8293)
- Implement the
fix_power_op_line_lengthpreview style (#8947) - Use Python version to determine typing rewrite safety (#8919)
- [
flake8-annotations] Enable auto-return-type involvingOptionalandUnionannotations (#8885) - [
flake8-bandit] Implementdjango-raw-sql(S611) (#8651) - [
flake8-bandit] Implementtarfile-unsafe-members(S202) (#8829) - [
flake8-pyi] Implement fix forunnecessary-literal-union(PYI030) (#7934) - [
flake8-simplify] Extenddict-get-with-none-default(SIM910) to non-literals (#8762) - [
pylint] - addunnecessary-list-index-lookup(PLR1736) + autofix (#7999) - [
pylint] - implement R0202 and R0203 with autofixes (#8335) - [
pylint] Implementrepeated-keyword(PLe1132) (#8706) - [
pylint] Implementtoo-many-positional(PLR0917) (#8995) - [
pylint] Implementunnecessary-dict-index-lookup(PLR1733) (#8036) - [
refurb] Implementredundant-log-base(FURB163) (#8842)
Rule changes
- [
flake8-boolean-trap] Allow booleans in@overridemethods (#8882) - [
flake8-bugbear] AvoidB015,B018for last expression in a cell (#8815) - [
flake8-pie] Allow ellipses for enum values in stub files (#8825) - [
flake8-pyi] Check PEP 695 type aliases forsnake-case-type-aliasandt-suffixed-type-alias(#8966) - [
flake8-pyi] Check for kwarg and varargNoReturntype annotations (#8948) - [
flake8-simplify] Omit select context managers fromSIM117(#8801) - [
pep8-naming] Allow Django model loads innon-lowercase-variable-in-function(N806) (#8917) - [
pycodestyle] AvoidE703for last expression in a cell (#8821) - [
pycodestyle] UpdateE402to work at cell level for notebooks (#8872) - [
pydocstyle] AvoidD100for Jupyter Notebooks (#8816) - [
pylint] Implement fix forunspecified-encoding(PLW1514) (#8928)
Formatter
- Avoid unstable formatting in ellipsis-only body with trailing comment (#8984)
- Inline trailing comments for type alias similar to assignments (#8941)
- Insert trailing comma when function breaks with single argument (#8921)
CLI
- Update
ruff checkandruff formatto default to the current directory (#8791) - Stop at the first resolved parent configuration (#8864)
Configuration
- [
pylint] Defaultmax-positional-argstomax-args(#8998) - [
pylint] Addallow-dunder-method-namessetting forbad-dunder-method-name(PLW3201) (#8812) - [
isort] Add support forfrom-firstsetting (#8663) - [
isort] Add support forlength-sortsettings (#8841)
Bug fixes
- Add support for
@functools.singledispatch(#8934) - Avoid off-by-one error in stripping noqa following multi-byte char (#8979)
- Avoid off-by-one error in with-item named expressions (#8915)
- Avoid syntax error via invalid ur string prefix (#8971)
- Avoid underflow in
get_modelmatching (#8965) - Avoid unnecessary index diagnostics when value is modified (#8970)
- Convert over-indentation rule to use number of characters (#8983)
- Detect implicit returns in auto-return-types (#8952)
- Fix start >= end error in over-indentation (#8982)
- Ignore
@overloadand@overridemethods for too-many-arguments checks (#8954) - Lexer start of line is false only for
Mode::Expression(#8880) - Mark
pydantic_settings.BaseSettingsas having default copy semantics (#8793) - Respect dictionary unpacking in
NamedTupleassignments (#8810) - Respect local subclasses in
flake8-type-checking(#8768) - Support type alias statements in simple statement positions (#8916)
- [
flake8-annotations] Avoid filtering out un-representable types in return annotation (#8881) - [
flake8-pie] Retain extra ellipses in protocols and abstract methods (#8769) - [
flake8-pyi] Respect local enum subclasses insimple-defaults(PYI052) (#8767) - [
flake8-trio] Use correct range forTRIO115fix (#8933) - [
flake8-trio] Use full arguments range for zero-sleep-call (#8936) - [
isort] fix: mark__main__as first-party import (#8805) - [
pep8-naming] AvoidN806errors for type alias statements (#8785) - [
perflint] AvoidPERF101if there's an append in loop body (#8809) - [
pycodestyle] Allow space-before-colon after end-of-slice (#8838) - [
pydocstyle] Avoid non-character breaks inover-indentation(D208) (#8866) - [
pydocstyle] Ignore underlines when determining docstring logical lines (#8929) - [
pylint] Extendself-assigning-variableto multi-target assignments (#8839) - [
tryceratops] Avoid repeated triggers in nestedtryceratopsdiagnostics (#8772)
Documentation
- Add advice for fixing RUF008 when mutability is not desired (#8853)
- Added the command to run ruff using pkgx to the installation.md (#8955)
- Document fix safety for flake8-comprehensions and some pyupgrade rules (#8918)
- Fix doc formatting for zero-sleep-call (#8937)
- Remove duplicate imports from os-stat documentation (#8930)
- Replace generated reference to MkDocs (#8806)
- Update Arch Linux package URL in installation.md (#8802)
- [
flake8-pyi] Fix error int-suffixed-type-alias(PYI043) example (#8963) - [
flake8-pyi] Improve motivation forcustom-type-var-return-type(PYI019) (#8766)
0.1.6
Preview features
- [
flake8-boolean-trap] Extendboolean-type-hint-positional-argument(FBT001) to include booleans in unions (#7501) - [
flake8-pie] Extendreimplemented-list-builtin(PIE807) todictreimplementations (#8608) - [
flake8-pie] Extendunnecessary-pass(PIE790) to include ellipses (...) (#8641) - [
flake8-pie] Implement fix forunnecessary-spread(PIE800) (#8668) - [
flake8-quotes] Implementunnecessary-escaped-quote(Q004) (#8630) - [
pycodestyle] Implement fix formultiple-spaces-after-keyword(E271) andmultiple-spaces-before-keyword(E272) (#8622) - [
pycodestyle] Implement fix formultiple-spaces-after-operator(E222) andmultiple-spaces-before-operator(E221) (#8623) - [
pyflakes] Extendis-literal(F632) to include comparisons against mutable initializers (#8607) - [
pylint] Implementredefined-argument-from-local(PLR1704) (#8159) - [
pylint] Implement fix forunnecessary-lambda(PLW0108) (#8621) - [
refurb] Implementif-expr-min-max(FURB136) (#8664) - [
refurb] Implementmath-constant(FURB152) (#8727)
Rule changes
- [
flake8-annotations] Add autotyping-like return type inference for annotation rules (#8643) - [
flake8-future-annotations] Implement fix forfuture-required-type-annotation(FA102) (#8711) - [
flake8-implicit-namespace-package] Avoid missing namespace violations in scripts with shebangs (#8710) - [
pydocstyle] Updateover-indentation(D208) to preserve indentation offsets when fixing overindented lines (#8699) - [
pyupgrade] Refinetimeout-error-alias(UP041) to remove false positives (#8587)
Formatter
- Fix instability in
awaitformatting with fluent style (#8676) - Compare formatted and unformatted ASTs during formatter tests (#8624)
- Preserve trailing semicolon for Notebooks (#8590)
CLI
- Improve debug printing for resolving origin of config settings (#8729)
- Write unchanged, excluded files to stdout when read via stdin (#8596)
Configuration
- [
isort] Support disabling sections withno-sections = true(#8657) - [
pep8-naming] Support local and dynamic class- and static-method decorators (#8592) - [
pydocstyle] Allow overriding pydocstyle convention rules (#8586)
Bug fixes
- Avoid syntax error via importing
trio.lowlevel(#8730) - Omit unrolled augmented assignments in
PIE794(#8634) - Slice source code instead of generating it for
EMfixes (#7746) - Allow whitespace around colon in slices for
whitespace-before-punctuation(E203) (#8654) - Use function range for
no-self-use(#8637) - F-strings doesn't contain bytes literal for
PLW0129(#8675) - Improve detection of
TYPE_CHECKINGblocks imported fromtyping_extensionsor_typeshed(#8429) - Treat display as a builtin in IPython (#8707)
- Avoid
FURB113autofix if comments are present (#8494) - Consider the new f-string tokens for
flake8-commas(#8582) - Remove erroneous bad-dunder-name reference (#8742)
- Avoid recommending Self usages in metaclasses (#8639)
- Detect runtime-evaluated base classes defined in the current file (#8572)
- Avoid inserting trailing commas within f-strings (#8574)
- Remove incorrect deprecation label for stdout and stderr (#8743)
- Fix unnecessary parentheses in UP007 fix (#8610)
- Remove repeated and erroneous scoped settings headers in docs (#8670)
- Trim trailing empty strings when converting to f-strings (#8712)
- Fix ordering for
force-sort-within-sections(#8665) - Run unicode prefix rule over tokens (#8709)
- Update UP032 to unescape curly braces in literal parts of converted strings (#8697)
- List all ipython builtins (#8719)
Documentation
- Document conventions in the FAQ (#8638)
- Redirect from rule codes to rule pages in docs (#8636)
- Fix permalink to convention setting (#8575)
0.1.5
Preview features
- [
flake8-bandit] Implementmako-templates(S702) (#8533) - [
flake8-trio] ImplementTRIO105(#8490) - [
flake8-trio] ImplementTRIO109(#8534) - [
flake8-trio] ImplementTRIO110(#8537) - [
flake8-trio] ImplementTRIO115(#8486) - [
refurb] Implementtype-none-comparison(FURB169) (#8487) - Flag all comparisons against builtin types in
E721(#8491) - Make
SIM118fix as safe when the expression is a known dictionary (#8525)
Formatter
- Fix multiline lambda expression statement formatting (#8466)
CLI
- Add hidden
--extensionto override inference of source type from file extension (#8373)
Configuration
- Account for selector specificity when merging
extend_unsafe_fixesandoverride extend_safe_fixes(#8444) - Add support for disabling cache with
RUFF_NO_CACHEenvironment variable (#8538)
Bug fixes
- [
E721] Flag comparisons tomemoryview(#8485) - Allow collapsed-ellipsis bodies in other statements (#8499)
- Avoid
D301autofix foruprefixed strings (#8495) - Only flag
flake8-triorules whentrioimport is present (#8550) - Reject more syntactically invalid Python programs (#8524)
- Avoid raising
TRIO115violations fortrio.sleep(...)calls with non-number values (#8532) - Fix
F841false negative on assignment to multiple variables (#8489)
Documentation
- Fix link to isort
known-first-party(#8562) - Add notes on fix safety to a few rules (#8500)
- Add missing toml config tabs (#8512)
- Add instructions for configuration of Emacs (#8488)
- Improve detail link contrast in dark mode (#8548)
- Fix typo in example (#8506)
- Added tabs for configuration files in the documentation (#8480)
- Recommend
project.requires-pythonovertarget-version(#8513) - Add singleton escape hatch to
B008documentation (#8501) - Fix tab configuration docs (#8502)
0.1.4
Preview features
- [
flake8-trio] Implementtimeout-without-await(TRIO001) (#8439) - [
numpy] Implement NumPy 2.0 migration rule (NPY200) (#7702) - [
pylint] Implementbad-open-mode(W1501) (#8294) - [
pylint] Implementimport-outside-toplevel(C0415) rule (#5180) - [
pylint] Implementuseless-with-lock(W2101) (#8321) - [
pyupgrade] Implementtimeout-error-alias(UP041) (#8476) - [
refurb] Implementisinstance-type-none(FURB168) (#8308) - Detect confusable Unicode-to-Unicode units in
RUF001,RUF002, andRUF003(#4430) - Add newline after module docstrings in preview style (#8283)
Formatter
- Add a note on line-too-long to the formatter docs (#8314)
- Preserve trailing statement semicolons when using
fmt: skip(#8273) - Preserve trailing semicolons when using
fmt: off(#8275) - Avoid duplicating linter-formatter compatibility warnings (#8292)
- Avoid inserting a newline after function docstrings (#8375)
- Insert newline between docstring and following own line comment (#8216)
- Split tuples in return positions by comma first (#8280)
- Avoid treating byte strings as docstrings (#8350)
- Add
--line-lengthoption toformatcommand (#8363) - Avoid parenthesizing unsplittable because of comments (#8431)
CLI
- Add
--output-formattoruff ruleandruff linter(#8203)
Bug fixes
- Respect
--force-excludeinlint.excludeandformat.exclude(#8393) - Respect
--extend-per-file-ignoreson the CLI (#8329) - Extend
bad-dunder-method-nameto permit__index__(#8300) - Fix panic with 8 in octal escape (#8356)
- Avoid raising
D300when both triple quote styles are present (#8462) - Consider unterminated f-strings in
FStringRanges(#8154) - Avoid including literal
shell=Truefor truthy, non-Truediagnostics (#8359) - Avoid triggering single-element test for starred expressions (#8433)
- Detect and ignore Jupyter automagics (#8398)
- Fix invalid E231 error with f-strings (#8369)
- Avoid triggering
NamedTuplerewrite with starred annotation (#8434) - Avoid un-setting bracket flag in logical lines (#8380)
- Place 'r' prefix before 'f' for raw format strings (#8464)
- Remove trailing periods from NumPy 2.0 code actions (#8475)
- Fix bug where
PLE1307was raised when formatting%cwith characters (#8407) - Remove unicode flag from comparable (#8440)
- Improve B015 message (#8295)
- Use
fixedOverflowWidgetsfor playground popover (#8458) - Mark
byte_boundsas a non-backwards-compatible NumPy 2.0 change (#8474)
Internals
- Add a dedicated cache directory per Ruff version (#8333)
- Allow selective caching for
--fixand--diff(#8316) - Improve performance of comment parsing (#8193)
- Improve performance of string parsing (#8227)
- Use a dedicated sort key for isort import sorting (#7963)
0.1.3
This release includes a variety of improvements to the Ruff formatter, removing several known and unintentional deviations from Black.
Formatter
- Avoid space around pow for
None,TrueandFalse(#8189) - Avoid sorting all paths in the format command (#8181)
- Insert necessary blank line between class and leading comments (#8224)
- Avoid introducing new parentheses in annotated assignments (#8233)
- Refine the warnings about incompatible linter options (#8196)
- Add test and basic implementation for formatter preview mode (#8044)
- Refine warning about incompatible
isortsettings (#8192) - Only omit optional parentheses for starting or ending with parentheses (#8238)
- Use source type to determine parser mode for formatting (#8205)
- Don't warn about magic trailing comma when
isort.force-single-lineis true (#8244) - Use
SourceKind::difffor formatter (#8240) - Fix
fmt:offwith trailing child comment (#8234) - Formatter parentheses support for
IpyEscapeCommand(#8207)
Linter
- [
pylint] Add buffer methods tobad-dunder-method-name(PLW3201) exclusions (#8190) - Match rule prefixes from
externalcodes setting inunused-noqa(#8177) - Use
line-lengthsetting for isort in lieu ofpycodestyle.max-line-length(#8235) - Update fix for
unnecessary-paren-on-raise-exceptionto unsafe for unknown types (#8231) - Correct quick fix message for
W605(#8255)
Documentation
- Fix typo in max-doc-length documentation (#8201)
- Improve documentation around linter-formatter conflicts (#8257)
- Fix link to error suppression documentation in
unused-noqa(#8172) - Add
externaloption tounused-noqadocumentation (#8171) - Add title attribute to icons (#8060)
- Clarify unsafe case in RSE102 (#8256)
- Fix skipping formatting examples (#8210)
- docs: fix name of
magic-trailing-commaoption in README (#8200) - Add note about scope of rule changing in versioning policy (#8169)
- Document: Fix default lint rules (#8218)
- Fix a wrong setting in configuration.md (#8186)
- Fix misspelled TOML headers in the tutorial (#8209)
0.1.2
This release includes the Beta version of the Ruff formatter — an extremely fast, Black-compatible Python formatter.
Try it today with ruff format! Check out the blog post and read the docs.
Preview features
- [
pylint] Implementnon-ascii-module-import(C2403) (#8056) - [
pylint] implementnon-ascii-name(C2401) (#8038) - [
pylint] Implement unnecessary-lambda (W0108) (#7953) - [
refurb] Implementread-whole-file(FURB101) (#7682) - Add fix for
E223,E224, andE242(#8143) - Add fix for
E225,E226,E227, andE228(#8136) - Add fix for
E252(#8142) - Add fix for
E261(#8114) - Add fix for
E273andE274(#8144) - Add fix for
E275(#8133) - Update
SIM401to catch ternary operations (#7415) - Update
E721to allowisandisnot for direct type comparisons (#7905)
Rule changes
- Add
backports.strenumtodeprecated-imports(#8113) - Update
SIM112to ignorehttps_proxy,http_proxy, andno_proxy(#8140) - Update fix for
literal-membership(PLR6201) to be unsafe (#8097) - Update fix for
mutable-argument-defaults(B006) to be unsafe (#8108)
Formatter
- Change
line-endingdefault toauto(#8057) - Respect parenthesized generators in
has_own_parentheses(#8100) - Add caching to formatter (#8089)
- Remove
--line-lengthoption fromformatcommand (#8131) - Add formatter to
line-lengthdocumentation (#8150) - Warn about incompatible formatter options (#8088)
- Fix range of unparenthesized tuple subject in match statement (#8101)
- Remove experimental formatter warning (#8148)
- Don't move type param opening parenthesis comment (#8163)
- Update versions in format benchmark script (#8110)
- Avoid loading files for cached format results (#8134)
CLI
- Show the
ruff formatcommand in help menus (#8167) - Add
ruff versioncommand with long version display (#8034)
Configuration
- New
pycodestyle.max-line-lengthoption (#8039)
Bug fixes
- Detect
sys.version_infoslices inoutdated-version-block(#8112) - Avoid if-else simplification for
TYPE_CHECKINGblocks (#8072) - Avoid false-positive print separator diagnostic with starred argument (#8079)
Documentation
- Fix message for
too-many-argumentslint (#8092) - Fix
extend-unsafe-fixesandextend-safe-fixesexample (#8139) - Add links to
flake8-import-conventionsoptions (#8115) - Rework the documentation to incorporate the Ruff formatter (#7732)
- Fix
OptionsJSON schema description (#8081) - Fix typo (
pytext->pytest) (#8117) - Improve
magic-value-comparisonexample in docs (#8111)
0.1.1
Rule changes
- Add unsafe fix for
escape-sequence-in-docstring(D301) (#7970)
Configuration
- Respect
#(deprecated)attribute in configuration options (#8035) - Add
[format|lint].excludeoptions (#8000) - Respect
tab-sizesetting in formatter (#8006) - Add
lint.preview(#8002)
Preview features
- [
pylint] Implementliteral-membership(PLR6201) (#7973) - [
pylint] Implementtoo-many-boolean-expressions(PLR0916) (#7975) - [
pylint] Implementmisplaced-bare-raise(E0704) (#7961) - [
pylint] Implementglobal-at-module-level(W0604) (#8058) - [
pylint] Implementunspecified-encoding(PLW1514) (#7939) - Add fix for
triple-single-quotes(D300) (#7967)
Formatter
- New code style badge for
ruff format(#7878) - Fix comments outside expression parentheses (#7873)
- Add
--target-versiontoruff format(#8055) - Skip over parentheses when detecting
inkeyword (#8054) - Add
--diffoption toruff format(#7937) - Insert newline after nested function or class statements (#7946)
- Use
passover ellipsis in non-function/class contexts (#8049)
Bug fixes
- Lazily evaluate all PEP 695 type alias values (#8033)
- Avoid failed assertion when showing fixes from stdin (#8029)
- Avoid flagging HTTP and HTTPS literals in urllib-open (#8046)
- Avoid flagging
bad-dunder-method-namefor_(#8015) - Remove Python 2-only methods from
URLOpenaudit (#8047) - Use set bracket replacement for
iteration-over-setto preserve whitespace and comments (#8001)
Documentation
- Update tutorial to match revised Ruff defaults (#8066)
- Update rule
B005docs (#8028) - Update GitHub actions example in docs to use
--output-format(#8014) - Document
lint.previewandformat.preview(#8032) - Clarify that new rules should be added to
RuleGroup::Preview. (#7989)
0.1.0
This is the first release which uses the CHANGELOG file. See GitHub Releases for prior changelog entries.
Read Ruff's new versioning policy.
Breaking changes
- Unsafe fixes are no longer displayed or applied without opt-in (#7769)
- Drop formatting specific rules from the default set (#7900)
- The deprecated
formatsetting has been removed (#7984)- The
formatsetting cannot be used to configure the output format, useoutput-formatinstead - The
RUFF_FORMATenvironment variable is ignored, useRUFF_OUTPUT_FORMATinstead - The
--formatoption has been removed fromruff check, use--output-formatinstead
- The
Rule changes
- Extend
reimplemented-starmap(FURB140) to catch calls with a single and starred argument (#7768) - Improve cases covered by
RUF015(#7848) - Update
SIM15to allowopenfollowed byclose(#7916) - Respect
msgspec.Structdefault-copy semantics inRUF012(#7786) - Add
sqlalchemymethods to `flake8-boolean-trap`` exclusion list (#7874) - Add fix for
PLR1714(#7910) - Add fix for
PIE804(#7884) - Add fix for
PLC0208(#7887) - Add fix for
PYI055(#7886) - Update
non-pep695-type-aliasto require--unsafe-fixesoutside of stub files (#7836) - Improve fix message for
UP018(#7913) - Update
PLW3201to supportEnumsunder names (#7987)
Preview features
- Only show warnings for empty preview selectors when enabling rules (#7842)
- Add
unnecessary-key-checkto simplifykey in dct and dct[key]todct.get(key)(#7895) - Add
assignment-in-assertto prevent walrus expressions in assert statements (#7856) - [
refurb] Addsingle-item-membership-test(FURB171) (#7815) - [
pylint] Addand-or-ternary(R1706) (#7811)
New rules are added in preview.
Configuration
- Add
unsafe-fixessetting (#7769) - Add
extend-safe-fixesandextend-unsafe-fixesfor promoting and demoting fixes (#7841)
CLI
- Added
--unsafe-fixesoption for opt-in to display and apply unsafe fixes (#7769) - Fix use of deprecated
--formatoption in warning (#7837) - Show changed files when running under
--check(#7788) - Write summary messages to stderr when fixing via stdin instead of omitting them (#7838)
- Update fix summary message in
check --diffto include unsafe fix hints (#7790) - Add notebook
cellfield to JSON output format (#7664) - Rename applicability levels to
Safe,Unsafe, andDisplay(#7843)
Bug fixes
- Fix bug where f-strings were allowed in match pattern literal (#7857)
- Fix
SIM110with a yield in the condition (#7801) - Preserve trailing comments in
C414fixes (#7775) - Check sequence type before triggering
unnecessary-enumeratelensuggestion (#7781) - Use correct start location for class/function clause header (#7802)
- Fix incorrect fixes for
SIM101(#7798) - Format comment before parameter default correctly (#7870)
- Fix
E251false positive inside f-strings (#7894) - Allow bindings to be created and referenced within annotations (#7885)
- Show per-cell diffs when analyzing notebooks over
stdin(#7789) - Avoid curly brace escape in f-string format spec (#7780)
- Fix lexing single-quoted f-string with multi-line format spec (#7787)
- Consider nursery rules to be in-preview for
ruff rule(#7812) - Report precise location for invalid conversion flag (#7809)
- Visit pattern match guard as a boolean test (#7911)
- Respect
--unfixableinISCrules (#7917) - Fix edge case with
PIE804(#7922) - Show custom message in
PTH118forPath.joinpathwith starred arguments (#7852) - Fix false negative in
outdated-version-blockwhen using greater than comparisons (#7920) - Avoid converting f-strings within Django
gettextcalls (#7898) - Fix false positive in
PLR6301(#7933) - Treat type aliases as typing-only expressions e.g. resolves false positive in
TCH004(#7968) - Resolve
cache-dirrelative to project root (#7962) - Respect subscripted base classes in type-checking rules e.g. resolves false positive in
TCH003(#7954) - Fix JSON schema limit for
line-length(#7883) - Fix commented-out
coalescekeyword (#7876)
Documentation
- Document
reimplemented-starmapperformance effects (#7846) - Default to following the system dark/light mode (#7888)
- Add documentation for fixes (#7901)
- Fix typo in docs of
PLR6301(#7831) - Update
UP038docs to note that it results in slower code (#7872) - crlf -> cr-lf (#7766)
- Add an example of an unsafe fix (#7924)
- Fix documented examples for
unnecessary-subscript-reversal(#7774) - Correct error in tuple example in ruff formatter docs (#7822)
- Add versioning policy to documentation (#7923)
- Fix invalid code in
FURB177example (#7832)
Formatter
- Less scary
ruff formatmessage (#7867) - Remove spaces from import statements (#7859)
- Formatter quoting for f-strings with triple quotes (#7826)
- Update
ruff_python_formattergenerate.py comment (#7850) - Document one-call chaining deviation (#7767)
- Allow f-string modifications in line-shrinking cases (#7818)
- Add trailing comment deviation to README (#7827)
- Add trailing zero between dot and exponential (#7956)
- Force parentheses for power operations in unary expressions (#7955)
Playground
- Fix playground
Quick Fixaction (#7824)