class Steep::TypeInference::SendArgs::PositionalArgs

def next()

def next()
  case
  when node && node.type == :forwarded_args
    # If the node is a `:forwarded_args`, abort
    nil
  when !node && param.is_a?(Interface::Function::Params::PositionalParams::Required)
    [
      MissingArg.new(params: positional_params),
      update(index: index, positional_params: nil)
    ]
  when !node && param.is_a?(Interface::Function::Params::PositionalParams::Optional)
    nil
  when !node && param.is_a?(Interface::Function::Params::PositionalParams::Rest)
    nil
  when !node && !param
    nil
  when node && node.type != :splat && param.is_a?(Interface::Function::Params::PositionalParams::Required)
    [
      NodeParamPair.new(node: node, param: param),
      update(index: index+1, positional_params: positional_params&.tail)
    ]
  when node && node.type != :splat && param.is_a?(Interface::Function::Params::PositionalParams::Optional)
    [
      NodeParamPair.new(node: node, param: param),
      update(index: index+1, positional_params: positional_params&.tail)
    ]
  when node && node.type != :splat && param.is_a?(Interface::Function::Params::PositionalParams::Rest)
    [
      NodeParamPair.new(node: node, param: param),
      update(index: index+1)
    ]
  when node && node.type != :splat && !param
    [
      UnexpectedArg.new(node: node),
      update(index: index + 1)
    ]
  when node && node.type == :splat
    [
      SplatArg.new(node: node),
      self
    ]
  end
end