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
The arguments of this block.
@return [Array<Node>]
# File lib/rubocop/ast/node/block_node.rb, line 24 def arguments node_parts[1] 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 38 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 31 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 45 def braces? loc.end && 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 73 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 59 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 52 def keywords? loc.end && 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 96 def lambda? send_node.method?(:lambda) 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 89 def multiline? !single_line? end
Custom destructuring method. This can be used to normalize destructuring for different variations of the node.
@return [Array] the different parts of the `block` node
# File lib/rubocop/ast/node/block_node.rb, line 111 def node_parts to_a 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 66 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 17 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 81 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 103 def void_context? VOID_CONTEXT_METHODS.include?(send_node.method_name) end