in bowler/imr.py [0:0]
def build(cls, leaf: Leaf, is_def: bool, **kwargs: Any) -> "FunctionArgument":
while leaf is not None and leaf.type not in ARG_END:
if leaf.type in (SYMBOL.star_expr, SYMBOL.argument):
return cls.build(leaf.children[0], is_def, prefix=leaf.prefix)
elif leaf.type in STARS:
kwargs["star"] = leaf.clone()
elif leaf.type == SYMBOL.tname:
kwargs["name"] = leaf.children[0].value
kwargs["annotation"] = leaf.children[-1].value
elif leaf.type == TOKEN.EQUAL:
pass
elif leaf.type == TOKEN.NAME:
if (is_def and "name" not in kwargs) or (
leaf.next_sibling and leaf.next_sibling.type == TOKEN.EQUAL
):
kwargs["name"] = leaf.value
else:
kwargs["value"] = leaf.clone()
else:
# assume everything else is a complex value
kwargs["value"] = leaf.clone()
kwargs.setdefault("prefix", leaf.prefix)
leaf = leaf.next_sibling
return FunctionArgument(**kwargs)