Skip to content

Commit 12ead82

Browse files
authored
Add typing to functions in raw_building (#1589)
1 parent 347ea0c commit 12ead82

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

astroid/raw_building.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)