@@ -165,7 +165,9 @@ def register_arguments(func, args=None):
165
165
register_arguments (func , arg .elts )
166
166
167
167
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 :
169
171
"""create astroid for a living class object"""
170
172
basenames = [base .__name__ for base in member .__bases__ ]
171
173
return _base_class_object_build (node , member , basenames , localname = localname )
@@ -201,12 +203,18 @@ def object_build_function(node, member, localname):
201
203
node .add_local_node (func , localname )
202
204
203
205
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 :
205
209
"""create astroid for a living data descriptor object"""
206
210
return _base_class_object_build (node , member , [], name )
207
211
208
212
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 :
210
218
"""create astroid for a living method descriptor object"""
211
219
# FIXME get arguments ?
212
220
func = build_function (
@@ -219,12 +227,20 @@ def object_build_methoddescriptor(node, member, localname):
219
227
_add_dunder_class (func , member )
220
228
221
229
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 :
223
237
"""create astroid for a living class object, with a given set of base names
224
238
(e.g. ancestors)
225
239
"""
240
+ class_name = name or getattr (member , "__name__" , None ) or localname
241
+ assert isinstance (class_name , str )
226
242
klass = build_class (
227
- name or getattr ( member , "__name__" , None ) or localname ,
243
+ class_name ,
228
244
basenames ,
229
245
member .__doc__ ,
230
246
)
@@ -285,7 +301,7 @@ class InspectBuilder:
285
301
286
302
def __init__ (self , manager_instance = None ):
287
303
self ._manager = manager_instance or AstroidManager ()
288
- self ._done = {}
304
+ self ._done : dict [ types . ModuleType | type , nodes . Module | nodes . ClassDef ] = {}
289
305
self ._module = None
290
306
291
307
def inspect_build (
@@ -314,12 +330,14 @@ def inspect_build(
314
330
self .object_build (node , module )
315
331
return node
316
332
317
- def object_build (self , node , obj ):
333
+ def object_build (
334
+ self , node : nodes .Module | nodes .ClassDef , obj : types .ModuleType | type
335
+ ) -> None :
318
336
"""recursive method which create a partial ast from real objects
319
337
(only function, class, and method are handled)
320
338
"""
321
339
if obj in self ._done :
322
- return self . _done [ obj ]
340
+ return None
323
341
self ._done [obj ] = node
324
342
for name in dir (obj ):
325
343
# inspect.ismethod() and inspect.isbuiltin() in PyPy return
@@ -346,6 +364,7 @@ def object_build(self, node, obj):
346
364
continue
347
365
if member in self ._done :
348
366
class_node = self ._done [member ]
367
+ assert isinstance (class_node , nodes .ClassDef )
349
368
if class_node not in node .locals .get (name , ()):
350
369
node .add_local_node (class_node , name )
351
370
else :
@@ -355,10 +374,8 @@ def object_build(self, node, obj):
355
374
if name == "__class__" and class_node .parent is None :
356
375
class_node .parent = self ._done [self ._module ]
357
376
elif inspect .ismethoddescriptor (member ):
358
- assert isinstance (member , object )
359
377
object_build_methoddescriptor (node , member , name )
360
378
elif inspect .isdatadescriptor (member ):
361
- assert isinstance (member , object )
362
379
object_build_datadescriptor (node , member , name )
363
380
elif isinstance (member , _CONSTANTS ):
364
381
attach_const_node (node , name , member )
0 commit comments