-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Lazily evaluate all PEP 695 type alias values (#8033)
<!-- Thank you for contributing to Ruff! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary In #7968, I introduced a regression whereby we started to treat imports used _only_ in type annotation bounds (with `__future__` annotations) as unused. The root of the issue is that I started using `visit_annotation` for these bounds. So we'd queue up the bound in the list of deferred type parameters, then when visiting, we'd further queue it up in the list of deferred type annotations... Which we'd then never visit, since deferred type annotations are visited _before_ deferred type parameters. Anyway, the better solution here is to use a dedicated flag for these, since they have slightly different behavior than type annotations. I've also fixed what I _think_ is a bug whereby we previously failed to resolve `Callable` in: ```python type RecordCallback[R: Record] = Callable[[R], None] from collections.abc import Callable ``` IIUC, the values in type aliases should be evaluated lazily, like type parameters. Closes #8017. ## Test Plan `cargo test`
- Loading branch information
1 parent
94b4bb0
commit a62c735
Showing
8 changed files
with
71 additions
and
16 deletions.
There are no files selected for viewing
17 changes: 17 additions & 0 deletions
17
crates/ruff_linter/resources/test/fixtures/pyflakes/F401_19.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
"""Test that type parameters are considered used.""" | ||
|
||
from __future__ import annotations | ||
|
||
from typing import TYPE_CHECKING | ||
|
||
if TYPE_CHECKING: | ||
from collections.abc import Callable | ||
|
||
from .foo import Record as Record1 | ||
from .bar import Record as Record2 | ||
|
||
type RecordCallback[R: Record1] = Callable[[R], None] | ||
|
||
|
||
def process_record[R: Record2](record: R) -> None: | ||
... |
5 changes: 5 additions & 0 deletions
5
crates/ruff_linter/resources/test/fixtures/pyflakes/F821_20.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
"""Test lazy evaluation of type alias values.""" | ||
|
||
type RecordCallback[R: Record] = Callable[[R], None] | ||
|
||
from collections.abc import Callable |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 4 additions & 0 deletions
4
...er/src/rules/pyflakes/snapshots/ruff_linter__rules__pyflakes__tests__F401_F401_19.py.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
--- | ||
source: crates/ruff_linter/src/rules/pyflakes/mod.rs | ||
--- | ||
|
14 changes: 14 additions & 0 deletions
14
...er/src/rules/pyflakes/snapshots/ruff_linter__rules__pyflakes__tests__F821_F821_20.py.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
--- | ||
source: crates/ruff_linter/src/rules/pyflakes/mod.rs | ||
--- | ||
F821_20.py:3:24: F821 Undefined name `Record` | ||
| | ||
1 | """Test lazy evaluation of type alias values.""" | ||
2 | | ||
3 | type RecordCallback[R: Record] = Callable[[R], None] | ||
| ^^^^^^ F821 | ||
4 | | ||
5 | from collections.abc import Callable | ||
| | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters