FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Fix swapping TypeVars with defaults. by randolf-scholz · Pull Request #19448 · python/mypy · GitHub

Repository navigation

Fix swapping TypeVars with defaults. - #19448

Closed
randolf-scholz wants to merge 1 commit into
python:masterfrom
randolf-scholz:fix_typevar_default
Closed

randolf-scholz wants to merge 1 commit into
python:masterfrom
randolf-scholz:fix_typevar_default

Conversation

Copy link
Copy Markdown
Contributor

My idea is that we should only return the result of repl = repl.accept(self) if that result is no longer a TypeVarType, because if we are simply permuting the type variables, then this will be incorrect.

Copy link
Copy Markdown
Contributor

According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅

Comment thread mypy/expandtype.py
Comment on lines +251 to +254
if isinstance(expanded, TypeVarType):
expanded.default = expanded.default.accept(self)
else:
repl = expanded

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

maybe more readable if done the other way round?

expanded = repl.accept(self)
if not isinstance(expanded, TypeVarType):
    repl = expanded
else:
    expanded.default = expanded.default.accept(self)

ilevkivskyi pushed a commit that referenced this pull request Oct 27, 2025
- Fixes #19444. (added `testTypeVarDefaultsSwap`)
- Fixes #19362 (added `testTypeVarDefaultsSwap2`)

Changed the logic for recursion guards of `TypeVarType`: Instead of
always substituting `repl = repl.accept(self)`, and situationally
updating `repl.default = repl.default.accept(self)` if the result is a
`TypeVarType`, we now always update `repl.default =
repl.default.accept(self)` a priori and then only choose the expanded
`repl.accept(self)` if the result is a concrete type.

## New Tests

- `testTypeVarDefaultsSwap`
(https://mypy-play.net/?mypy=1.17.0&python=3.12&gist=d5a025a31ae3c8b9e2a36f4738aa1991)
- `testTypeVarDefaultsSwap2`
(https://mypy-play.net/?mypy=1.17.0&python=3.12&gist=d3ed42c82f7144967c97d846c4c041ef)

PS: closed earlier PRs #19447, since it contained debugging changes, and
#19448 because it didn't solve #19362.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[PEP 696] Assigning to type variables with defaults gives unexpected results

1 participant


Back | FazBrowse Home | New Git URL