@@ -49,15 +49,15 @@ def _attach_local_node(parent, node, name: str) -> None:
4949 parent .add_local_node (node )
5050
5151
52- def _add_dunder_class (func , member ) -> None :
52+ def _add_dunder_class (func , parent : nodes . NodeNG , member ) -> None :
5353 """Add a __class__ member to the given func node, if we can determine it."""
5454 python_cls = member .__class__
5555 cls_name = getattr (python_cls , "__name__" , None )
5656 if not cls_name :
5757 return
5858 cls_bases = [ancestor .__name__ for ancestor in python_cls .__bases__ ]
5959 doc = python_cls .__doc__ if isinstance (python_cls .__doc__ , str ) else None
60- ast_klass = build_class (cls_name , cls_bases , doc )
60+ ast_klass = build_class (cls_name , parent , cls_bases , doc )
6161 func .instance_attrs ["__class__" ] = [ast_klass ]
6262
6363
@@ -97,7 +97,10 @@ def build_module(name: str, doc: str | None = None) -> nodes.Module:
9797
9898
9999def build_class (
100- name : str , basenames : Iterable [str ] = (), doc : str | None = None
100+ name : str ,
101+ parent : nodes .NodeNG ,
102+ basenames : Iterable [str ] = (),
103+ doc : str | None = None ,
101104) -> nodes .ClassDef :
102105 """Create and initialize an astroid ClassDef node."""
103106 node = nodes .ClassDef (
@@ -106,7 +109,7 @@ def build_class(
106109 col_offset = 0 ,
107110 end_lineno = 0 ,
108111 end_col_offset = 0 ,
109- parent = nodes . Unknown () ,
112+ parent = parent ,
110113 )
111114 node .postinit (
112115 bases = [
@@ -343,7 +346,7 @@ def object_build_methoddescriptor(
343346 getattr (member , "__name__" , None ) or localname , doc = member .__doc__
344347 )
345348 node .add_local_node (func , localname )
346- _add_dunder_class (func , member )
349+ _add_dunder_class (func , node , member )
347350
348351
349352def _base_class_object_build (
@@ -359,9 +362,8 @@ def _base_class_object_build(
359362 class_name = name or getattr (member , "__name__" , None ) or localname
360363 assert isinstance (class_name , str )
361364 doc = member .__doc__ if isinstance (member .__doc__ , str ) else None
362- klass = build_class (class_name , basenames , doc )
365+ klass = build_class (class_name , node , basenames , doc )
363366 klass ._newstyle = isinstance (member , type )
364- node .add_local_node (klass , localname )
365367 try :
366368 # limit the instantiation trick since it's too dangerous
367369 # (such as infinite test execution...)
@@ -603,14 +605,11 @@ def _astroid_bootstrapping() -> None:
603605
604606 for cls , node_cls in node_classes .CONST_CLS .items ():
605607 if cls is TYPE_NONE :
606- proxy = build_class ("NoneType" )
607- proxy .parent = astroid_builtin
608+ proxy = build_class ("NoneType" , astroid_builtin )
608609 elif cls is TYPE_NOTIMPLEMENTED :
609- proxy = build_class ("NotImplementedType" )
610- proxy .parent = astroid_builtin
610+ proxy = build_class ("NotImplementedType" , astroid_builtin )
611611 elif cls is TYPE_ELLIPSIS :
612- proxy = build_class ("Ellipsis" )
613- proxy .parent = astroid_builtin
612+ proxy = build_class ("Ellipsis" , astroid_builtin )
614613 else :
615614 proxy = astroid_builtin .getattr (cls .__name__ )[0 ]
616615 assert isinstance (proxy , nodes .ClassDef )
0 commit comments