class RuboCop::Cop::Style::RaiseArgs

This cop checks the args passed to `fail` and `raise`.

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/style/raise_args.rb, line 10
def on_send(node)
  return unless node.command?(:raise) || node.command?(:fail)

  case style
  when :compact
    check_compact(node)
  when :exploded
    check_exploded(node)
  end
end

Private Instance Methods

check_compact(node) click to toggle source
# File lib/rubocop/cop/style/raise_args.rb, line 23
def check_compact(node)
  _receiver, selector, *args = *node

  if args.size > 1
    add_offense(node, :expression, message(selector)) do
      opposite_style_detected
    end
  else
    correct_style_detected
  end
end
check_exploded(node) click to toggle source
# File lib/rubocop/cop/style/raise_args.rb, line 35
def check_exploded(node)
  _receiver, selector, *args = *node

  if args.size == 1
    arg, = *args

    if arg.type == :send && arg.loc.selector.is?('new')
      _receiver, _selector, *constructor_args = *arg

      # Allow code like `raise Ex.new(arg1, arg2)`.
      if constructor_args.size <= 1
        add_offense(node, :expression, message(selector)) do
          opposite_style_detected
        end
      end
    end
  else
    correct_style_detected
  end
end
message(method) click to toggle source
# File lib/rubocop/cop/style/raise_args.rb, line 56
def message(method)
  case style
  when :compact
    "Provide an exception object as an argument to `#{method}`."
  when :exploded
    'Provide an exception class and message as '              "arguments to `#{method}`."
  end
end