def _parse_functions(self, module: nodes.Module) -> None: """Parse the function definitions from typeshed.""" for function_def in module.nodes_of_class(nodes.FunctionDef): in_class = isinstance(function_def.parent, nodes.ClassDef) if in_class: tvars = self.classes[function_def.parent.name]["__pyta_tvars"] else: tvars = [] f_type = parse_annotations(function_def, tvars) if in_class: self.classes[function_def.parent.name][ function_def.name].extend(f_type) self.methods[function_def.name].extend(f_type) else: self.functions[function_def.name].extend(f_type)
def _parse_classes(self, module: nodes.Module) -> None: """Parse the class definitions from typeshed.""" for class_def in module.nodes_of_class(nodes.ClassDef): tvars = [] self.classes[class_def.name]["__bases"] = [] for base in class_def.bases: base_type = _node_to_type(base) self.classes[class_def.name]["__pyta_tvars"] = [ tv.__name__ for tv in _collect_tvars(base_type) ] self.classes[class_def.name]["__bases"].append(base_type) self.classes[class_def.name]["__mro"] = [ cls.name for cls in class_def.mro() ] for node in (nodes[0] for nodes in class_def.locals.values() if isinstance(nodes[0], nodes.AssignName) and isinstance(nodes[0].parent, nodes.AnnAssign)): self.classes[class_def.name][node.name] = parse_annotations( node, tvars)