You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix narrowing information not propagated in assignment and boolean expressions
Fixes#8925.
Consider the following narrowing (more realistically with TypedDicts),
and the current outcome:
```py
class A:
tag: Literal["A"]
class B:
tag: Literal["B"]
abo: A | B | None
if abo is not None and abo.tag == "A":
reveal_type(abo.tag) # Type is Literal["A"]
reveal_type(abo) # Type is A | B
```
The RHS of the comparison correctly takes into account the LHS, and the
`abo.tag` expression is correctly narrowed based on it, but this does
not propagate upward to then narrow `abo` to `A`.
The problem is that `and`/`or/`not`/assignment expressions recurse using
the `find_isinstance_check_helper` function, which omits the
`propagate_up_typemap_info` calls that its parent function
`find_isinstance_check` performs.
Fix this by replacing these recursive `find_isinstance_check_helper`
calls with `find_isinstance_check`. This might not always be necessary,
but I do not think that always propagating upwards should do any harm,
anyways.
0 commit comments