class RuboCop::Cop::Lint::RescueType

end
baz
rescue NameError
bar
def foo
# good
end
baz
rescue
bar
begin
# good
end
baz
rescue 1, ‘a’, “#{b}”, 0.0, [], {}
bar
def foo
# bad
end
baz
rescue nil
bar
begin
# bad
@example
if an exception is raised.
Check for arguments to ‘rescue` that will result in a `TypeError`

def autocorrect(node)

def autocorrect(node)
  rescued, _, _body = *node
  range = Parser::Source::Range.new(node.loc.expression.source_buffer,
                                    node.loc.keyword.end_pos,
                                    rescued.loc.expression.end_pos)
  lambda do |corrector|
    corrector.replace(range, correction(*rescued))
  end
end

def correction(*exceptions)

def correction(*exceptions)
  correction = valid_exceptions(exceptions).map(&:source).join(', ')
  correction = " #{correction}" unless correction.empty?
  correction
end

def invalid_exceptions(exceptions)

def invalid_exceptions(exceptions)
  exceptions.select do |exception|
    INVALID_TYPES.include?(exception.type)
  end
end

def on_resbody(node)

def on_resbody(node)
  rescued, _, _body = *node
  return if rescued.nil?
  exceptions = *rescued
  invalid_exceptions = invalid_exceptions(exceptions)
  return if invalid_exceptions.empty?
  add_offense(
    node,
    location: node.loc.keyword.join(rescued.loc.expression),
    message: format(
      MSG, invalid_exceptions: invalid_exceptions.map(&:source)
                                                 .join(', ')
    )
  )
end

def valid_exceptions(exceptions)

def valid_exceptions(exceptions)
  exceptions - invalid_exceptions(exceptions)
end