@@ -165,7 +165,9 @@ def register_arguments(func, args=None):
165165 register_arguments (func , arg .elts )
166166
167167
168- def object_build_class (node , member , localname ):
168+ def object_build_class (
169+ node : nodes .Module | nodes .ClassDef , member : type , localname : str
170+ ) -> nodes .ClassDef :
169171 """create astroid for a living class object"""
170172 basenames = [base .__name__ for base in member .__bases__ ]
171173 return _base_class_object_build (node , member , basenames , localname = localname )
@@ -201,12 +203,18 @@ def object_build_function(node, member, localname):
201203 node .add_local_node (func , localname )
202204
203205
204- def object_build_datadescriptor (node , member , name ):
206+ def object_build_datadescriptor (
207+ node : nodes .Module | nodes .ClassDef , member : type , name : str
208+ ) -> nodes .ClassDef :
205209 """create astroid for a living data descriptor object"""
206210 return _base_class_object_build (node , member , [], name )
207211
208212
209- def object_build_methoddescriptor (node , member , localname ):
213+ def object_build_methoddescriptor (
214+ node : nodes .Module | nodes .ClassDef ,
215+ member ,
216+ localname : str ,
217+ ) -> None :
210218 """create astroid for a living method descriptor object"""
211219 # FIXME get arguments ?
212220 func = build_function (
@@ -219,12 +227,20 @@ def object_build_methoddescriptor(node, member, localname):
219227 _add_dunder_class (func , member )
220228
221229
222- def _base_class_object_build (node , member , basenames , name = None , localname = None ):
230+ def _base_class_object_build (
231+ node : nodes .Module | nodes .ClassDef ,
232+ member : type ,
233+ basenames : list [str ],
234+ name : str | None = None ,
235+ localname : str | None = None ,
236+ ) -> nodes .ClassDef :
223237 """create astroid for a living class object, with a given set of base names
224238 (e.g. ancestors)
225239 """
240+ class_name = name or getattr (member , "__name__" , None ) or localname
241+ assert isinstance (class_name , str )
226242 klass = build_class (
227- name or getattr ( member , "__name__" , None ) or localname ,
243+ class_name ,
228244 basenames ,
229245 member .__doc__ ,
230246 )
@@ -285,7 +301,7 @@ class InspectBuilder:
285301
286302 def __init__ (self , manager_instance = None ):
287303 self ._manager = manager_instance or AstroidManager ()
288- self ._done = {}
304+ self ._done : dict [ types . ModuleType | type , nodes . Module | nodes . ClassDef ] = {}
289305 self ._module = None
290306
291307 def inspect_build (
@@ -314,12 +330,14 @@ def inspect_build(
314330 self .object_build (node , module )
315331 return node
316332
317- def object_build (self , node , obj ):
333+ def object_build (
334+ self , node : nodes .Module | nodes .ClassDef , obj : types .ModuleType | type
335+ ) -> None :
318336 """recursive method which create a partial ast from real objects
319337 (only function, class, and method are handled)
320338 """
321339 if obj in self ._done :
322- return self . _done [ obj ]
340+ return None
323341 self ._done [obj ] = node
324342 for name in dir (obj ):
325343 # inspect.ismethod() and inspect.isbuiltin() in PyPy return
@@ -346,6 +364,7 @@ def object_build(self, node, obj):
346364 continue
347365 if member in self ._done :
348366 class_node = self ._done [member ]
367+ assert isinstance (class_node , nodes .ClassDef )
349368 if class_node not in node .locals .get (name , ()):
350369 node .add_local_node (class_node , name )
351370 else :
@@ -355,10 +374,8 @@ def object_build(self, node, obj):
355374 if name == "__class__" and class_node .parent is None :
356375 class_node .parent = self ._done [self ._module ]
357376 elif inspect .ismethoddescriptor (member ):
358- assert isinstance (member , object )
359377 object_build_methoddescriptor (node , member , name )
360378 elif inspect .isdatadescriptor (member ):
361- assert isinstance (member , object )
362379 object_build_datadescriptor (node , member , name )
363380 elif isinstance (member , _CONSTANTS ):
364381 attach_const_node (node , name , member )
0 commit comments