ruff/changelogs/0.11.x.md

24 KiB

Changelog 0.11.x

0.11.0

This is a follow-up to release 0.10.0. Because of a mistake in the release process, the requires-python inference changes were not included in that release. Ruff 0.11.0 now includes this change as well as the stabilization of the preview behavior for PGH004.

Breaking changes

  • Changes to how the Python version is inferred when a target-version is not specified (#16319)

    In previous versions of Ruff, you could specify your Python version with:

    • The target-version option in a ruff.toml file or the [tool.ruff] section of a pyproject.toml file.
    • The project.requires-python field in a pyproject.toml file with a [tool.ruff] section.

    These options worked well in most cases, and are still recommended for fine control of the Python version. However, because of the way Ruff discovers config files, pyproject.toml files without a [tool.ruff] section would be ignored, including the requires-python setting. Ruff would then use the default Python version (3.9 as of this writing) instead, which is surprising when you've attempted to request another version.

    In v0.10, config discovery has been updated to address this issue:

    • If Ruff finds a ruff.toml file without a target-version, it will check for a pyproject.toml file in the same directory and respect its requires-python version, even if it does not contain a [tool.ruff] section.
    • If Ruff finds a user-level configuration, the requires-python field of the closest pyproject.toml in a parent directory will take precedence.
    • If there is no config file (ruff.tomlor pyproject.toml with a [tool.ruff] section) in the directory of the file being checked, Ruff will search for the closest pyproject.toml in the parent directories and use its requires-python setting.

Stabilization

The following behaviors have been stabilized:

  • blanket-noqa (PGH004): Also detect blanked file-level noqa comments (and not just line level comments).

Preview features

  • [syntax-errors] Tuple unpacking in for statement iterator clause before Python 3.9 (#16558)

0.11.1

Preview features

  • `airflow`
  • [syntax-errors] Improve error message and range for pre-PEP-614 decorator syntax errors (#16581)
  • [syntax-errors] PEP 701 f-strings before Python 3.12 (#16543)
  • [syntax-errors] Parenthesized context managers before Python 3.9 (#16523)
  • [syntax-errors] Star annotations before Python 3.11 (#16545)
  • [syntax-errors] Star expression in index before Python 3.11 (#16544)
  • [syntax-errors] Unparenthesized assignment expressions in sets and indexes (#16404)

Bug fixes

  • Server: Allow FixAll action in presence of version-specific syntax errors (#16848)
  • `flake8-bandit`
  • `refurb`
  • `refurb`
  • Fix --statistics reporting for unsafe fixes (#16756)

Rule changes

  • `flake8-executables`

CLI

  • Add --exit-non-zero-on-format (#16009)

Documentation

  • Update Ruff tutorial to avoid non-existent fix in __init__.py (#16818)
  • `flake8-gettext`

0.11.2

Preview features

  • [syntax-errors] Fix false-positive syntax errors emitted for annotations on variadic parameters before Python 3.11 (#16878)

0.11.3

Preview features

  • `airflow`
  • `airflow`
  • `airflow`
  • `flake8-bandit`
  • `ruff`
  • [syntax-errors] Start detecting compile-time syntax errors (#16106)
  • [syntax-errors] Duplicate type parameter names (#16858)
  • [syntax-errors] Irrefutable case pattern before final case (#16905)
  • [syntax-errors] Multiple assignments in case pattern (#16957)
  • [syntax-errors] Single starred assignment target (#17024)
  • [syntax-errors] Starred expressions in return, yield, and for (#17134)
  • [syntax-errors] Store to or delete __debug__ (#16984)

Bug fixes

  • Error instead of panic! when running Ruff from a deleted directory (#16903) (#17054)
  • [syntax-errors] Fix false positive for parenthesized tuple index (#16948)

CLI

  • Check pyproject.toml correctly when it is passed via stdin (#16971)

Configuration

  • `flake8-import-conventions`

Documentation

  • `refurb`

0.11.4

Preview features

  • `ruff`
  • [syntax-errors] Detect duplicate keys in match mapping patterns (#17129)
  • [syntax-errors] Detect duplicate attributes in match class patterns (#17186)
  • [syntax-errors] Detect invalid syntax in annotations (#17101)

Bug fixes

  • [syntax-errors] Fix multiple assignment error for class fields in match patterns (#17184)
  • Don't skip visiting non-tuple slice in typing.Annotated subscripts (#17201)

0.11.5

Preview features

  • `airflow`
  • `airflow`
  • `airflow`
  • `airflow`
  • [syntax-errors] Async comprehension in sync comprehension (#17177)
  • [syntax-errors] Check annotations in annotated assignments (#17283)
  • [syntax-errors] Extend annotation checks to await (#17282)

Bug fixes

  • `flake8-pie`

Rule changes

  • `ruff`
  • `flake8-pytest-style`

Documentation

  • Fix formatting of "See Style Guide" link (#17272)

0.11.6

Preview features

  • Avoid adding whitespace to the end of a docstring after an escaped quote (#17216)
  • `airflow`

Bug fixes

  • Raise syntax error when \ is at end of file (#17409)

0.11.7

Preview features

  • `airflow`
  • `perflint`
  • [syntax-errors] Make duplicate parameter names a semantic error (#17131)

Bug fixes

  • `airflow`
  • `flake8-type-checking`
  • `pyupgrade`
  • `refurb`

Rule changes

  • `perflint`
  • `pycodestyle`
  • `pylint`

Documentation

0.11.8

Preview features

  • `airflow`
  • `airflow`
  • `airflow`
  • `refurb`
  • [syntax-errors] nonlocal declaration at module level (#17559)
  • [syntax-errors] Detect single starred expression assignment x = *y (#17624)

Bug fixes

  • `flake8-pyi`
  • `flake8-use-pathlib`
  • `flake8-use-pathlib`
  • `flake8-use-pathlib`
  • `flake8-use-pathlib`
  • `pycodestyle`
  • `pylint`
  • [syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#17460)

Configuration

  • Add option to disable typing_extensions imports (#17611)

Documentation

Other changes

  • Add Python 3.14 to configuration options (#17647)
  • Make syntax error for unparenthesized except tuples version specific to before 3.14 (#17660)

0.11.9

Preview features

  • Default to latest supported Python version for version-related syntax errors (#17529)
  • Implement deferred annotations for Python 3.14 (#17658)
  • `airflow`
  • `airflow`
  • `airflow`
  • `flake8-bandit`
  • `isort`
  • `ruff`

Bug fixes

  • Fix missing combine call for lint.typing-extensions setting (#17823)
  • `flake8-async`
  • `pyupgrade`
  • `refurb`
  • [parser] Flag single unparenthesized generator expr with trailing comma in arguments. (#17893)

Documentation

  • Add instructions on how to upgrade to a newer Rust version (#17928)
  • Update code of conduct email address (#17875)
  • Add fix safety sections to PLC2801, PLR1722, and RUF013 (#17825, #17826, #17759)
  • Add link to check-typed-exception from S110 and S112 (#17786)

Other changes

  • Allow passing a virtual environment to ruff analyze graph (#17743)

0.11.10

Preview features

  • `ruff`
  • `airflow`
  • `airflow`
  • `airflow`

Bug fixes

  • `flake8-bugbear`
  • `flake8-pie`
  • `flake8-simplify`
  • `flake8-simplify`
  • `flake8-use-pathlib`
  • `refurb`

Rule changes

  • `flake8-bandit`
  • `flake8-pytest-style`
  • `pyupgrade`

CLI

  • Disable jemalloc on Android (#18033)

Documentation

  • Update Neovim setup docs (#18108)
  • `flake8-simplify`
  • `flake8-simplify`
  • `pylint`
  • `pylint`
  • `pylint`
  • `pylint`
  • `ruff`
  • `ruff`

0.11.11

Preview features

  • `airflow`
  • `airflow`
  • `airflow`
  • `flake8-simplify`

Bug fixes

  • Fix inconsistent formatting of match-case on [] and _ (#18147)
  • `pylint`

CLI

  • Add full option name in formatter warning (#18217)

Documentation

  • Fix rendering of admonition in docs (#18163)
  • `flake8-print`
  • `flake8-simplify`
  • `pylint`

0.11.12

Preview features

  • `airflow`
  • `pylint`
  • `pyupgrade`
  • `flake8-use-pathlib`

Bug fixes

  • `flake8-bugbear`
  • `flake8-async`
  • `refurb`

Rule changes

  • `flake8-implicit-str-concat`
  • `pycodestyle`
  • `flake8-2020`
  • `pyupgrade`

Documentation

  • Simplify rules table to improve readability (#18297)
  • Update editor integrations link in README (#17977)
  • `flake8-bugbear`

0.11.13

Preview features

  • `airflow`
  • `refurb`
  • `refurb`

Bug fixes

  • `perflint`
  • `pyupgrade`
  • `pyupgrade`

Rule changes

  • `fastapi`

Documentation

  • Update editor setup docs for Neovim and Vim (#18324)

Other changes

  • Support Python 3.14 template strings (t-strings) in formatter and parser (#17851)