-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Introduce temporary named expressions for match subjects
#18446
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 17 commits into
python:master
from
sterliakov:bugfix/st-synthetic-named-expr-in-match
Aug 3, 2025
Merged
Changes from 14 commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
b3ec408
Create fake named expressions for `match` subject in more cases
sterliakov 2da85ea
Merge remote-tracking branch 'upstream/master' into bugfix/st-synthet…
sterliakov 0160d1d
Merge remote-tracking branch 'upstream/master' into bugfix/st-synthet…
sterliakov 01b92c9
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
sterliakov 9967f27
Merge remote-tracking branch 'upstream/master' into bugfix/st-synthet…
sterliakov 6e09fd0
Merge remote-tracking branch 'upstream/master' into bugfix/st-synthet…
sterliakov 5e0b259
Add the original subject to typemap for inference
sterliakov 968a8bd
Merge remote-tracking branch 'upstream/master' into bugfix/st-synthet…
sterliakov 85d16bd
Add comment
sterliakov ded98cb
And we can keep inline collection literals too now since we infer both
sterliakov a772dc9
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
sterliakov a24af26
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
sterliakov a9f206b
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
sterliakov 8f8cf42
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
sterliakov 0bf5dc9
Merge branch 'master' into bugfix/st-synthetic-named-expr-in-match
ilevkivskyi 914f6c8
Simplify the check: we can name primitive literals just as well, it s…
sterliakov 4773a38
Move this logic closer to binder, stop putting AssignmentExpr directly
sterliakov 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 hidden or 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 hidden or 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
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.
IIUC match statement handling re-uses binder in some code paths. Then I I think instead of this list we should do the same that binder does:
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.
Nice idea, but are you sure?
mypy/mypy/literals.py
Lines 117 to 124 in fc991a0
This will break
testMatchOperationscase added here, for example, as1 < 2will returnLITERAL_YES, and we do not store types of comparison exprs in binder AFAIC.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.
Right, binder also does
isinstance(expr, (IndexExpr, MemberExpr, NameExpr))before checking forliteral(). But then this list will not be simplified much. Even then probably it would make sense to somehow re-use binder logic here.Btw I am not super-confident about
AssignmentExpr, what about something likex := y[z](wherezis not a literal)? This will have troubles with binder.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, I meant the opposite
x[y] := zwith non-literaly.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.
Did I miss a new PEP? If I didn't, this should be reported elsewhere as a SyntaxError...
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.
Maybe we can add a common ancestor to
{Str,Bytes,Int,Float,Complex}Expr? Semantically they should have a "primitive literal" superclass, then this list will look much saner - just "name or primitive".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.
Hm. I only decided to allow primitive literals as an optimization, but nothing will break if we store their types. Matching of primitive literals sounds like something no one should be doing (often). Let's remove them altogether!