1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
# 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
|