Skip to content

Commit 4ddd34e

Browse files
committed
Unpack Never iterables
1 parent 6cc9930 commit 4ddd34e

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

mypy/checker.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4251,7 +4251,7 @@ def check_multi_assignment_from_iterable(
42514251
) -> None:
42524252
rvalue_type = get_proper_type(rvalue_type)
42534253
if self.type_is_iterable(rvalue_type) and isinstance(
4254-
rvalue_type, (Instance, CallableType, TypeType, Overloaded)
4254+
rvalue_type, (Instance, CallableType, TypeType, Overloaded, UninhabitedType)
42554255
):
42564256
item_type = self.iterable_item_type(rvalue_type, context)
42574257
for lv in lvalues:
@@ -7556,7 +7556,9 @@ def note(
75567556
self.msg.note(msg, context, offset=offset, code=code)
75577557

75587558
def iterable_item_type(
7559-
self, it: Instance | CallableType | TypeType | Overloaded, context: Context
7559+
self,
7560+
it: Instance | CallableType | TypeType | Overloaded | UninhabitedType,
7561+
context: Context,
75607562
) -> Type:
75617563
if isinstance(it, Instance):
75627564
iterable = map_instance_to_supertype(it, self.lookup_typeinfo("typing.Iterable"))

test-data/unit/check-unreachable-code.test

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,3 +1535,16 @@ x = 0 # not unreachable
15351535

15361536
f2: Callable[[], NoReturn] = lambda: foo()
15371537
x = 0 # not unreachable
1538+
1539+
[case testUnpackNever]
1540+
x: str
1541+
if isinstance(x, int):
1542+
# mypy wants a type annotation for y because it's `Never`.
1543+
# This doesn't make much sense in this case, but it's a
1544+
# requirement for composable behavior.
1545+
# (and `ys` should also get flagged.)
1546+
1547+
y, *ys = x # E: Need type annotation for "y"
1548+
reveal_type(y) # N: Revealed type is "Never"
1549+
reveal_type(ys) # N: Revealed type is "builtins.list[Never]"
1550+
[builtins fixtures/isinstancelist.pyi]

0 commit comments

Comments
 (0)