def visit_Call()

in chalice/analyzer.py [0:0]


    def visit_Call(self, node):
        # type: (ast.Call) -> None
        self.generic_visit(node)
        # func -> Node that's being called
        # args -> Arguments being passed.
        inferred_func_type = self._get_inferred_type_for_node(node.func)
        if inferred_func_type == Boto3CreateClientType():
            # e_0 : B3CCT -> B3CT[S]
            # e_1 : S str which is a service name
            # e_0(e_1) : B3CT[e_1]
            if len(node.args) >= 1:
                service_arg = node.args[0]
                if isinstance(service_arg, ast.Str):
                    self._set_inferred_type_for_node(
                        node, Boto3ClientType(service_arg.s))
                elif isinstance(self._get_inferred_type_for_node(service_arg),
                                StringLiteral):
                    sub_type = self._get_inferred_type_for_node(service_arg)
                    inferred_type = Boto3ClientType(sub_type.value)
                    self._set_inferred_type_for_node(node, inferred_type)
        elif isinstance(inferred_func_type, Boto3ClientMethodType):
            self._set_inferred_type_for_node(
                node,
                Boto3ClientMethodCallType(
                    inferred_func_type.service_name,
                    inferred_func_type.method_name
                )
            )
        elif isinstance(inferred_func_type, FunctionType):
            self._set_inferred_type_for_node(
                node, inferred_func_type.return_type)
        elif isinstance(node.func, ast.Name) and \
                self._symbol_table.has_ast_node_for_symbol(node.func.id):
            if node not in self._visited:
                self._visited.add(node)
                self._infer_function_call(node)