|
1 | 1 | # Breaking Changes |
2 | 2 |
|
| 3 | +## 0.10.0 |
| 4 | + |
| 5 | +- **Changes to how the Python version is inferred when a `target-version` is not specified** ([#16319](https://github.com/astral-sh/ruff/pull/16319)) |
| 6 | + |
| 7 | + In previous versions of Ruff, you could specify your Python version with: |
| 8 | + |
| 9 | + - The `target-version` option in a `ruff.toml` file or the `[tool.ruff]` section of a pyproject.toml file. |
| 10 | + - The `project.requires-python` field in a `pyproject.toml` file with a `[tool.ruff]` section. |
| 11 | + |
| 12 | + 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. |
| 13 | + |
| 14 | + In v0.10, config discovery has been updated to address this issue: |
| 15 | + |
| 16 | + - If Ruff finds a `ruff.toml` file without a `target-version`, it will check |
| 17 | + for a `pyproject.toml` file in the same directory and respect its |
| 18 | + `requires-python` version, even if it does not contain a `[tool.ruff]` |
| 19 | + section. |
| 20 | + - If Ruff finds a user-level configuration, the `requires-python` field of the closest `pyproject.toml` in a parent directory will take precedence. |
| 21 | + - If there is no config file (`ruff.toml`or `pyproject.toml` with a |
| 22 | + `[tool.ruff]` section) in the directory of the file being checked, Ruff will |
| 23 | + search for the closest `pyproject.toml` in the parent directories and use its |
| 24 | + `requires-python` setting. |
| 25 | + |
| 26 | +- **Updated `TYPE_CHECKING` behavior** ([#16669](https://github.com/astral-sh/ruff/pull/16669)) |
| 27 | + |
| 28 | + Previously, Ruff only recognized typechecking blocks that tested the `typing.TYPE_CHECKING` symbol. Now, Ruff recognizes any local variable named `TYPE_CHECKING`. This release also removes support for the legacy `if 0:` and `if False:` typechecking checks. Use a local `TYPE_CHECKING` variable instead. |
| 29 | + |
| 30 | +- **More robust noqa parsing** ([#16483](https://github.com/astral-sh/ruff/pull/16483)) |
| 31 | + |
| 32 | + The syntax for both file-level and in-line suppression comments has been unified and made more robust to certain errors. In most cases, this will result in more suppression comments being read by Ruff, but there are a few instances where previously read comments will now log an error to the user instead. Please refer to the documentation on [_Error suppression_](https://docs.astral.sh/ruff/linter/#error-suppression) for the full specification. |
| 33 | + |
| 34 | +- **Avoid unnecessary parentheses around with statements with a single context manager and a trailing comment** ([#14005](https://github.com/astral-sh/ruff/pull/14005)) |
| 35 | + |
| 36 | + This change fixes a bug in the formatter where it introduced unnecessary parentheses around with statements with a single context manager and a trailing comment. This change may result in a change in formatting for some users. |
| 37 | + |
| 38 | +- **Bump alpine default tag to 3.21 for derived Docker images** ([#16456](https://github.com/astral-sh/ruff/pull/16456)) |
| 39 | + |
| 40 | + Alpine 3.21 was released in Dec 2024 and is used in the official Alpine-based Python images. Now the ruff:alpine image will use 3.21 instead of 3.20 and ruff:alpine3.20 will no longer be updated. |
| 41 | + |
| 42 | +- **\[`unsafe-markup-use`\]: `RUF035` has been recoded to `S704`** ([#15957](https://github.com/astral-sh/ruff/pull/15957)) |
| 43 | + |
3 | 44 | ## 0.9.0 |
4 | 45 |
|
5 | 46 | Ruff now formats your code according to the 2025 style guide. As a result, your code might now get formatted differently. See the [changelog](./CHANGELOG.md#090) for a detailed list of changes. |
|
0 commit comments