class RuboCop::AST::BlockNode
A node extension for `block` nodes. This will be used in place of a plain node when the builder constructs the AST
, making its methods available to all `send` nodes within RuboCop
.
A `block` node is essentially a method send with a block. Parser nests the `send` node inside the `block` node.
Constants
- VOID_CONTEXT_METHODS
Public Instance Methods
Returns a collection of all descendants of this node that are argument type nodes. See `ArgsNode#argument_list` for details.
@return [Array<Node>]
# File lib/rubocop/ast/node/block_node.rb, line 42 def argument_list if numblock_type? numbered_arguments else arguments.argument_list end end
The arguments of this block. Note that if the block has destructured arguments, `arguments` will return a `mlhs` node, whereas `argument_list` will return only actual argument nodes.
@return [Array<Node>]
# File lib/rubocop/ast/node/block_node.rb, line 30 def arguments if numblock_type? [].freeze # Numbered parameters have no block arguments. else node_parts[1] end end
Checks whether this block takes any arguments.
@return [Boolean] whether this `block` node takes any arguments
# File lib/rubocop/ast/node/block_node.rb, line 67 def arguments? !arguments.empty? end
The body of this block.
@return [Node, nil] the body of the `block` node or `nil`
# File lib/rubocop/ast/node/block_node.rb, line 53 def body node_parts[2] end
Checks whether the `block` literal is delimited by curly braces.
@return [Boolean] whether the `block` literal is enclosed in braces
# File lib/rubocop/ast/node/block_node.rb, line 74 def braces? loc.end&.is?('}') end
The closing delimiter for this `block` literal.
@return [String] the closing delimiter for the `block` literal
# File lib/rubocop/ast/node/block_node.rb, line 102 def closing_delimiter delimiters.last end
The delimiters for this `block` literal.
@return [Array<String>] the delimiters for the `block` literal
# File lib/rubocop/ast/node/block_node.rb, line 88 def delimiters [loc.begin.source, loc.end.source].freeze end
Checks whether the `block` literal is delimited by `do`-`end` keywords.
@return [Boolean] whether the `block` literal is enclosed in `do`-`end`
# File lib/rubocop/ast/node/block_node.rb, line 81 def keywords? loc.end&.is?('end') end
Checks whether this `block` literal belongs to a lambda.
@return [Boolean] whether the `block` literal belongs to a lambda
# File lib/rubocop/ast/node/block_node.rb, line 125 def lambda? send_node.method?(:lambda) end
The name of the dispatched method as a symbol.
@return [Symbol] the name of the dispatched method
# File lib/rubocop/ast/node/block_node.rb, line 60 def method_name send_node.method_name end
Checks whether this is a multiline block. This is overridden here because the general version in `Node` does not work for `block` nodes.
@return [Boolean] whether the `block` literal is on a several lines
# File lib/rubocop/ast/node/block_node.rb, line 118 def multiline? !single_line? end
The opening delimiter for this `block` literal.
@return [String] the opening delimiter for the `block` literal
# File lib/rubocop/ast/node/block_node.rb, line 95 def opening_delimiter delimiters.first end
The `send` node associated with this block.
@return [SendNode] the `send` node associated with the `block` node
# File lib/rubocop/ast/node/block_node.rb, line 20 def send_node node_parts[0] end
Checks whether this is a single line block. This is overridden here because the general version in `Node` does not work for `block` nodes.
@return [Boolean] whether the `block` literal is on a single line
# File lib/rubocop/ast/node/block_node.rb, line 110 def single_line? loc.begin.line == loc.end.line end
Checks whether this node body is a void context.
@return [Boolean] whether the `block` node body is a void context
# File lib/rubocop/ast/node/block_node.rb, line 132 def void_context? VOID_CONTEXT_METHODS.include?(method_name) end
Private Instance Methods
Numbered arguments of this `numblock`.
# File lib/rubocop/ast/node/block_node.rb, line 139 def numbered_arguments return [].freeze unless numblock_type? max_param = children[1] 1.upto(max_param).map do |i| ArgNode.new(:arg, [:"_#{i}"]) end.freeze end