class RuboCop::Cop::Style::RedundantException

Checks for RuntimeError as the argument of raise/fail.

@example

# bad
raise RuntimeError, 'message'
raise RuntimeError.new('message')

# good
raise 'message'

# bad - message is not a string
raise RuntimeError, Object.new
raise RuntimeError.new(Object.new)

# good
raise Object.new.to_s

Constants

MSG_1
MSG_2
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source

Switch ‘raise RuntimeError, ’message’‘ to `raise ’message’‘, and `raise RuntimeError.new(’message’)‘ to `raise ’message’‘.

# File lib/rubocop/cop/style/redundant_exception.rb, line 33
def on_send(node)
  fix_exploded(node) || fix_compact(node)
end

Private Instance Methods

fix_compact(node) click to toggle source
# File lib/rubocop/cop/style/redundant_exception.rb, line 57
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
fix_exploded(node) click to toggle source
# File lib/rubocop/cop/style/redundant_exception.rb, line 39
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
replaced_compact(message) click to toggle source
# File lib/rubocop/cop/style/redundant_exception.rb, line 65
def replaced_compact(message)
  if string_message?(message)
    message.source
  else
    "#{message.source}.to_s"
  end
end
replaced_exploded(node, command, message) click to toggle source
# File lib/rubocop/cop/style/redundant_exception.rb, line 47
def replaced_exploded(node, command, message)
  arg = string_message?(message) ? message.source : "#{message.source}.to_s"
  arg = node.parenthesized? ? "(#{arg})" : " #{arg}"
  "#{command}#{arg}"
end
string_message?(message) click to toggle source
# File lib/rubocop/cop/style/redundant_exception.rb, line 53
def string_message?(message)
  message.str_type? || message.dstr_type? || message.xstr_type?
end