class RuboCop::Cop::Style::RedundantException
raise Object.new.to_s
# good
raise RuntimeError.new(Object.new)
raise RuntimeError, Object.new
# bad - message is not a string
raise ‘message’
# good
raise RuntimeError.new(‘message’)
raise RuntimeError, ‘message’
# bad
@example
Checks for ‘RuntimeError` as the argument of `raise`/`fail`.
def fix_compact(node)
def fix_compact(node) compact?(node) do |new_call, message| add_offense(node, message: MSG_2) do |corrector| corrector.replace(new_call, replaced_compact(message)) end end end
def fix_exploded(node)
def fix_exploded(node) exploded?(node) do |command, message| add_offense(node, message: MSG_1) do |corrector| corrector.replace(node, replaced_exploded(node, command, message)) end end end
def on_send(node)
Switch `raise RuntimeError, 'message'` to `raise 'message'`, and
def on_send(node) fix_exploded(node) || fix_compact(node) end
def replaced_compact(message)
def replaced_compact(message) if string_message?(message) message.source else "#{message.source}.to_s" end end
def replaced_exploded(node, command, message)
def replaced_exploded(node, command, message) arg = string_message?(message) ? message.source : "#{message.source}.to_s" arg = node.parenthesized? ? "(#{arg})" : " #{arg}" "#{command}#{arg}" end
def string_message?(message)
def string_message?(message) message.type?(:str, :dstr, :xstr) end