Commit 171e6f8
authored
stubgen: Fix call-based namedtuple omitted from class bases (#14680)
Fixes #9901
Fixes #13662
Fix inheriting from a call-based `collections.namedtuple` /
`typing.NamedTuple` definition that was omitted from the generated stub.
This automatically adds support for the call-based `NamedTuple` in
general not only in class bases (Closes #13788).
<details>
<summary>An example before and after</summary>
Input:
```python
import collections
import typing
from collections import namedtuple
from typing import NamedTuple
CollectionsCall = namedtuple("CollectionsCall", ["x", "y"])
class CollectionsClass(namedtuple("CollectionsClass", ["x", "y"])):
def f(self, a):
pass
class CollectionsDotClass(collections.namedtuple("CollectionsClass", ["x", "y"])):
def f(self, a):
pass
TypingCall = NamedTuple("TypingCall", [("x", int | None), ("y", int)])
class TypingClass(NamedTuple):
x: int | None
y: str
def f(self, a):
pass
class TypingClassWeird(NamedTuple("TypingClassWeird", [("x", int | None), ("y", str)])):
z: float | None
def f(self, a):
pass
class TypingDotClassWeird(typing.NamedTuple("TypingClassWeird", [("x", int | None), ("y", str)])):
def f(self, a):
pass
```
Output diff (before and after):
```diff
diff --git a/before.pyi b/after.pyi
index c88530e2c..95ef843b4 100644
--- a/before.pyi
+++ b/after.pyi
@@ -1,26 +1,29 @@
+import typing
from _typeshed import Incomplete
from typing_extensions import NamedTuple
class CollectionsCall(NamedTuple):
x: Incomplete
y: Incomplete
-class CollectionsClass:
+class CollectionsClass(NamedTuple('CollectionsClass', [('x', Incomplete), ('y', Incomplete)])):
def f(self, a) -> None: ...
-class CollectionsDotClass:
+class CollectionsDotClass(NamedTuple('CollectionsClass', [('x', Incomplete), ('y', Incomplete)])):
def f(self, a) -> None: ...
-TypingCall: Incomplete
+class TypingCall(NamedTuple):
+ x: int | None
+ y: int
class TypingClass(NamedTuple):
x: int | None
y: str
def f(self, a) -> None: ...
-class TypingClassWeird:
+class TypingClassWeird(NamedTuple('TypingClassWeird', [('x', int | None), ('y', str)])):
z: float | None
def f(self, a) -> None: ...
-class TypingDotClassWeird:
+class TypingDotClassWeird(typing.NamedTuple('TypingClassWeird', [('x', int | None), ('y', str)])):
def f(self, a) -> None: ...
```
</details>1 parent d710fdd commit 171e6f8
2 files changed
+168
-23
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
107 | | - | |
108 | 107 | | |
109 | 108 | | |
110 | 109 | | |
| |||
129 | 128 | | |
130 | 129 | | |
131 | 130 | | |
| 131 | + | |
132 | 132 | | |
133 | 133 | | |
134 | 134 | | |
| |||
400 | 400 | | |
401 | 401 | | |
402 | 402 | | |
| 403 | + | |
| 404 | + | |
403 | 405 | | |
404 | 406 | | |
405 | 407 | | |
406 | | - | |
| 408 | + | |
407 | 409 | | |
408 | 410 | | |
409 | 411 | | |
| |||
1010 | 1012 | | |
1011 | 1013 | | |
1012 | 1014 | | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
1013 | 1046 | | |
1014 | 1047 | | |
1015 | 1048 | | |
| |||
1022 | 1055 | | |
1023 | 1056 | | |
1024 | 1057 | | |
1025 | | - | |
1026 | | - | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
1027 | 1063 | | |
1028 | 1064 | | |
1029 | 1065 | | |
| |||
1069 | 1105 | | |
1070 | 1106 | | |
1071 | 1107 | | |
1072 | | - | |
1073 | | - | |
1074 | | - | |
| 1108 | + | |
1075 | 1109 | | |
1076 | | - | |
1077 | | - | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
1078 | 1117 | | |
1079 | 1118 | | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
1080 | 1163 | | |
1081 | 1164 | | |
1082 | 1165 | | |
1083 | | - | |
1084 | | - | |
1085 | | - | |
1086 | | - | |
1087 | | - | |
1088 | | - | |
1089 | | - | |
| 1166 | + | |
| 1167 | + | |
1090 | 1168 | | |
1091 | 1169 | | |
1092 | 1170 | | |
1093 | 1171 | | |
1094 | 1172 | | |
1095 | | - | |
| 1173 | + | |
1096 | 1174 | | |
| 1175 | + | |
1097 | 1176 | | |
1098 | | - | |
1099 | 1177 | | |
1100 | | - | |
1101 | | - | |
1102 | | - | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
1103 | 1181 | | |
1104 | 1182 | | |
1105 | 1183 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
641 | 641 | | |
642 | 642 | | |
643 | 643 | | |
644 | | - | |
| 644 | + | |
645 | 645 | | |
| 646 | + | |
646 | 647 | | |
647 | 648 | | |
648 | 649 | | |
| |||
651 | 652 | | |
652 | 653 | | |
653 | 654 | | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
654 | 659 | | |
655 | | - | |
| 660 | + | |
656 | 661 | | |
| 662 | + | |
657 | 663 | | |
658 | 664 | | |
659 | 665 | | |
660 | 666 | | |
661 | 667 | | |
| 668 | + | |
| 669 | + | |
662 | 670 | | |
663 | 671 | | |
664 | 672 | | |
| |||
697 | 705 | | |
698 | 706 | | |
699 | 707 | | |
| 708 | + | |
700 | 709 | | |
701 | 710 | | |
| 711 | + | |
702 | 712 | | |
703 | 713 | | |
704 | 714 | | |
| |||
710 | 720 | | |
711 | 721 | | |
712 | 722 | | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
713 | 727 | | |
714 | 728 | | |
715 | 729 | | |
| |||
728 | 742 | | |
729 | 743 | | |
730 | 744 | | |
| 745 | + | |
731 | 746 | | |
732 | 747 | | |
733 | 748 | | |
734 | 749 | | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
735 | 753 | | |
736 | 754 | | |
737 | 755 | | |
| |||
748 | 766 | | |
749 | 767 | | |
750 | 768 | | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
751 | 778 | | |
752 | 779 | | |
| 780 | + | |
753 | 781 | | |
| 782 | + | |
| 783 | + | |
754 | 784 | | |
755 | 785 | | |
756 | 786 | | |
757 | 787 | | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
758 | 825 | | |
759 | 826 | | |
760 | 827 | | |
| |||
0 commit comments