Skip to content

Commit 87f0feb

Browse files
authored
Bump 0.12.0 (#18724)
- [x] Updated changelog - [x] Updated breaking changes
1 parent 685eac1 commit 87f0feb

File tree

11 files changed

+203
-20
lines changed

11 files changed

+203
-20
lines changed

BREAKING_CHANGES.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,39 @@
11
# Breaking Changes
22

3+
## 0.12.0
4+
5+
- **Detection of more syntax errors**
6+
7+
Ruff now detects version-related syntax errors, such as the use of the `match`
8+
statement on Python versions before 3.10, and syntax errors emitted by
9+
CPython's compiler, such as irrefutable `match` patterns before the final
10+
`case` arm.
11+
12+
- **New default Python version handling for syntax errors**
13+
14+
Ruff will default to the _latest_ supported Python version (3.13) when
15+
checking for the version-related syntax errors mentioned above to prevent
16+
false positives in projects without a Python version configured. The default
17+
in all other cases, like applying lint rules, is unchanged and remains at the
18+
minimum supported Python version (3.9).
19+
20+
- **Updated f-string formatting**
21+
22+
Ruff now formats multi-line f-strings with format specifiers to avoid adding a
23+
line break after the format specifier. This addresses a change to the Python
24+
grammar in version 3.13.4 that made such a line break a syntax error.
25+
26+
- **`rust-toolchain.toml` is no longer included in source distributions**
27+
28+
The `rust-toolchain.toml` is used to specify a higher Rust version than Ruff's
29+
minimum supported Rust version (MSRV) for development and building release
30+
artifacts. However, when present in source distributions, it would also cause
31+
downstream package maintainers to pull in the same Rust toolchain, even if
32+
their available toolchain was MSRV-compatible.
33+
34+
- **[`suspicious-xmle-tree-usage`](https://docs.astral.sh/ruff/rules/suspicious-xmle-tree-usage/)
35+
(`S320`) has been removed**
36+
337
## 0.11.0
438

539
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`.

CHANGELOG.md

Lines changed: 153 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,145 @@
11
# Changelog
22

3+
## 0.12.0
4+
5+
Check out the [blog post](https://astral.sh/blog/ruff-v0.12.0) for a migration
6+
guide and overview of the changes!
7+
8+
### Breaking changes
9+
10+
- **Detection of more syntax errors**
11+
12+
Ruff now detects version-related syntax errors, such as the use of the `match`
13+
statement on Python versions before 3.10, and syntax errors emitted by
14+
CPython's compiler, such as irrefutable `match` patterns before the final
15+
`case` arm.
16+
17+
- **New default Python version handling for syntax errors**
18+
19+
Ruff will default to the _latest_ supported Python version (3.13) when
20+
checking for the version-related syntax errors mentioned above to prevent
21+
false positives in projects without a Python version configured. The default
22+
in all other cases, like applying lint rules, is unchanged and remains at the
23+
minimum supported Python version (3.9).
24+
25+
- **Updated f-string formatting**
26+
27+
Ruff now formats multi-line f-strings with format specifiers to avoid adding a
28+
line break after the format specifier. This addresses a change to the Python
29+
grammar in version 3.13.4 that made such a line break a syntax error.
30+
31+
- **`rust-toolchain.toml` is no longer included in source distributions**
32+
33+
The `rust-toolchain.toml` is used to specify a higher Rust version than Ruff's
34+
minimum supported Rust version (MSRV) for development and building release
35+
artifacts. However, when present in source distributions, it would also cause
36+
downstream package maintainers to pull in the same Rust toolchain, even if
37+
their available toolchain was MSRV-compatible.
38+
39+
### Removed Rules
40+
41+
The following rules have been removed:
42+
43+
- [`suspicious-xmle-tree-usage`](https://docs.astral.sh/ruff/rules/suspicious-xmle-tree-usage/)
44+
(`S320`)
45+
46+
### Deprecated Rules
47+
48+
The following rules have been deprecated:
49+
50+
- [`pandas-df-variable-name`](https://docs.astral.sh/ruff/rules/pandas-df-variable-name/)
51+
52+
### Stabilization
53+
54+
The following rules have been stabilized and are no longer in preview:
55+
56+
- [`for-loop-writes`](https://docs.astral.sh/ruff/rules/for-loop-writes) (`FURB122`)
57+
- [`check-and-remove-from-set`](https://docs.astral.sh/ruff/rules/check-and-remove-from-set) (`FURB132`)
58+
- [`verbose-decimal-constructor`](https://docs.astral.sh/ruff/rules/verbose-decimal-constructor) (`FURB157`)
59+
- [`fromisoformat-replace-z`](https://docs.astral.sh/ruff/rules/fromisoformat-replace-z) (`FURB162`)
60+
- [`int-on-sliced-str`](https://docs.astral.sh/ruff/rules/int-on-sliced-str) (`FURB166`)
61+
- [`exc-info-outside-except-handler`](https://docs.astral.sh/ruff/rules/exc-info-outside-except-handler) (`LOG014`)
62+
- [`import-outside-top-level`](https://docs.astral.sh/ruff/rules/import-outside-top-level) (`PLC0415`)
63+
- [`unnecessary-dict-index-lookup`](https://docs.astral.sh/ruff/rules/unnecessary-dict-index-lookup) (`PLR1733`)
64+
- [`nan-comparison`](https://docs.astral.sh/ruff/rules/nan-comparison) (`PLW0177`)
65+
- [`eq-without-hash`](https://docs.astral.sh/ruff/rules/eq-without-hash) (`PLW1641`)
66+
- [`pytest-parameter-with-default-argument`](https://docs.astral.sh/ruff/rules/pytest-parameter-with-default-argument) (`PT028`)
67+
- [`pytest-warns-too-broad`](https://docs.astral.sh/ruff/rules/pytest-warns-too-broad) (`PT030`)
68+
- [`pytest-warns-with-multiple-statements`](https://docs.astral.sh/ruff/rules/pytest-warns-with-multiple-statements) (`PT031`)
69+
- [`invalid-formatter-suppression-comment`](https://docs.astral.sh/ruff/rules/invalid-formatter-suppression-comment) (`RUF028`)
70+
- [`dataclass-enum`](https://docs.astral.sh/ruff/rules/dataclass-enum) (`RUF049`)
71+
- [`class-with-mixed-type-vars`](https://docs.astral.sh/ruff/rules/class-with-mixed-type-vars) (`RUF053`)
72+
- [`unnecessary-round`](https://docs.astral.sh/ruff/rules/unnecessary-round) (`RUF057`)
73+
- [`starmap-zip`](https://docs.astral.sh/ruff/rules/starmap-zip) (`RUF058`)
74+
- [`non-pep604-annotation-optional`](https://docs.astral.sh/ruff/rules/non-pep604-annotation-optional) (`UP045`)
75+
- [`non-pep695-generic-class`](https://docs.astral.sh/ruff/rules/non-pep695-generic-class) (`UP046`)
76+
- [`non-pep695-generic-function`](https://docs.astral.sh/ruff/rules/non-pep695-generic-function) (`UP047`)
77+
- [`private-type-parameter`](https://docs.astral.sh/ruff/rules/private-type-parameter) (`UP049`)
78+
79+
The following behaviors have been stabilized:
80+
81+
- [`collection-literal-concatenation`] (`RUF005`) now recognizes slices, in
82+
addition to list literals and variables.
83+
- The fix for [`readlines-in-for`] (`FURB129`) is now marked as always safe.
84+
- [`if-else-block-instead-of-if-exp`] (`SIM108`) will now further simplify
85+
expressions to use `or` instead of an `if` expression, where possible.
86+
- [`unused-noqa`] (`RUF100`) now checks for file-level `noqa` comments as well
87+
as inline comments.
88+
- [`subprocess-without-shell-equals-true`] (`S603`) now accepts literal strings,
89+
as well as lists and tuples of literal strings, as trusted input.
90+
- [`boolean-type-hint-positional-argument`] (`FBT001`) now applies to types that
91+
include `bool`, like `bool | int` or `typing.Optional[bool]`, in addition to
92+
plain `bool` annotations.
93+
- [`non-pep604-annotation-union`] (`UP007`) has now been split into two rules.
94+
`UP007` now applies only to `typing.Union`, while
95+
[`non-pep604-annotation-optional`] (`UP045`) checks for use of
96+
`typing.Optional`. `UP045` has also been stabilized in this release, but you
97+
may need to update existing `include`, `ignore`, or `noqa` settings to
98+
accommodate this change.
99+
100+
### Preview features
101+
102+
- \[`ruff`\] Check for non-context-manager use of `pytest.raises`, `pytest.warns`, and `pytest.deprecated_call` (`RUF061`) ([#17368](https://github.com/astral-sh/ruff/pull/17368))
103+
- [syntax-errors] Raise unsupported syntax error for template strings prior to Python 3.14 ([#18664](https://github.com/astral-sh/ruff/pull/18664))
104+
105+
### Bug fixes
106+
107+
- Add syntax error when conversion flag does not immediately follow exclamation mark ([#18706](https://github.com/astral-sh/ruff/pull/18706))
108+
- Add trailing space around `readlines` ([#18542](https://github.com/astral-sh/ruff/pull/18542))
109+
- Fix `\r` and `\r\n` handling in t- and f-string debug texts ([#18673](https://github.com/astral-sh/ruff/pull/18673))
110+
- Hug closing `}` when f-string expression has a format specifier ([#18704](https://github.com/astral-sh/ruff/pull/18704))
111+
- \[`flake8-pyi`\] Avoid syntax error in the case of starred and keyword arguments (`PYI059`) ([#18611](https://github.com/astral-sh/ruff/pull/18611))
112+
- \[`flake8-return`\] Fix `RET504` autofix generating a syntax error ([#18428](https://github.com/astral-sh/ruff/pull/18428))
113+
- \[`pep8-naming`\] Suppress fix for `N804` and `N805` if the recommended name is already used ([#18472](https://github.com/astral-sh/ruff/pull/18472))
114+
- \[`pycodestyle`\] Avoid causing a syntax error in expressions spanning multiple lines (`E731`) ([#18479](https://github.com/astral-sh/ruff/pull/18479))
115+
- \[`pyupgrade`\] Suppress `UP008` if `super` is shadowed ([#18688](https://github.com/astral-sh/ruff/pull/18688))
116+
- \[`refurb`\] Parenthesize lambda and ternary expressions (`FURB122`, `FURB142`) ([#18592](https://github.com/astral-sh/ruff/pull/18592))
117+
- \[`ruff`\] Handle extra arguments to `deque` (`RUF037`) ([#18614](https://github.com/astral-sh/ruff/pull/18614))
118+
- \[`ruff`\] Preserve parentheses around `deque` in fix for `unnecessary-empty-iterable-within-deque-call` (`RUF037`) ([#18598](https://github.com/astral-sh/ruff/pull/18598))
119+
- \[`ruff`\] Validate arguments before offering a fix (`RUF056`) ([#18631](https://github.com/astral-sh/ruff/pull/18631))
120+
- \[`ruff`\] Skip fix for `RUF059` if dummy name is already bound ([#18509](https://github.com/astral-sh/ruff/pull/18509))
121+
- \[`pylint`\] Fix `PLW0128` to check assignment targets in square brackets and after asterisks ([#18665](https://github.com/astral-sh/ruff/pull/18665))
122+
123+
### Rule changes
124+
125+
- Fix false positive on mutations in `return` statements (`B909`) ([#18408](https://github.com/astral-sh/ruff/pull/18408))
126+
- Treat `ty:` comments as pragma comments ([#18532](https://github.com/astral-sh/ruff/pull/18532))
127+
- \[`flake8-pyi`\] Apply `custom-typevar-for-self` to string annotations (`PYI019`) ([#18311](https://github.com/astral-sh/ruff/pull/18311))
128+
- \[`pyupgrade`\] Don't offer a fix for `Optional[None]` (`UP007`, `UP045)` ([#18545](https://github.com/astral-sh/ruff/pull/18545))
129+
- \[`pyupgrade`\] Fix `super(__class__, self)` detection (`UP008`) ([#18478](https://github.com/astral-sh/ruff/pull/18478))
130+
- \[`refurb`\] Make the fix for `FURB163` unsafe for `log2`, `log10`, `*args`, and deleted comments ([#18645](https://github.com/astral-sh/ruff/pull/18645))
131+
132+
### Server
133+
134+
- Support cancellation requests ([#18627](https://github.com/astral-sh/ruff/pull/18627))
135+
136+
### Documentation
137+
138+
- Drop confusing second `*` from glob pattern example for `per-file-target-version` ([#18709](https://github.com/astral-sh/ruff/pull/18709))
139+
- Update Neovim configuration examples ([#18491](https://github.com/astral-sh/ruff/pull/18491))
140+
- \[`pylint`\] De-emphasize `__hash__ = Parent.__hash__` (`PLW1641`) ([#18613](https://github.com/astral-sh/ruff/pull/18613))
141+
- \[`refurb`\] Add a note about float literal handling (`FURB157`) ([#18615](https://github.com/astral-sh/ruff/pull/18615))
142+
3143
## 0.11.13
4144

5145
### Preview features
@@ -391,7 +531,7 @@ See also, the "Remapped rules" section which may result in disabled rules.
391531

392532
- **More robust noqa parsing** ([#16483](https://github.com/astral-sh/ruff/pull/16483))
393533

394-
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.
534+
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.
395535

396536
- **Avoid unnecessary parentheses around with statements with a single context manager and a trailing comment** ([#14005](https://github.com/astral-sh/ruff/pull/14005))
397537

@@ -1803,7 +1943,7 @@ The following fixes have been stabilized:
18031943

18041944
## 0.5.6
18051945

1806-
Ruff 0.5.6 automatically enables linting and formatting of notebooks in *preview mode*.
1946+
Ruff 0.5.6 automatically enables linting and formatting of notebooks in _preview mode_.
18071947
You can opt-out of this behavior by adding `*.ipynb` to the `extend-exclude` setting.
18081948

18091949
```toml
@@ -2556,7 +2696,7 @@ To setup `ruff server` with your editor, refer to the [README.md](https://github
25562696

25572697
### Server
25582698

2559-
*This section is devoted to updates for our new language server, written in Rust.*
2699+
_This section is devoted to updates for our new language server, written in Rust._
25602700

25612701
- Enable ruff-specific source actions ([#10916](https://github.com/astral-sh/ruff/pull/10916))
25622702
- Refreshes diagnostics for open files when file configuration is changed ([#10988](https://github.com/astral-sh/ruff/pull/10988))
@@ -3963,7 +4103,7 @@ Read Ruff's new [versioning policy](https://docs.astral.sh/ruff/versioning/).
39634103
- \[`refurb`\] Add `single-item-membership-test` (`FURB171`) ([#7815](https://github.com/astral-sh/ruff/pull/7815))
39644104
- \[`pylint`\] Add `and-or-ternary` (`R1706`) ([#7811](https://github.com/astral-sh/ruff/pull/7811))
39654105

3966-
*New rules are added in [preview](https://docs.astral.sh/ruff/preview/).*
4106+
_New rules are added in [preview](https://docs.astral.sh/ruff/preview/)._
39674107

39684108
### Configuration
39694109

@@ -4038,3 +4178,12 @@ Read Ruff's new [versioning policy](https://docs.astral.sh/ruff/versioning/).
40384178
### Playground
40394179

40404180
- Fix playground `Quick Fix` action ([#7824](https://github.com/astral-sh/ruff/pull/7824))
4181+
4182+
[`boolean-type-hint-positional-argument`]: https://docs.astral.sh/ruff/rules/boolean-type-hint-positional-argument
4183+
[`collection-literal-concatenation`]: https://docs.astral.sh/ruff/rules/collection-literal-concatenation
4184+
[`if-else-block-instead-of-if-exp`]: https://docs.astral.sh/ruff/rules/if-else-block-instead-of-if-exp
4185+
[`non-pep604-annotation-optional`]: https://docs.astral.sh/ruff/rules/non-pep604-annotation-optional
4186+
[`non-pep604-annotation-union`]: https://docs.astral.sh/ruff/rules/non-pep604-annotation-union
4187+
[`readlines-in-for`]: https://docs.astral.sh/ruff/rules/readlines-in-for
4188+
[`subprocess-without-shell-equals-true`]: https://docs.astral.sh/ruff/rules/subprocess-without-shell-equals-true
4189+
[`unused-noqa`]: https://docs.astral.sh/ruff/rules/unused-noqa

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ curl -LsSf https://astral.sh/ruff/install.sh | sh
148148
powershell -c "irm https://astral.sh/ruff/install.ps1 | iex"
149149

150150
# For a specific version.
151-
curl -LsSf https://astral.sh/ruff/0.11.13/install.sh | sh
152-
powershell -c "irm https://astral.sh/ruff/0.11.13/install.ps1 | iex"
151+
curl -LsSf https://astral.sh/ruff/0.12.0/install.sh | sh
152+
powershell -c "irm https://astral.sh/ruff/0.12.0/install.ps1 | iex"
153153
```
154154

155155
You can also install Ruff via [Homebrew](https://formulae.brew.sh/formula/ruff), [Conda](https://anaconda.org/conda-forge/ruff),
@@ -182,7 +182,7 @@ Ruff can also be used as a [pre-commit](https://pre-commit.com/) hook via [`ruff
182182
```yaml
183183
- repo: https://github.com/astral-sh/ruff-pre-commit
184184
# Ruff version.
185-
rev: v0.11.13
185+
rev: v0.12.0
186186
hooks:
187187
# Run the linter.
188188
- id: ruff

crates/ruff/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ruff"
3-
version = "0.11.13"
3+
version = "0.12.0"
44
publish = true
55
authors = { workspace = true }
66
edition = { workspace = true }

crates/ruff_linter/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ruff_linter"
3-
version = "0.11.13"
3+
version = "0.12.0"
44
publish = false
55
authors = { workspace = true }
66
edition = { workspace = true }

crates/ruff_wasm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ruff_wasm"
3-
version = "0.11.13"
3+
version = "0.12.0"
44
publish = false
55
authors = { workspace = true }
66
edition = { workspace = true }

docs/integrations.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ You can add the following configuration to `.gitlab-ci.yml` to run a `ruff forma
8080
stage: build
8181
interruptible: true
8282
image:
83-
name: ghcr.io/astral-sh/ruff:0.11.13-alpine
83+
name: ghcr.io/astral-sh/ruff:0.12.0-alpine
8484
before_script:
8585
- cd $CI_PROJECT_DIR
8686
- ruff --version
@@ -106,7 +106,7 @@ Ruff can be used as a [pre-commit](https://pre-commit.com) hook via [`ruff-pre-c
106106
```yaml
107107
- repo: https://github.com/astral-sh/ruff-pre-commit
108108
# Ruff version.
109-
rev: v0.11.13
109+
rev: v0.12.0
110110
hooks:
111111
# Run the linter.
112112
- id: ruff
@@ -119,7 +119,7 @@ To enable lint fixes, add the `--fix` argument to the lint hook:
119119
```yaml
120120
- repo: https://github.com/astral-sh/ruff-pre-commit
121121
# Ruff version.
122-
rev: v0.11.13
122+
rev: v0.12.0
123123
hooks:
124124
# Run the linter.
125125
- id: ruff
@@ -133,7 +133,7 @@ To avoid running on Jupyter Notebooks, remove `jupyter` from the list of allowed
133133
```yaml
134134
- repo: https://github.com/astral-sh/ruff-pre-commit
135135
# Ruff version.
136-
rev: v0.11.13
136+
rev: v0.12.0
137137
hooks:
138138
# Run the linter.
139139
- id: ruff

docs/tutorial.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ This tutorial has focused on Ruff's command-line interface, but Ruff can also be
369369
```yaml
370370
- repo: https://github.com/astral-sh/ruff-pre-commit
371371
# Ruff version.
372-
rev: v0.11.13
372+
rev: v0.12.0
373373
hooks:
374374
# Run the linter.
375375
- id: ruff

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "maturin"
44

55
[project]
66
name = "ruff"
7-
version = "0.11.13"
7+
version = "0.12.0"
88
description = "An extremely fast Python linter and code formatter, written in Rust."
99
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
1010
readme = "README.md"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy