lib/rubocop/ast/node/for_node.rb
# frozen_string_literal: true
module RuboCop
module AST
# A node extension for `for` nodes. This will be used in place of a plain
# node when the builder constructs the AST, making its methods available
# to all `for` nodes within RuboCop.
class ForNode < Node
# Returns the keyword of the `for` statement as a string.
#
# @return [String] the keyword of the `until` statement
def keyword
'for'
end
# Checks whether the `for` node has a `do` keyword.
#
# @return [Boolean] whether the `for` node has a `do` keyword
def do?
loc.begin&.is?('do')
end
# Checks whether this node body is a void context.
# Always `true` for `for`.
#
# @return [true] whether the `for` node body is a void context
def void_context?
true
end
# Returns the iteration variable of the `for` loop.
#
# @return [Node] The iteration variable of the `for` loop
def variable
node_parts[0]
end
# Returns the collection the `for` loop is iterating over.
#
# @return [Node] The collection the `for` loop is iterating over
def collection
node_parts[1]
end
# Returns the body of the `for` loop.
#
# @return [Node, nil] The body of the `for` loop.
def body
node_parts[2]
end
end
end
end