Commit Graph

11272 Commits

Author SHA1 Message Date
Brent Westbrook e352a50b74
Use `LintContext::report_diagnostic_if_enabled` in `check_tokens` (#18769)
## Summary

This PR avoids the `Vec::retain` call in `check_tokens` by checking if
rules are enabled as their diagnostics are constructed.


2a425e43fd/crates/ruff_linter/src/checkers/tokens.rs (L174-L176)

Since `LintContext::report_diagnostic_if_enabled` required a
`LinterSettings`, I added a `settings` field to the context itself
instead of trying to pass it everywhere. This also turned
`LogicalLinesContext` into a trivial wrapper around `LintContext`, so I
just removed it in favor of using `LintContext` directly too.

The diff is a bit smaller with whitespace hidden since many blocks got
moved into something like this:

```rust
if let Some(mut diagnostic) = context.report_diagnostic.enabled(...) {
    // old code
}
```

## Test Plan

Existing tests
2025-06-18 17:05:36 -04:00
sobolevn 2a425e43fd
[UP008]: use `super()`, not `__super__` in error messages (#18743)
When I try to grep CPython with `__super__` I get 0 results:

```
(.venv) ~/Desktop/cpython  main ✔                                                    
» ag __super__ . 
                
```

That's how we can understand that the naming is not the best.
2025-06-18 13:57:57 -04:00
Zanie Blue cb512ba80b
Use Depot Windows runners for `cargo test` (#18754)
From 6m 15s -> 3m 54s (total runtime)

See also https://github.com/astral-sh/uv/pull/14122 

We don't use a Dev Drive here so this is trivial (ref #15664)
2025-06-18 10:52:24 -05:00
Micha Reiser 97af091d5d
Run ty benchmarks when `ruff_benchmark` changes (#18758) 2025-06-18 17:43:19 +02:00
Micha Reiser 1188ffccc4
Disallow newlines in format specifiers of single quoted f- or t-strings (#18708) 2025-06-18 14:56:15 +02:00
Micha Reiser 23261a38a0
[ty] Add more benchmarks (#18714) 2025-06-18 13:41:38 +02:00
Micha Reiser 37fdece72f
[ty] Anchor all exclude patterns (#18685)
Co-authored-by: Andrew Gallant <andrew@astral.sh>
2025-06-18 08:57:36 +00:00
Dhruv Manilawala 8184dae287
Include changelog reference for other major versions (#18745)
Add references to changelog files for other major versions in the main
CHANGELOG.md file.


[Rendered](https://github.com/astral-sh/ruff/blob/dhruv/other-changelog/CHANGELOG.md)
2025-06-18 07:05:43 +00:00
Matthias Hörtenhuber a2cd6df429
Use updated pre-commit id (#18718)
## Summary

Update pre-commit hook id according to
https://github.com/astral-sh/ruff-pre-commit/pull/124
2025-06-17 14:12:11 -04:00
Brent Westbrook 9220addf52
Split the changelog into separate files (#18725)
Summary
--

During the release today, I noticed that the changelog is finally too
long to
render at all on GitHub. This PR follows the same splitting procedure as
in
uv (astral-sh/uv#11510, astral-sh/uv#12099): first splitting the file
into one
per minor version, and then reversing the contents of each file to start
with
the breaking release (`changelogs/0.11.x.md` starts with 0.11.0 instead
of
0.11.13 as in the old changelog).

For the second part, I used
[`reverse-changelog.py`](https://github.com/astral-sh/uv/blob/main/scripts/reverse-changelog.py)
from the uv repo, so hopefully everything is correct. I spot-checked
0.7.0 at least.
2025-06-17 13:27:36 -04:00
Alperen Keleş 932f941d15
[ty] fix binary expression inference between boolean literals and `bool` instances (#18663) 2025-06-17 18:02:40 +01:00
Brent Westbrook 87f0feb21a
Bump 0.12.0 (#18724)
- [x] Updated changelog
- [x] Updated breaking changes
2025-06-17 11:05:59 -04:00
Alex Waygood 685eac10e5
Revert "[ty] Offer "Did you mean...?" suggestions for unresolved `from` imports and unresolved attributes (#18705)" (#18721) 2025-06-17 15:48:09 +01:00
Dylan a93992fa30 [`flake8-return`] Stabilize only add `return None` at the end when fixing `implicit-return` (`RET503`) (#18516)
This involved slightly more code changes than usual for a stabilization
- so maybe worth double-checking the logic!

I did verify by hand that the new stable behavior on the test fixture
matches the old preview behavior, even after the internal refactor.
2025-06-17 09:58:12 -04:00
Brent Westbrook 50f84808bc [`pyupgrade`] Stabilize `non-pep695-generic-function` (`UP047`) (#18524)
## Summary
- Stabilizes UP047 (non-pep695-generic-function) rule by changing it
from Preview to Stable

## Test plan
-  Rule is already tested in main test function, no migration needed
-  `make check` passes
-  `make test` passes

## Rule Documentation
- [Test
file](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/pyupgrade/mod.rs#L111)
- [Rule
documentation](https://docs.astral.sh/ruff/rules/non-pep695-generic-function/)
2025-06-17 09:58:12 -04:00
Brent Westbrook 6754e94abc [`pyupgrade`] Stabilize `non-pep695-generic-class` (`UP046`) (#18519)
## Summary
- Stabilizes UP046 (non-pep695-generic-class) rule by changing it from
Preview to Stable

## Test plan
-  Rule is already tested in main test function, no migration needed
-  `make check` passes
-  `make test` passes

## Rule Documentation
- [Test
file](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/pyupgrade/mod.rs#L109-L110)
- [Rule
documentation](https://docs.astral.sh/ruff/rules/non-pep695-generic-class/)
2025-06-17 09:58:12 -04:00
Brent Westbrook 33c8c7569d [`pandas-vet`] Deprecate `pandas-df-variable-name` (`PD901`) (#18618)
Summary
--

Deprecates PD901 as part of #7710. I don't feel particularly strongly
about this one, though I have certainly used `df` as a dataframe name in
the past, just going through the open issues in the 0.12 milestone.

Test Plan
--

N/a
2025-06-17 09:58:12 -04:00
Brent Westbrook 34dc8e0531 [`flake8-bandit`] Remove `suspicious-xmle-tree-usage` (`S320`) (#18617)
Summary
--

Closes #13707. The rule was deprecated in 0.10 (#16680) and slated for
removal in either this or the next release.

Test Plan
--

N/a
2025-06-17 09:58:12 -04:00
Dylan b01195b166 Stabilize `dataclass-enum` (`RUF049`) (#18570)
Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
2025-06-17 09:58:12 -04:00
Dylan ce176b1acf Stabilize `unnecessary-dict-index-lookup` (`PLR1733`) (#18571)
Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
2025-06-17 09:58:12 -04:00
Micha Reiser 7072cf69b4 Remove rust-toolchain.toml from sdist (#17925)
Closes https://github.com/astral-sh/ruff/issues/17909
2025-06-17 09:58:12 -04:00
Brent Westbrook 72c8dc006f Stabilize `starmap-zip` (`RUF058`) (#18525)
## Summary
- Stabilizes RUF058 (starmap-zip) rule by changing it from Preview to
Stable
- Migrates test cases from preview_rules to main rules function 
- Updates snapshots accordingly and removes old preview snapshots

## Test plan
-  Migrated tests from preview to main test function
-  `make check` passes
-  `make test` passes  
-  `make citest` passes (no leftover snapshots)

## Rule Documentation
- [Test
file](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/ruff/mod.rs#L103-L104)
- [Rule documentation](https://docs.astral.sh/ruff/rules/starmap-zip/)
2025-06-17 09:58:12 -04:00
Brent Westbrook ad9ae4e2b6 [`flake8-logging`] Stabilize `exc-info-outside-except-handler` (`LOG014`) (#18517)
## Summary
- Stabilizes LOG014 (exc-info-outside-except-handler) rule by changing
it from Preview to Stable

## Test plan
-  Rule is already tested in main test function, no migration needed
-  `make check` passes
-  `make test` passes

## Rule Documentation
- [Test
file](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/flake8_logging/mod.rs#L22-L23)
- [Rule
documentation](https://docs.astral.sh/ruff/rules/exc-info-outside-except-handler/)
2025-06-17 09:58:12 -04:00
Dylan de4fc5b171 [`pyupgrade`] Stabilize `non-pep604-annotation-optional` (`UP045`) and preview behavior for `non-pep604-annotation-union` (`UP007`) (#18505) 2025-06-17 09:58:12 -04:00
Dylan 56f2aaaebc Stabilize `pytest-warns-too-broad` (`PT030`) (#18568) 2025-06-17 09:58:12 -04:00
Dylan ebd2a27559 Stabilize `for-loop-writes` (`FURB122`) (#18565) 2025-06-17 09:58:12 -04:00
Dylan 1278e3442a Stabilize `pytest-warns-with-multiple-statements` (`PT031`) (#18569) 2025-06-17 09:58:12 -04:00
Dylan 7efbf469dd Stabilize `pytest-parameter-with-default-argument` (`PT028`) (#18566) 2025-06-17 09:58:12 -04:00
Dylan 2a1fed9327 Stabilize `nan-comparison` (`PLW0177`) (#18559) 2025-06-17 09:58:12 -04:00
Dylan 7de8a0b429 Stabilize `check-and-remove-from-set` (`FURB132`) (#18560) 2025-06-17 09:58:12 -04:00
Dylan 0a1c6cb70b Stabilize `unnecessary-round` (`RUF057`) (#18563) 2025-06-17 09:58:12 -04:00
Dylan 2dafc5a8bd Stabilize `eq-without-hash` (`PLW1641`) (#18561) 2025-06-17 09:58:12 -04:00
Dylan 72a4c3ed83 Stabilize `int-on-sliced-str` (`FURB166`) (#18558) 2025-06-17 09:58:12 -04:00
Dylan e559e21e93 [`pylint`] Stabilize `import-outside-top-level` (`PLC0415`) (#18554) 2025-06-17 09:58:12 -04:00
Dylan c948be495a [`ruff`] Stabilize `invalid-formatter-suppression-comment` (`RUF028`) (#18555) 2025-06-17 09:58:12 -04:00
Dylan cd245d292e Stabilize `verbose-decimal-constructor` (`FURB157`) (#18556) 2025-06-17 09:58:12 -04:00
Brent Westbrook 620b84443b [pyupgrade] Stabilize private-type-parameter (UP049) (#18515)
## Summary
Stabilizes the UP049 rule (private-type-parameter) by moving it from
Preview to Stable.

UP049 detects and fixes the use of private type parameters (those with
leading underscores) in PEP 695 generic classes and functions.

## Test plan
- Verified that UP049 tests pass:
`crates/ruff_linter/src/rules/pyupgrade/mod.rs`
- Ran full test suite with `make test` 
- Confirmed that no test migration was needed as UP049 was already in
the main `rules` test function

## Rule documentation
https://docs.astral.sh/ruff/rules/private-type-parameter/
2025-06-17 09:58:12 -04:00
Dylan 1f70ceba0c [`flake8-boolean-trap`] Stabilize lint `bool` suprtypes in `boolean-type-hint-positional-argument` (`FBT001`) (#18520)
Feel free to complain about the rephrasing in the docs!
2025-06-17 09:58:12 -04:00
Dylan 00e9de8db9 [`flake8-bandit`] Stabilize more trusted inputs in `subprocess-without-shell-equals-true` (`S603`) (#18521) 2025-06-17 09:58:12 -04:00
Dylan 7211660f8b [`flake8-pyi`] Stabilize autofix for `future-annotations-in-stub` (`PYI044`) (#18518) 2025-06-17 09:58:12 -04:00
Dylan c1610e2eaf [semantic errors] Stabilize semantic errors (#18523) 2025-06-17 09:58:12 -04:00
Dylan bf53bc4256 [syntax errors] Stabilize version-specific unsupported syntax errors (#18522) 2025-06-17 09:58:12 -04:00
Dylan 9f2ae1f568 [`ruff`] Stabilize checking for file-level directives in `unused-noqa` (`RUF100`) (#18497)
Note that the preview behavior was not documented (shame on us!) so the
documentation was not modified.

---------

Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
2025-06-17 09:58:12 -04:00
Dylan 5cf2c40d13 [`flake8-simplify`] Stabilize further simplification to binary expressions in autofix for `if-else-block-instead-of-if-exp` (`SIM108`) (#18506) 2025-06-17 09:58:12 -04:00
Brent Westbrook 02b5376a3c [refurb] Stabilize `fromisoformat-replace-z` (FURB162) (#18510)
This PR stabilizes the FURB162 rule by moving it from preview to stable
status for the 0.12.0 release.

## Summary
- **Rule**: FURB162 (`fromisoformat-replace-z`)
- **Purpose**: Detects unnecessary timezone replacement operations when
calling `datetime.fromisoformat()`
- **Change**: Move from `RuleGroup::Preview` to `RuleGroup::Stable` in
`codes.rs`

## Verification Links
- **Tests**:
[refurb/mod.rs](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/refurb/mod.rs#L54)
- Confirms FURB162 has only standard tests, no preview-specific test
cases
- **Documentation**:
https://docs.astral.sh/ruff/rules/fromisoformat-replace-z/ - Current
documentation shows preview status that will be automatically updated
2025-06-17 09:58:12 -04:00
Brent Westbrook 18a134ae1f [ruff] Stabilize `class-with-mixed-type-vars` (RUF053) (#18512)
This PR stabilizes the RUF053 rule by moving it from preview to stable
status for the 0.12.0 release.

## Summary
- **Rule**: RUF053 (`class-with-mixed-type-vars`)
- **Purpose**: Detects classes that have both PEP 695 type parameter
lists while also inheriting from `typing.Generic`
- **Change**: Move from `RuleGroup::Preview` to `RuleGroup::Stable` in
`codes.rs` and migrate preview tests to stable tests

## Verification Links
- **Tests**:
[ruff/mod.rs](https://github.com/astral-sh/ruff/blob/main/crates/ruff_linter/src/rules/ruff/mod.rs#L98)
- Shows RUF053 moved from preview_rules to main rules test function
- **Documentation**:
https://docs.astral.sh/ruff/rules/class-with-mixed-type-vars/ - Current
documentation shows preview status that will be automatically updated
2025-06-17 09:58:12 -04:00
Dylan c063940d52 [`ruff`] Stabilize checking in presence of slices for `collection-literal-concatenation` (`RUF005`) (#18500) 2025-06-17 09:58:12 -04:00
Dylan 8aea383f29 [`refurb`] Stabilize fix safety for `readlines-in-for` (`FURB129`) (#18496)
Note that the preview behavior was not documented (shame on us!) so the
documentation was not modified.

---------

Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
2025-06-17 09:58:12 -04:00
Alex Waygood 913f136d33
[ty] Offer "Did you mean...?" suggestions for unresolved `from` imports and unresolved attributes (#18705)
Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
2025-06-17 11:10:34 +01:00
Dhruv Manilawala c7e020df6b
[ty] Filter overloads based on `Any` / `Unknown` (#18607)
## Summary

Closes: astral-sh/ty#552

This PR adds support for step 5 of the overload call evaluation
algorithm which specifies:

> For all arguments, determine whether all possible materializations of
the argument’s type are
> assignable to the corresponding parameter type for each of the
remaining overloads. If so,
> eliminate all of the subsequent remaining overloads.

The algorithm works in two parts:

1. Find out the participating parameter indexes. These are the
parameters that aren't gradual equivalent to one or more parameter types
at the same index in other overloads.
2. Loop over each overload and check whether that would be the _final_
overload for the argument types i.e., the remaining overloads will never
be matched against these argument types

For step 1, the participating parameter indexes are computed by just
comparing whether all the parameter types at the corresponding index for
all the overloads are **gradual equivalent**.

The step 2 of the algorithm used is described in [this
comment](https://github.com/astral-sh/ty/issues/552#issuecomment-2969165421).

## Test Plan

Update the overload call tests.
2025-06-17 15:35:09 +05:30