Skip to content

Commit 5cc30c9

Browse files
committed
Fix single item enum match type exhaustion
1 parent 02c50bc commit 5cc30c9

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

mypy/checkpattern.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def visit_value_pattern(self, o: ValuePattern) -> PatternType:
202202
typ = self.chk.expr_checker.accept(o.expr)
203203
typ = coerce_to_literal(typ)
204204
narrowed_type, rest_type = self.chk.conditional_types_with_intersection(
205-
current_type, [get_type_range(typ)], o, default=current_type
205+
current_type, [get_type_range(typ)], o, default=get_type_range(typ).item
206206
)
207207
if not isinstance(get_proper_type(narrowed_type), (LiteralType, UninhabitedType)):
208208
return PatternType(narrowed_type, UnionType.make_union([narrowed_type, rest_type]), {})

test-data/unit/check-python310.test

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,6 +1369,40 @@ match m3:
13691369
reveal_type(m3) # N: Revealed type is "Tuple[Union[builtins.int, builtins.str]]"
13701370
[builtins fixtures/tuple.pyi]
13711371

1372+
[case testMatchEnumMultipleChoices]
1373+
from enum import Enum
1374+
class Medal(Enum):
1375+
gold = 1
1376+
silver = 1
1377+
1378+
def f(m: Medal) -> int:
1379+
match m:
1380+
case Medal.gold:
1381+
reveal_type(m) # N: Revealed type is "Literal[__main__.Medal.gold]"
1382+
return 0
1383+
case Medal.silver:
1384+
reveal_type(m) # N: Revealed type is "Literal[__main__.Medal.silver]"
1385+
return 2
1386+
case _:
1387+
reveal_type(m)
1388+
return 2
1389+
[builtins fixtures/bool.pyi]
1390+
1391+
[case testMatchEnumSingleChoice]
1392+
from enum import Enum
1393+
class Medal(Enum):
1394+
gold = 1
1395+
1396+
def f(m: Medal) -> int:
1397+
match m:
1398+
case Medal.gold:
1399+
reveal_type(m) # N: Revealed type is "Literal[__main__.Medal.gold]"
1400+
return 0
1401+
case _:
1402+
reveal_type(m)
1403+
return 1
1404+
[builtins fixtures/bool.pyi]
1405+
13721406
[case testMatchLiteralPatternEnumNegativeNarrowing]
13731407
from enum import Enum
13741408
class Medal(Enum):

0 commit comments

Comments
 (0)