class RuboCop::Cop::Style::For
Looks for uses of the ‘for` keyword or `each` method. The preferred alternative is set in the EnforcedStyle configuration parameter. An `each` call with a block on a single line is always allowed.
@example EnforcedStyle: each (default)
# bad def foo for n in [1, 2, 3] do puts n end end # good def foo [1, 2, 3].each do |n| puts n end end
@example EnforcedStyle: for
# bad def foo [1, 2, 3].each do |n| puts n end end # good def foo for n in [1, 2, 3] do puts n end end
@safety
This cop's autocorrection is unsafe because the scope of variables is different between `each` and `for`.
Constants
- EACH_LENGTH
- PREFER_EACH
- PREFER_FOR
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/style/for.rb, line 65 def on_block(node) return unless suspect_enumerable?(node) if style == :for add_offense(node, message: PREFER_FOR) do |corrector| EachToForCorrector.new(node).call(corrector) opposite_style_detected end else correct_style_detected end end
Also aliased as: on_numblock
on_for(node)
click to toggle source
# File lib/rubocop/cop/style/for.rb, line 54 def on_for(node) if style == :each add_offense(node, message: PREFER_EACH) do |corrector| ForToEachCorrector.new(node).call(corrector) opposite_style_detected end else correct_style_detected end end
Private Instance Methods
suspect_enumerable?(node)
click to toggle source
# File lib/rubocop/cop/style/for.rb, line 82 def suspect_enumerable?(node) node.multiline? && node.send_node.method?(:each) && !node.send_node.arguments? end