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)

`raise RuntimeError.new('message')` to `raise 'message'`.
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