MCPcopy Index your code
hub / github.com/python/mypy / visit_class_def

Method visit_class_def

mypy/stubgen.py:831–883  ·  view source on GitHub ↗
(self, o: ClassDef)

Source from the content-addressed store, hash-verified

829 return self.resolve_name(name)
830
831 def visit_class_def(self, o: ClassDef) -> None:
832 self._class_stack.append(o)
833 self.method_names = find_method_names(o.defs.body)
834 sep: int | None = None
835 if self.is_top_level() and self._state != EMPTY:
836 sep = len(self._output)
837 self.add("\n")
838 decorators = self.get_class_decorators(o)
839 for d in decorators:
840 self.add(f"{self._indent}@{d}\n")
841 self.record_name(o.name)
842 base_types = self.get_base_types(o)
843 if base_types:
844 for base in base_types:
845 self.import_tracker.require_name(base)
846 if self.analyzed and o.info.is_enum:
847 self.processing_enum = True
848 if isinstance(o.metaclass, (NameExpr, MemberExpr)):
849 meta = o.metaclass.accept(AliasPrinter(self))
850 base_types.append("metaclass=" + meta)
851 elif self.analyzed and o.info.is_abstract and not o.info.is_protocol:
852 base_types.append("metaclass=abc.ABCMeta")
853 self.import_tracker.add_import("abc")
854 self.import_tracker.require_name("abc")
855 bases = f"({', '.join(base_types)})" if base_types else ""
856 type_args = self.format_type_args(o)
857 self.add(f"{self._indent}class {o.name}{type_args}{bases}:\n")
858 self.indent()
859 if self._include_docstrings and o.docstring:
860 docstring = mypy.util.quote_docstring(o.docstring)
861 self.add(f"{self._indent}{docstring}\n")
862 n = len(self._output)
863 self._vars.append([])
864 if self.analyzed and (spec := find_dataclass_transform_spec(o)):
865 self.processing_dataclass = True
866 self.dataclass_field_specifier = spec.field_specifiers
867 super().visit_class_def(o)
868 self.dedent()
869 self._vars.pop()
870 self._vars[-1].append(o.name)
871 if len(self._output) == n:
872 if self._state == EMPTY_CLASS and sep is not None:
873 self._output[sep] = ""
874 if not (self._include_docstrings and o.docstring):
875 self._output[-1] = self._output[-1][:-1] + " ...\n"
876 self._state = EMPTY_CLASS
877 else:
878 self._state = CLASS
879 self.method_names = set()
880 self.processing_dataclass = False
881 self.dataclass_field_specifier = ()
882 self._class_stack.pop(-1)
883 self.processing_enum = False
884
885 def get_base_types(self, cdef: ClassDef) -> list[str]:
886 """Get list of base classes for a class."""

Callers

nothing calls this directly

Calls 15

get_class_decoratorsMethod · 0.95
get_base_typesMethod · 0.95
find_method_namesFunction · 0.85
lenFunction · 0.85
isinstanceFunction · 0.85
AliasPrinterClass · 0.85
setClass · 0.85
appendMethod · 0.80
record_nameMethod · 0.80
require_nameMethod · 0.80
add_importMethod · 0.80

Tested by

no test coverage detected