Skip to content

Commit 6dba72c

Browse files
authoredOct 2, 2024
Enforce a non-None parent in build_function (pylint-dev#2562)
It's a part of the campaign to get rid of non-module roots
1 parent e3813e3 commit 6dba72c

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed
 

‎astroid/raw_building.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ def build_class(
136136

137137
def build_function(
138138
name: str,
139+
parent: nodes.NodeNG,
139140
args: list[str] | None = None,
140141
posonlyargs: list[str] | None = None,
141142
defaults: list[Any] | None = None,
@@ -149,7 +150,7 @@ def build_function(
149150
name,
150151
lineno=0,
151152
col_offset=0,
152-
parent=node_classes.Unknown(),
153+
parent=parent,
153154
end_col_offset=0,
154155
end_lineno=0,
155156
)
@@ -321,6 +322,7 @@ def object_build_function(
321322

322323
return build_function(
323324
getattr(member, "__name__", "<no-name>"),
325+
node,
324326
args,
325327
posonlyargs,
326328
defaults,
@@ -344,7 +346,7 @@ def object_build_methoddescriptor(
344346
"""create astroid for a living method descriptor object"""
345347
# FIXME get arguments ?
346348
name = getattr(member, "__name__", "<no-name>")
347-
func = build_function(name, doc=member.__doc__)
349+
func = build_function(name, node, doc=member.__doc__)
348350
_add_dunder_class(func, node, member)
349351
return func
350352

‎tests/test_raw_building.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -55,28 +55,28 @@ def test_build_class(self) -> None:
5555
self.assertEqual(node.doc_node, None)
5656

5757
def test_build_function(self) -> None:
58-
node = build_function("MyFunction")
58+
node = build_function("MyFunction", DUMMY_MOD)
5959
self.assertEqual(node.name, "MyFunction")
6060
self.assertEqual(node.doc_node, None)
6161

6262
def test_build_function_args(self) -> None:
6363
args = ["myArgs1", "myArgs2"]
64-
node = build_function("MyFunction", args)
64+
node = build_function("MyFunction", DUMMY_MOD, args)
6565
self.assertEqual("myArgs1", node.args.args[0].name)
6666
self.assertEqual("myArgs2", node.args.args[1].name)
6767
self.assertEqual(2, len(node.args.args))
6868

6969
def test_build_function_defaults(self) -> None:
7070
defaults = ["defaults1", "defaults2"]
71-
node = build_function(name="MyFunction", args=None, defaults=defaults)
71+
node = build_function("MyFunction", DUMMY_MOD, args=None, defaults=defaults)
7272
self.assertEqual(2, len(node.args.defaults))
7373

7474
def test_build_function_posonlyargs(self) -> None:
75-
node = build_function(name="MyFunction", posonlyargs=["a", "b"])
75+
node = build_function("MyFunction", DUMMY_MOD, posonlyargs=["a", "b"])
7676
self.assertEqual(2, len(node.args.posonlyargs))
7777

7878
def test_build_function_kwonlyargs(self) -> None:
79-
node = build_function(name="MyFunction", kwonlyargs=["a", "b"])
79+
node = build_function("MyFunction", DUMMY_MOD, kwonlyargs=["a", "b"])
8080
assert len(node.args.kwonlyargs) == 2
8181
assert node.args.kwonlyargs[0].name == "a"
8282
assert node.args.kwonlyargs[1].name == "b"

0 commit comments

Comments
 (0)
Please sign in to comment.