# 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 && 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 # Custom destructuring method. This can be used to normalize # destructuring for different variations of the node. # # @return [Array] the different parts of the `until` statement def node_parts to_a end end end end