@@ -3136,6 +3136,36 @@ match m3:
31363136 reveal_type(c3) # N: Revealed type is "builtins.int"
31373137[builtins fixtures/tuple.pyi]
31383138
3139+ [case testMatchSequencePatternVariadicTuple]
3140+ # flags: --strict-equality --warn-unreachable
3141+ from typing_extensions import Unpack
3142+
3143+ def f1(m: tuple[int, Unpack[tuple[str, ...]], int]) -> None:
3144+ match m:
3145+ case (a1, b1):
3146+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, builtins.int]"
3147+ case (a2, b2, c2):
3148+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, builtins.str, builtins.int]"
3149+ case (a3, b3, c3, d3):
3150+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, builtins.str, builtins.str, builtins.int]"
3151+ case (a4, *b4, c4):
3152+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, Unpack[builtins.tuple[builtins.str, ...]], builtins.int]"
3153+ case _:
3154+ reveal_type(m) # E: Statement is unreachable
3155+
3156+
3157+ def f2(m: tuple[int] | tuple[str, str] | tuple[int, Unpack[tuple[str, ...]], int]):
3158+ match m:
3159+ case (x,):
3160+ reveal_type(m) # N: Revealed type is "tuple[builtins.int]"
3161+ case (x, y):
3162+ reveal_type(m) # N: Revealed type is "tuple[builtins.str, builtins.str] | tuple[builtins.int, builtins.int]"
3163+ case (x, y, z):
3164+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, builtins.str, builtins.int]"
3165+ case _:
3166+ reveal_type(m) # N: Revealed type is "tuple[builtins.int, Unpack[builtins.tuple[builtins.str, ...]], builtins.int]"
3167+ [builtins fixtures/tuple.pyi]
3168+
31393169[case testMatchSequencePatternTypeVarTupleNotTooShort]
31403170# flags: --strict-equality --warn-unreachable
31413171from typing import Tuple
0 commit comments