Skip to content

Latest commit

 

History

History
457 lines (359 loc) · 34 KB

CHANGELOG.md

File metadata and controls

457 lines (359 loc) · 34 KB

Changelog

0.1.6

Preview features

  • [flake8-boolean-trap] Extend boolean-type-hint-positional-argument (FBT001) to include booleans in unions (#7501)
  • [flake8-pie] Extend reimplemented-list-builtin (PIE807) to dict reimplementations (#8608)
  • [flake8-pie] Extend unnecessary-pass (PIE790) to include ellipses (...) (#8641)
  • [flake8-pie] Implement fix for unnecessary-spread (PIE800) (#8668)
  • [flake8-quotes] Implement unnecessary-escaped-quote (Q004) (#8630)
  • [pycodestyle] Implement fix for multiple-spaces-after-keyword (E271) and multiple-spaces-before-keyword (E272) (#8622)
  • [pycodestyle] Implement fix for multiple-spaces-after-operator (E222) and multiple-spaces-before-operator (E221) (#8623)
  • [pyflakes] Extend is-literal (F632) to include comparisons against mutable initializers (#8607)
  • [pylint] Implement redefined-argument-from-local (PLR1704) (#8159)
  • [pylint] Implement fix for unnecessary-lambda (PLW0108) (#8621)
  • [refurb] Implement if-expr-min-max (FURB136) (#8664)
  • [refurb] Implement math-constant (FURB152) (#8727)

Rule changes

  • [flake8-annotations] Add autotyping-like return type inference for annotation rules (#8643)
  • [flake8-future-annotations] Implement fix for future-required-type-annotation (FA102) (#8711)
  • [flake8-implicit-namespace-package] Avoid missing namespace violations in scripts with shebangs (#8710)
  • [pydocstyle] Update over-indentation (D208) to preserve indentation offsets when fixing overindented lines (#8699)
  • [pyupgrade] Refine timeout-error-alias (UP041) to remove false positives (#8587)

Formatter

  • Fix instability in await formatting 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 with no-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 EM fixes (#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_CHECKING blocks imported from typing_extensions or _typeshed (#8429)
  • Treat display as a builtin in IPython (#8707)
  • Avoid FURB113 autofix 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] Implement mako-templates (S702) (#8533)
  • [flake8-trio] Implement TRIO105 (#8490)
  • [flake8-trio] Implement TRIO109 (#8534)
  • [flake8-trio] Implement TRIO110 (#8537)
  • [flake8-trio] Implement TRIO115 (#8486)
  • [refurb] Implement type-none-comparison (FURB169) (#8487)
  • Flag all comparisons against builtin types in E721 (#8491)
  • Make SIM118 fix as safe when the expression is a known dictionary (#8525)

Formatter

  • Fix multiline lambda expression statement formatting (#8466)

CLI

  • Add hidden --extension to override inference of source type from file extension (#8373)

Configuration

  • Account for selector specificity when merging extend_unsafe_fixes and override extend_safe_fixes (#8444)
  • Add support for disabling cache with RUFF_NO_CACHE environment variable (#8538)

Bug fixes

  • [E721] Flag comparisons to memoryview (#8485)
  • Allow collapsed-ellipsis bodies in other statements (#8499)
  • Avoid D301 autofix for u prefixed strings (#8495)
  • Only flag flake8-trio rules when trio import is present (#8550)
  • Reject more syntactically invalid Python programs (#8524)
  • Avoid raising TRIO115 violations for trio.sleep(...) calls with non-number values (#8532)
  • Fix F841 false 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-python over target-version (#8513)
  • Add singleton escape hatch to B008 documentation (#8501)
  • Fix tab configuration docs (#8502)

0.1.4

Preview features

  • [flake8-trio] Implement timeout-without-await (TRIO001) (#8439)
  • [numpy] Implement NumPy 2.0 migration rule (NPY200) (#7702)
  • [pylint] Implement bad-open-mode (W1501) (#8294)
  • [pylint] Implement import-outside-toplevel (C0415) rule (#5180)
  • [pylint] Implement useless-with-lock (W2101) (#8321)
  • [pyupgrade] Implement timeout-error-alias (UP041) (#8476)
  • [refurb] Implement isinstance-type-none (FURB168) (#8308)
  • Detect confusable Unicode-to-Unicode units in RUF001, RUF002, and RUF003 (#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-length option to format command (#8363)
  • Avoid parenthesizing unsplittable because of comments (#8431)

CLI

  • Add --output-format to ruff rule and ruff linter (#8203)

Bug fixes

  • Respect --force-exclude in lint.exclude and format.exclude (#8393)
  • Respect --extend-per-file-ignores on the CLI (#8329)
  • Extend bad-dunder-method-name to permit __index__ (#8300)
  • Fix panic with 8 in octal escape (#8356)
  • Avoid raising D300 when both triple quote styles are present (#8462)
  • Consider unterminated f-strings in FStringRanges (#8154)
  • Avoid including literal shell=True for truthy, non-True diagnostics (#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 NamedTuple rewrite 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 PLE1307 was raised when formatting %c with characters (#8407)
  • Remove unicode flag from comparable (#8440)
  • Improve B015 message (#8295)
  • Use fixedOverflowWidgets for playground popover (#8458)
  • Mark byte_bounds as a non-backwards-compatible NumPy 2.0 change (#8474)

Internals

  • Add a dedicated cache directory per Ruff version (#8333)
  • Allow selective caching for --fix and --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, True and False (#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 isort settings (#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-line is true (#8244)
  • Use SourceKind::diff for formatter (#8240)
  • Fix fmt:off with trailing child comment (#8234)
  • Formatter parentheses support for IpyEscapeCommand (#8207)

Linter

  • [pylint] Add buffer methods to bad-dunder-method-name (PLW3201) exclusions (#8190)
  • Match rule prefixes from external codes setting in unused-noqa (#8177)
  • Use line-length setting for isort in lieu of pycodestyle.max-line-length (#8235)
  • Update fix for unnecessary-paren-on-raise-exception to 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 external option to unused-noqa documentation (#8171)
  • Add title attribute to icons (#8060)
  • Clarify unsafe case in RSE102 (#8256)
  • Fix skipping formatting examples (#8210)
  • docs: fix name of magic-trailing-comma option 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] Implement non-ascii-module-import (C2403) (#8056)
  • [pylint] implement non-ascii-name (C2401) (#8038)
  • [pylint] Implement unnecessary-lambda (W0108) (#7953)
  • [refurb] Implement read-whole-file (FURB101) (#7682)
  • Add fix for E223, E224, and E242 (#8143)
  • Add fix for E225, E226, E227, and E228 (#8136)
  • Add fix for E252 (#8142)
  • Add fix for E261 (#8114)
  • Add fix for E273 and E274 (#8144)
  • Add fix for E275 (#8133)
  • Update SIM401 to catch ternary operations (#7415)
  • Update E721 to allow is and is not for direct type comparisons (#7905)

Rule changes

  • Add backports.strenum to deprecated-imports (#8113)
  • Update SIM112 to ignore https_proxy, http_proxy, and no_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-ending default to auto (#8057)
  • Respect parenthesized generators in has_own_parentheses (#8100)
  • Add caching to formatter (#8089)
  • Remove --line-length option from format command (#8131)
  • Add formatter to line-length documentation (#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 format command in help menus (#8167)
  • Add ruff version command with long version display (#8034)

Configuration

  • New pycodestyle.max-line-length option (#8039)

Bug fixes

  • Detect sys.version_info slices in outdated-version-block (#8112)
  • Avoid if-else simplification for TYPE_CHECKING blocks (#8072)
  • Avoid false-positive print separator diagnostic with starred argument (#8079)

Documentation

  • Fix message for too-many-arguments lint (#8092)
  • Fix extend-unsafe-fixes and extend-safe-fixes example (#8139)
  • Add links to flake8-import-conventions options (#8115)
  • Rework the documentation to incorporate the Ruff formatter (#7732)
  • Fix Options JSON schema description (#8081)
  • Fix typo (pytext -> pytest) (#8117)
  • Improve magic-value-comparison example 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].exclude options (#8000)
  • Respect tab-size setting in formatter (#8006)
  • Add lint.preview (#8002)

Preview features

  • [pylint] Implement literal-membership (PLR6201) (#7973)
  • [pylint] Implement too-many-boolean-expressions (PLR0916) (#7975)
  • [pylint] Implement misplaced-bare-raise (E0704) (#7961)
  • [pylint] Implement global-at-module-level (W0604) (#8058)
  • [pylint] Implement unspecified-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-version to ruff format (#8055)
  • Skip over parentheses when detecting in keyword (#8054)
  • Add --diff option to ruff format (#7937)
  • Insert newline after nested function or class statements (#7946)
  • Use pass over 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-name for _ (#8015)
  • Remove Python 2-only methods from URLOpen audit (#8047)
  • Use set bracket replacement for iteration-over-set to preserve whitespace and comments (#8001)

Documentation

  • Update tutorial to match revised Ruff defaults (#8066)
  • Update rule B005 docs (#8028)
  • Update GitHub actions example in docs to use --output-format (#8014)
  • Document lint.preview and format.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 format setting has been removed (#7984)
    • The format setting cannot be used to configure the output format, use output-format instead
    • The RUFF_FORMAT environment variable is ignored, use RUFF_OUTPUT_FORMAT instead
    • The --format option has been removed from ruff check, use --output-format instead

Rule changes

  • Extend reimplemented-starmap (FURB140) to catch calls with a single and starred argument (#7768)
  • Improve cases covered by RUF015 (#7848)
  • Update SIM15 to allow open followed by close (#7916)
  • Respect msgspec.Struct default-copy semantics in RUF012 (#7786)
  • Add sqlalchemy methods 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-alias to require --unsafe-fixes outside of stub files (#7836)
  • Improve fix message for UP018 (#7913)
  • Update PLW3201 to support Enum sunder names (#7987)

Preview features

  • Only show warnings for empty preview selectors when enabling rules (#7842)
  • Add unnecessary-key-check to simplify key in dct and dct[key] to dct.get(key) (#7895)
  • Add assignment-in-assert to prevent walrus expressions in assert statements (#7856)
  • [refurb] Add single-item-membership-test (FURB171) (#7815)
  • [pylint] Add and-or-ternary (R1706) (#7811)

New rules are added in preview.

Configuration

  • Add unsafe-fixes setting (#7769)
  • Add extend-safe-fixes and extend-unsafe-fixes for promoting and demoting fixes (#7841)

CLI

  • Added --unsafe-fixes option for opt-in to display and apply unsafe fixes (#7769)
  • Fix use of deprecated --format option 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 --diff to include unsafe fix hints (#7790)
  • Add notebook cell field to JSON output format (#7664)
  • Rename applicability levels to Safe, Unsafe, and Display (#7843)

Bug fixes

  • Fix bug where f-strings were allowed in match pattern literal (#7857)
  • Fix SIM110 with a yield in the condition (#7801)
  • Preserve trailing comments in C414 fixes (#7775)
  • Check sequence type before triggering unnecessary-enumerate len suggestion (#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 E251 false 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 --unfixable in ISC rules (#7917)
  • Fix edge case with PIE804 (#7922)
  • Show custom message in PTH118 for Path.joinpath with starred arguments (#7852)
  • Fix false negative in outdated-version-block when using greater than comparisons (#7920)
  • Avoid converting f-strings within Django gettext calls (#7898)
  • Fix false positive in PLR6301 (#7933)
  • Treat type aliases as typing-only expressions e.g. resolves false positive in TCH004 (#7968)
  • Resolve cache-dir relative 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 coalesce keyword (#7876)

Documentation

  • Document reimplemented-starmap performance effects (#7846)
  • Default to following the system dark/light mode (#7888)
  • Add documentation for fixes (#7901)
  • Fix typo in docs of PLR6301 (#7831)
  • Update UP038 docs 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 FURB177 example (#7832)

Formatter

  • Less scary ruff format message (#7867)
  • Remove spaces from import statements (#7859)
  • Formatter quoting for f-strings with triple quotes (#7826)
  • Update ruff_python_formatter generate.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 Fix action (#7824)