Skip to content

Commit 11739e4

Browse files
authored
Stubtest: handle name-mangling edge cases better (#14596)
1 parent 523c381 commit 11739e4

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

mypy/stubtest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ def verify_typeinfo(
493493
for entry in sorted(to_check):
494494
mangled_entry = entry
495495
if entry.startswith("__") and not entry.endswith("__"):
496-
mangled_entry = f"_{stub.name}{entry}"
496+
mangled_entry = f"_{stub.name.lstrip('_')}{entry}"
497497
stub_to_verify = next((t.names[entry].node for t in stub.mro if entry in t.names), MISSING)
498498
assert stub_to_verify is not None
499499
try:

mypy/test/teststubtest.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,49 @@ def __mangle_bad(self, text): pass
11541154
""",
11551155
error="X.__mangle_bad",
11561156
)
1157+
yield Case(
1158+
stub="""
1159+
class Klass:
1160+
class __Mangled1:
1161+
class __Mangled2:
1162+
def __mangle_good(self, text: str) -> None: ...
1163+
def __mangle_bad(self, number: int) -> None: ...
1164+
""",
1165+
runtime="""
1166+
class Klass:
1167+
class __Mangled1:
1168+
class __Mangled2:
1169+
def __mangle_good(self, text): pass
1170+
def __mangle_bad(self, text): pass
1171+
""",
1172+
error="Klass.__Mangled1.__Mangled2.__mangle_bad",
1173+
)
1174+
yield Case(
1175+
stub="""
1176+
class __Dunder__:
1177+
def __mangle_good(self, text: str) -> None: ...
1178+
def __mangle_bad(self, number: int) -> None: ...
1179+
""",
1180+
runtime="""
1181+
class __Dunder__:
1182+
def __mangle_good(self, text): pass
1183+
def __mangle_bad(self, text): pass
1184+
""",
1185+
error="__Dunder__.__mangle_bad",
1186+
)
1187+
yield Case(
1188+
stub="""
1189+
class _Private:
1190+
def __mangle_good(self, text: str) -> None: ...
1191+
def __mangle_bad(self, number: int) -> None: ...
1192+
""",
1193+
runtime="""
1194+
class _Private:
1195+
def __mangle_good(self, text): pass
1196+
def __mangle_bad(self, text): pass
1197+
""",
1198+
error="_Private.__mangle_bad",
1199+
)
11571200

11581201
@collect_cases
11591202
def test_mro(self) -> Iterator[Case]:

0 commit comments

Comments
 (0)