class RuboCop::Cop::Style::EvenOdd

Checks for places where ‘Integer#even?` or `Integer#odd?` can be used.

@example

# bad
if x % 2 == 0
end

# good
if x.even?
end

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 33
def on_send(node)
  even_odd_candidate?(node) do |base_number, method, arg|
    replacement_method = replacement_method(arg, method)
    add_offense(node, message: format(MSG, method: replacement_method)) do |corrector|
      correction = "#{base_number.source}.#{replacement_method}?"
      corrector.replace(node, correction)
    end
  end
end

Private Instance Methods

replacement_method(arg, method) click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 45
def replacement_method(arg, method)
  case arg
  when 0
    method == :== ? :even : :odd
  when 1
    method == :== ? :odd : :even
  end
end