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(corrector, node)
def autocorrect(corrector, node) rescued = node.children.first range = node.loc.keyword.end.join(rescued.source_range.end) corrector.replace(range, correction(*rescued)) 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 { |exception| INVALID_TYPES.include?(exception.type) } end
def on_resbody(node)
def on_resbody(node) invalid_exceptions = invalid_exceptions(node.exceptions) return if invalid_exceptions.empty? add_offense( node.loc.keyword.join(node.children.first.source_range), message: format(MSG, invalid_exceptions: invalid_exceptions.map(&:source).join(', ')) ) do |corrector| autocorrect(corrector, node) end end
def valid_exceptions(exceptions)
def valid_exceptions(exceptions) exceptions - invalid_exceptions(exceptions) end