class RuboCop::Cop::Style::EachForSimpleLoop

Checks for loops which iterate a constant number of times, using a Range literal and ‘#each`. This can be done more readably using `Integer#times`.

This check only applies if the block takes no parameters.

@example

# bad
(1..5).each { }

# good
5.times { }

# bad
(0...10).each {}

# good
10.times {}

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/style/each_for_simple_loop.rb, line 29
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
  return unless offending?(node)

  send_node = node.send_node

  add_offense(send_node) do |corrector|
    range_type, min, max = each_range(node)

    max += 1 if range_type == :irange

    corrector.replace(send_node, "#{max - min}.times")
  end
end

Private Instance Methods

offending?(node) click to toggle source
# File lib/rubocop/cop/style/each_for_simple_loop.rb, line 45
def offending?(node)
  return false unless node.arguments.empty?

  each_range_with_zero_origin?(node) || each_range_without_block_argument?(node)
end