class RuboCop::Cop::Style::EvenOdd
This cop checks for places where Fixnum#even? or Fixnum#odd? should have been used.
@example
# bad if x % 2 == 0 # good if x.even?
Constants
- MSG
- ONE
- TWO
- ZERO
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 28 def autocorrect(node) correction = "#{base_number(node)}.#{offense_type(node)}?" ->(corrector) { corrector.replace(node.source_range, correction) } end
on_send(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 23 def on_send(node) offense = offense_type(node) add_offense(node, :expression, format(MSG, offense)) if offense end
Private Instance Methods
base_number(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 35 def base_number(node) receiver, = *node node = expression(receiver) node.children[0].source end
div_by_2?(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 54 def div_by_2?(node) node = expression(node) _receiver, method, args = *node method == :% && args == TWO end
expression(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 62 def expression(node) return unless node # check for scenarios like (x % 2) == 0 if node.type == :begin && node.children.size == 1 node = node.children.first end return unless node.type == :send node end
offense_type(node)
click to toggle source
# File lib/rubocop/cop/style/even_odd.rb, line 41 def offense_type(node) receiver, method, args = *node return unless [:==, :!=].include?(method) return unless div_by_2?(receiver) if args == ZERO method == :== ? :even : :odd elsif args == ONE method == :== ? :odd : :even end end