

def _handle_function_node(self, func_node):
    func_name_node = param_node['left']
    traverse(func_name_node, on_enter=self._find_variable_like_nodes)
    self._scope_tree_builder.enter_new_scope(ScopeVisibility.FUNCTION_LOCAL)
    has_variadic = False
    param_nodes = func_node['rlist']
    for param_node in param_nodes:
        if (param_node['value'] == '...'):
            has_variadic = True
        else:
            self._scope_tree_builder.handle_new_parameter_found(param_node)
    self._scope_tree_builder.handle_new_parameters_list_and_length_found()
    if has_variadic:
        self._scope_tree_builder.handle_new_index_parameters_found((len(param_nodes) - 1))
    attr = func_node['attr']
    is_declared_with_range = (attr['range'] is not 0)
    if is_declared_with_range:
        self._scope_tree_builder.handle_new_range_parameters_found()
    is_declared_with_dict = ((attr['dict'] is not 0) or (NodeType(func_name_node['type']) in FunctionNameNodesDeclaringVariableSelf))
    if is_declared_with_dict:
        self._scope_tree_builder.handle_new_dict_parameter_found()
    func_body_nodes = func_node['body']
    for func_body_node in func_body_nodes:
        traverse(func_body_node, on_enter=self._enter_handler, on_leave=self._leave_handler)
    return SKIP_CHILDREN

dataset/ETHPy150Open Kuniwak/vint/vint/ast/plugin/scope_plugin/scope_linker.py ScopeLinker._handle_function_node/VarMisuse@14/24 `func_node`->`param_node`