Fix stripping of C type names
diff --git a/mypy/stubgenc.py b/mypy/stubgenc.py index e2d4a60..f5fe7c1 100644 --- a/mypy/stubgenc.py +++ b/mypy/stubgenc.py
@@ -199,16 +199,16 @@ module: in which this type is used imports: list of import statements (may be modified during the call) """ - arg_type = typ - if module and typ.startswith(module.__name__): - arg_type = typ[len(module.__name__) + 1:] + stripped_type = typ + if module and typ.startswith(module.__name__ + '.'): + stripped_type = typ[len(module.__name__) + 1:] elif '.' in typ: - arg_module = arg_type[:arg_type.rindex('.')] + arg_module = typ[:typ.rindex('.')] if arg_module == 'builtins': - arg_type = arg_type[len('builtins') + 1:] + stripped_type = typ[len('builtins') + 1:] else: imports.append('import %s' % (arg_module,)) - return arg_type + return stripped_type def generate_c_property_stub(name: str, obj: object, output: List[str], readonly: bool) -> None: @@ -295,7 +295,7 @@ if bases: bases_str = '(%s)' % ', '.join( strip_or_import( - '%s.%s' % (base.__module__, base.__name__), + get_type_fullname(base), module, imports ) for base in bases @@ -314,6 +314,10 @@ output.append(' %s' % prop) +def get_type_fullname(typ: type) -> str: + return '%s.%s' % (typ.__module__, typ.__name__) + + def method_name_sort_key(name: str) -> Tuple[int, str]: """Sort methods in classes in a typical order.