-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
PEP 702 (@deprecated): improve the handling of explicit type annotations of assignment statements #17899
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ilevkivskyi
merged 12 commits into
python:master
from
tyralla:feature/deprecated/improve_annotated_assignments
Oct 11, 2024
Merged
PEP 702 (@deprecated): improve the handling of explicit type annotations of assignment statements #17899
Changes from 9 commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
89d5355
Two improvements of the current PEP 702 implementation (@deprecated):
tyralla e2ccc4e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 755b479
some fixes (mainly to avoid recursion errors)
tyralla cf70747
some fixes (mainly to avoid recursion errors)
tyralla 466ee43
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 55b4126
fix type hint
tyralla f8f8d73
`search_deprecated` -> `InstanceDeprecatedVisitor` (and additionally …
tyralla 8547b2e
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] a484f16
avoid recursion errors
tyralla 6e9d4b4
Derive `InstanceDeprecatedVisitor` from `TypeTraverserVisitor` instea…
tyralla 90039d8
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 98fea8c
Do not report using indirectly deprecated aliases.
tyralla File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -102,7 +102,8 @@ def h() -> None: ... | |
|
||
[case testDeprecatedClass] | ||
|
||
from typing_extensions import deprecated | ||
from typing import Callable, List, Optional, Tuple, Union | ||
from typing_extensions import deprecated, TypeAlias | ||
|
||
@deprecated("use C2 instead") | ||
class C: ... | ||
|
@@ -114,10 +115,38 @@ C.missing() # N: class __main__.C is deprecated: use C2 instead \ | |
C.__init__(c) # N: class __main__.C is deprecated: use C2 instead | ||
C(1) # N: class __main__.C is deprecated: use C2 instead \ | ||
# E: Too many arguments for "C" | ||
|
||
D = C # N: class __main__.C is deprecated: use C2 instead | ||
D() | ||
t = (C, C, D) # N: class __main__.C is deprecated: use C2 instead | ||
|
||
u1: Union[C, int] = 1 # N: class __main__.C is deprecated: use C2 instead | ||
u1 = 1 | ||
u2 = 1 # type: Union[C, int] # N: class __main__.C is deprecated: use C2 instead | ||
u2 = 1 | ||
|
||
c1 = c2 = C() # N: class __main__.C is deprecated: use C2 instead | ||
i, c3 = 1, C() # N: class __main__.C is deprecated: use C2 instead | ||
|
||
class E: ... | ||
|
||
x1: Optional[C] # N: class __main__.C is deprecated: use C2 instead | ||
x2: Union[D, C, E] # N: class __main__.C is deprecated: use C2 instead | ||
x3: Union[D, Optional[C], E] # N: class __main__.C is deprecated: use C2 instead | ||
x4: Tuple[D, C, E] # N: class __main__.C is deprecated: use C2 instead | ||
x5: Tuple[Tuple[D, C], E] # N: class __main__.C is deprecated: use C2 instead | ||
x6: List[C] # N: class __main__.C is deprecated: use C2 instead | ||
x7: List[List[C]] # N: class __main__.C is deprecated: use C2 instead | ||
x8: List[Optional[Tuple[Union[List[C], int]]]] # N: class __main__.C is deprecated: use C2 instead | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe add a test case involving type aliases (including generic and/or recursive ones). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. |
||
x9: Callable[[int], C] # N: class __main__.C is deprecated: use C2 instead | ||
x10: Callable[[int, C, int], int] # N: class __main__.C is deprecated: use C2 instead | ||
|
||
A1: TypeAlias = Optional[C] # ToDo | ||
x11: A1 # N: class __main__.C is deprecated: use C2 instead | ||
|
||
A2: TypeAlias = List[Union[A2, C]] # ToDo | ||
x12: A2 # N: class __main__.C is deprecated: use C2 instead | ||
|
||
[builtins fixtures/tuple.pyi] | ||
|
||
|
||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, this is not what I meant, you should inherit
TypeTraverserVisitor
instead, and override onlyvisit_instance()
and maybevisit_type_alias_type()
(the latter is only needed if you want to show an error at each use place, instead of only at the type alias definition r.h.s.)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No problem.
TypeTraverserVisitor
is the more convenient base class, of course. Now I know it exists.I also changed the name
visited
toseen_aliases
(in agreement withTypeArgumentAnalyzer
).I was unsure whether emitting deprecation notes due to using type alias definitions is a good idea. I had a slight tendency towards it, so I implemented it this way for now. Maybe @JelleZijlstra has a better thought-out opinion on this?