Make nesting of *args/**kwargs possible to understand.

This commit is contained in:
Dave Halter
2019-07-26 14:42:20 +02:00
parent ba160e72ab
commit 41dc5382fa
2 changed files with 12 additions and 3 deletions

View File

@@ -179,13 +179,16 @@ def _process_params(param_names, star_count=3): # default means both * and **
for p in param_names:
if star_count == 1 and p.maybe_positional_argument():
if p.get_kind() == Parameter.VAR_POSITIONAL:
for param_names in _iter_nodes_for_param(p, star_count=1):
for p in param_names:
yield p
break
else:
yield p
else:
yield ParamNameFixedKind(p, Parameter.POSITIONAL_ONLY)
elif star_count == 2 and p.maybe_keyword_argument():
if p.get_kind() == Parameter.VAR_KEYWORD:
yield p
continue
itered = list(_iter_nodes_for_param(p, star_count=2))
if not itered:
# We were not able to resolve kwargs.

View File

@@ -104,6 +104,11 @@ def test_tree_signature(Script, environment, code, expected):
('combined_lot_of_args(kw, simple4)', '*, b'),
('combined_lot_of_args(simple4, kw)', '*, b, c, **kwargs'),
('combined_redirect(combined_redirect(simple2, simple4), combined_redirect(kw, simple5))',
'x, /, *, y'),
('combined_redirect(combined_redirect(simple4, simple2), combined_redirect(simple5, kw))',
'a, b, x: int, /, *, a, b, c, **kwargs'),
]
)
def test_nested_signatures(Script, environment, combination, expected):
@@ -112,6 +117,7 @@ def test_nested_signatures(Script, environment, combination, expected):
def simple2(x): ...
def simple3(a, x: int): ...
def simple4(a, b, x: int): ...
def simple5(y): ...
def a(a, b, *args): ...
def kw(a, b, *, c, **kwargs): ...
def akw(a, b, *args, **kwargs): ...