Skip to content

Commit 552f1c1

Browse files
Improve order of keyword-only args in argnames() (#1387)
1 parent 1cf4bf7 commit 552f1c1

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

astroid/nodes/scoped_nodes/scoped_nodes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,7 +1369,7 @@ def callable(self):
13691369
def argnames(self) -> List[str]:
13701370
"""Get the names of each of the arguments, including that
13711371
of the collections of variable-length arguments ("args", "kwargs",
1372-
etc.), as well as keyword-only arguments.
1372+
etc.), as well as positional-only and keyword-only arguments.
13731373
13741374
:returns: The names of the arguments.
13751375
:rtype: list(str)
@@ -1378,9 +1378,9 @@ def argnames(self) -> List[str]:
13781378
names = _rec_get_names(self.args.arguments)
13791379
else:
13801380
names = []
1381-
names += [elt.name for elt in self.args.kwonlyargs]
13821381
if self.args.vararg:
13831382
names.append(self.args.vararg)
1383+
names += [elt.name for elt in self.args.kwonlyargs]
13841384
if self.args.kwarg:
13851385
names.append(self.args.kwarg)
13861386
return names

tests/unittest_scoped_nodes.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,9 +473,19 @@ def test_argnames(self) -> None:
473473
astroid = builder.parse(code, __name__)
474474
self.assertEqual(astroid["f"].argnames(), ["a", "b", "c", "args", "kwargs"])
475475

476-
code_with_kwonly_args = "def f(a, b, *, c=None, d=None): pass"
476+
code_with_kwonly_args = "def f(a, b, *args, c=None, d=None, **kwargs): pass"
477477
astroid = builder.parse(code_with_kwonly_args, __name__)
478-
self.assertEqual(astroid["f"].argnames(), ["a", "b", "c", "d"])
478+
self.assertEqual(
479+
astroid["f"].argnames(), ["a", "b", "args", "c", "d", "kwargs"]
480+
)
481+
482+
@unittest.skipUnless(PY38_PLUS, "positional-only argument syntax")
483+
def test_positional_only_argnames(self) -> None:
484+
code = "def f(a, b, /, c=None, *args, d, **kwargs): pass"
485+
astroid = builder.parse(code, __name__)
486+
self.assertEqual(
487+
astroid["f"].argnames(), ["a", "b", "c", "args", "d", "kwargs"]
488+
)
479489

480490
def test_return_nothing(self) -> None:
481491
"""test inferred value on a function with empty return"""

0 commit comments

Comments
 (0)