Skip to content

Commit 57a2586

Browse files
committed
Do not push partial types to binder
1 parent 66dd2c1 commit 57a2586

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

mypy/checker.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3311,6 +3311,7 @@ def check_assignment(
33113311
# Partial type can't be final, so strip any literal values.
33123312
rvalue_type = remove_instance_last_known_values(rvalue_type)
33133313
inferred_type = make_simplified_union([rvalue_type, NoneType()])
3314+
self.binder.put(lvalue, inferred_type)
33143315
self.set_inferred_type(var, lvalue, inferred_type)
33153316
else:
33163317
var.type = None
@@ -3373,6 +3374,7 @@ def check_assignment(
33733374
break
33743375
if has_if_ancestor:
33753376
lvalue_type = make_optional_type(lvalue_type)
3377+
self.binder.put(lvalue, lvalue_type)
33763378
self.set_inferred_type(lvalue.node, lvalue, lvalue_type)
33773379

33783380
rvalue_type, lvalue_type = self.check_simple_assignment(
@@ -3413,7 +3415,11 @@ def check_assignment(
34133415
and lvalue_type is not None
34143416
):
34153417
lvalue.node.type = remove_instance_last_known_values(lvalue_type)
3416-
elif self.options.allow_redefinition_new and lvalue_type is not None:
3418+
elif (
3419+
self.options.allow_redefinition_new
3420+
and lvalue_type is not None
3421+
and not isinstance(lvalue_type, PartialType)
3422+
):
34173423
# TODO: Can we use put() here?
34183424
self.binder.assign_type(lvalue, lvalue_type, lvalue_type)
34193425

test-data/unit/check-redefine2.test

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,16 @@ class C4:
369369
reveal_type(self.x) # N: Revealed type is "builtins.list[builtins.str]"
370370

371371
reveal_type(C4().x) # N: Revealed type is "builtins.list[builtins.str]"
372+
373+
class C5:
374+
def __init__(self) -> None:
375+
if int():
376+
self.x = None
377+
return
378+
self.x = [""]
379+
reveal_type(self.x) # N: Revealed type is "builtins.list[builtins.str]"
380+
381+
reveal_type(C5().x) # N: Revealed type is "Union[builtins.list[builtins.str], None]"
372382
[builtins fixtures/list.pyi]
373383

374384
[case testNewRedefinePartialGenericTypes]

0 commit comments

Comments
 (0)