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 exceptions = *rescued valid_exceptions = exceptions - invalid_exceptions(exceptions) correction = valid_exceptions.map(&:source).join(', ') correction = " #{correction}" unless correction.empty? range = Parser::Source::Range.new(node.loc.expression, node.loc.keyword.end_pos, rescued.loc.expression.end_pos) lambda do |corrector| corrector.replace(range, correction) end 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, node.loc.keyword.join(rescued.loc.expression), format(MSG, invalid_exceptions.map(&:source).join(', '))) end