Skip to content

Commit 3db2bdd

Browse files
Optimize argnames() (#2215)
Arguments cannot be parenthesized in Python 3. The unit test for this was already removed in 8ae94aa.
1 parent eabc643 commit 3db2bdd

File tree

2 files changed

+6
-14
lines changed

2 files changed

+6
-14
lines changed

astroid/nodes/scoped_nodes/scoped_nodes.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -954,7 +954,7 @@ def argnames(self) -> list[str]:
954954
:rtype: list(str)
955955
"""
956956
if self.args.arguments: # maybe None with builtin functions
957-
names = _rec_get_names(self.args.arguments)
957+
names = [elt.name for elt in self.args.arguments]
958958
else:
959959
names = []
960960
if self.args.vararg:
@@ -1246,7 +1246,7 @@ def argnames(self) -> list[str]:
12461246
:rtype: list(str)
12471247
"""
12481248
if self.args.arguments: # maybe None with builtin functions
1249-
names = _rec_get_names(self.args.arguments)
1249+
names = [elt.name for elt in self.args.arguments]
12501250
else:
12511251
names = []
12521252
if self.args.vararg:
@@ -1654,18 +1654,6 @@ async def func(things):
16541654
"""
16551655

16561656

1657-
def _rec_get_names(args, names: list[str] | None = None) -> list[str]:
1658-
"""return a list of all argument names"""
1659-
if names is None:
1660-
names = []
1661-
for arg in args:
1662-
if isinstance(arg, node_classes.Tuple):
1663-
_rec_get_names(arg.elts, names)
1664-
else:
1665-
names.append(arg.name)
1666-
return names
1667-
1668-
16691657
def _is_metaclass(klass, seen=None, context: InferenceContext | None = None) -> bool:
16701658
"""Return if the given class can be
16711659
used as a metaclass.

tests/test_scoped_nodes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,10 @@ def test_argnames(self) -> None:
529529
astroid["f"].argnames(), ["a", "b", "args", "c", "d", "kwargs"]
530530
)
531531

532+
def test_argnames_lambda(self) -> None:
533+
lambda_node = extract_node("lambda a, b, c, *args, **kwargs: ...")
534+
self.assertEqual(lambda_node.argnames(), ["a", "b", "c", "args", "kwargs"])
535+
532536
def test_positional_only_argnames(self) -> None:
533537
code = "def f(a, b, /, c=None, *args, d, **kwargs): pass"
534538
astroid = builder.parse(code, __name__)

0 commit comments

Comments
 (0)