Sha256: 2f888e74171271bf6ffc11c74793ad29e710657c0e011e1c8cf22f9c207a767f
Contents?: true
Size: 1.41 KB
Versions: 15
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Style # This cop checks for places where Integer#even? or Integer#odd? # should have been used. # # @example # # # bad # if x % 2 == 0 # # # good # if x.even? class EvenOdd < Cop MSG = 'Replace with `Integer#%s?`.'.freeze def_node_matcher :even_odd_candidate?, <<-PATTERN (send {(send $_ :% (int 2)) (begin (send $_ :% (int 2)))} ${:== :!=} (int ${0 1 2})) PATTERN def on_send(node) even_odd_candidate?(node) do |_base_number, method, arg| replacement_method = replacement_method(arg, method) add_offense(node, :expression, format(MSG, replacement_method)) end end def autocorrect(node) even_odd_candidate?(node) do |base_number, method, arg| replacement_method = replacement_method(arg, method) correction = "#{base_number.source}.#{replacement_method}?" ->(corrector) { corrector.replace(node.source_range, correction) } end end private def replacement_method(arg, method) case arg when 0 method == :== ? :even : :odd when 1 method == :== ? :odd : :even end end end end end end
Version data entries
15 entries across 15 versions & 2 rubygems