MCPcopy Index your code
hub / github.com/datacamp/pythonwhat / parse_node

Method parse_node

pythonwhat/parsing.py:623–659  ·  view source on GitHub ↗
(cls, node)

Source from the content-addressed store, hash-verified

621
622 @classmethod
623 def parse_node(cls, node):
624 normal_args = cls.get_arg_tuples(node.args.args, node.args.defaults)
625 kwonlyargs = cls.get_arg_tuples(node.args.kwonlyargs, node.args.kw_defaults)
626 # TODO: all single args should be tuples like this
627 vararg = cls.get_arg(node.args.vararg)
628 kwarg = cls.get_arg(node.args.kwarg)
629 # create context variables
630 target_vars = [arg[0] for arg in normal_args]
631 if vararg:
632 target_vars.append(vararg)
633 if kwarg:
634 target_vars.append(kwarg)
635
636 args = cls.get_arg_parts(node.args.args, node.args.defaults, "arg")
637 kw_args = cls.get_arg_parts(
638 node.args.kwonlyargs, node.args.kw_defaults, "kwonly"
639 )
640 varargs = cls.get_arg_part(node.args.vararg, None, "vararg")
641 kwargs = cls.get_arg_part(node.args.kwarg, None, "kwarg")
642 all_args = [*args, varargs, *kw_args, kwargs]
643
644 if isinstance(node, ast.Lambda):
645 body_node = node.body
646 else:
647 bodyMod = wrap_in_module(node.body)
648 body_node = FunctionBodyTransformer().visit(bodyMod)
649
650 return {
651 "node": node,
652 "name": getattr(node, "name", None),
653 "args": IndexedDict([(p["name"], p) for p in all_args if p is not None]),
654 # TODO: arg is the node counterpart to target_vars
655 "_spec1_args": args,
656 "*args": varargs,
657 "**kwargs": kwargs,
658 "body": {"node": body_node, "target_vars": TargetVars(target_vars)},
659 }
660
661
662class LambdaFunctionParser(Parser):

Callers 2

visit_FunctionDefMethod · 0.95
visit_LambdaMethod · 0.80

Calls 8

wrap_in_moduleFunction · 0.90
IndexedDictClass · 0.85
TargetVarsClass · 0.85
get_arg_tuplesMethod · 0.80
get_argMethod · 0.80
get_arg_partsMethod · 0.80
get_arg_partMethod · 0.80

Tested by

no test coverage detected