class RuboCop::Cop::Style::MinMax

return foo.minmax
bar = foo.minmax
# good
return foo.min, foo.max
bar = [foo.min, foo.max]
# bad
@example
This cop checks for potential uses of ‘Enumerable#minmax`.

def argument_range(node)

def argument_range(node)
  first_argument_range = node.children.first.loc.expression
  last_argument_range  = node.children.last.loc.expression
  first_argument_range.join(last_argument_range)
end

def autocorrect(node)

def autocorrect(node)
  receiver = node.children.first.receiver
  lambda do |corrector|
    corrector.replace(offending_range(node),
                      "#{receiver.source}.minmax")
  end
end

def message(offender, receiver)

def message(offender, receiver)
  format(MSG, offender: offender.source,
              receiver: receiver.source)
end

def offending_range(node)

def offending_range(node)
  case node.type
  when :return
    argument_range(node)
  else
    node.loc.expression
  end
end

def on_array(node)

def on_array(node)
  min_max_candidate(node) do |receiver|
    offender = offending_range(node)
    add_offense(node, location: offender,
                      message: message(offender, receiver))
  end
end