@@ -68,6 +68,7 @@ class Mapping(Generic[_K, _V]): ...
68
68
class Match(Generic[AnyStr]): ...
69
69
class Sequence(Iterable[_T_co]): ...
70
70
class Tuple(Sequence[_T_co]): ...
71
+ class NamedTuple(tuple[Any, ...]): ...
71
72
def overload(func: _T) -> _T: ...
72
73
"""
73
74
@@ -82,6 +83,7 @@ def overload(func: _T) -> _T: ...
82
83
class object:
83
84
__module__: str
84
85
def __init__(self) -> None: pass
86
+ def __repr__(self) -> str: pass
85
87
class type: ...
86
88
87
89
class tuple(Sequence[T_co], Generic[T_co]): ...
@@ -1599,6 +1601,72 @@ class Y(TypedDict):
1599
1601
error = None ,
1600
1602
)
1601
1603
1604
+ @collect_cases
1605
+ def test_named_tuple (self ) -> Iterator [Case ]:
1606
+ yield Case (
1607
+ stub = "from typing import NamedTuple" ,
1608
+ runtime = "from typing import NamedTuple" ,
1609
+ error = None ,
1610
+ )
1611
+ yield Case (
1612
+ stub = """
1613
+ class X1(NamedTuple):
1614
+ bar: int
1615
+ foo: str = ...
1616
+ """ ,
1617
+ runtime = """
1618
+ class X1(NamedTuple):
1619
+ bar: int
1620
+ foo: str = 'a'
1621
+ """ ,
1622
+ error = None ,
1623
+ )
1624
+ yield Case (
1625
+ stub = """
1626
+ class X2(NamedTuple):
1627
+ bar: int
1628
+ foo: str
1629
+ """ ,
1630
+ runtime = """
1631
+ class X2(NamedTuple):
1632
+ bar: int
1633
+ foo: str = 'a'
1634
+ """ ,
1635
+ # `__new__` will miss a default value for a `foo` parameter,
1636
+ # but we don't generate special errors for `foo` missing `...` part.
1637
+ error = "X2.__new__" ,
1638
+ )
1639
+
1640
+ @collect_cases
1641
+ def test_named_tuple_typing_and_collections (self ) -> Iterator [Case ]:
1642
+ yield Case (
1643
+ stub = "from typing import NamedTuple" ,
1644
+ runtime = "from collections import namedtuple" ,
1645
+ error = None ,
1646
+ )
1647
+ yield Case (
1648
+ stub = """
1649
+ class X1(NamedTuple):
1650
+ bar: int
1651
+ foo: str = ...
1652
+ """ ,
1653
+ runtime = """
1654
+ X1 = namedtuple('X1', ['bar', 'foo'], defaults=['a'])
1655
+ """ ,
1656
+ error = None ,
1657
+ )
1658
+ yield Case (
1659
+ stub = """
1660
+ class X2(NamedTuple):
1661
+ bar: int
1662
+ foo: str
1663
+ """ ,
1664
+ runtime = """
1665
+ X2 = namedtuple('X1', ['bar', 'foo'], defaults=['a'])
1666
+ """ ,
1667
+ error = "X2.__new__" ,
1668
+ )
1669
+
1602
1670
@collect_cases
1603
1671
def test_type_var (self ) -> Iterator [Case ]:
1604
1672
yield Case (
0 commit comments