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