module RuboCop::AST::MethodDispatchNode
Common functionality for nodes that are a kind of method dispatch: `send`, `csend`, `super`, `zsuper`, `yield`
Public Instance Methods
Checks whether the dispatched method is a bare access modifier affects all methods defined after the macro.
@return [Boolean] whether the dispatched method is access modifier
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 46 def access_modifier? macro? && bare_access_modifier? end
An array containing the arguments of the dispatched method.
@return [Array<Node>] the arguments of the dispatched method
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 27 def arguments node_parts[2..-1] end
Whether this method dispatch has an explicit block.
@return [Boolean] whether the dispatched method has a block
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 113 def block_literal? parent && parent.block_type? && eql?(parent.send_node) end
The `block` node associated with this method dispatch, if any.
@return [BlockNode, nil] the `block` node associated with this method
call or `nil`
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 121 def block_node parent if block_literal? end
Checks whether the name of the dispatched method matches the argument and has an implicit receiver.
@param [Symbol, String] name the method name to check for @return [Boolean] whether the method name matches the argument
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 55 def command?(name) !receiver && method?(name) end
Checks whether the explicit receiver of this method dispatch is a `const` node.
@return [Boolean] whether the receiver of this method dispatch
is a `const` node
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 98 def const_receiver? receiver && receiver.const_type? end
Checks if this node is part of a chain of `def` modifiers.
@example
private def foo; end
@return [Boolean] whether the dispatched method is a `def` modifier
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 132 def def_modifier? send_type? && [self, *each_descendant(:send)].any?(&:adjacent_def_modifier?) end
Checks whether the dispatched method uses a dot to connect the receiver and the method name.
This is useful for comparison operators, which can be called either with or without a dot, i.e. `foo == bar` or `foo.== bar`.
@return [Boolean] whether the method was called with a connecting dot
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 73 def dot? loc.respond_to?(:dot) && loc.dot && loc.dot.is?('.') end
Checks whether the dispatched method uses a double colon to connect the receiver and the method name.
@return [Boolean] whether the method was called with a connecting dot
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 81 def double_colon? loc.respond_to?(:dot) && loc.dot && loc.dot.is?('::') end
Checks whether the method dispatch is the implicit form of `#call`, e.g. `foo.(bar)`.
@return [Boolean] whether the method is the implicit form of `#call`
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 106 def implicit_call? method?(:call) && !loc.selector end
Checks whether the dispatched method is a macro method. A macro method is defined as a method that sits in a class, module, or block body and has an implicit receiver.
@note This does not include DSLs that use nested blocks, like RSpec
@return [Boolean] whether the dispatched method is a macro method
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 38 def macro? !receiver && macro_scope? end
The name of the dispatched method as a symbol.
@return [Symbol] the name of the dispatched method
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 20 def method_name node_parts[1] end
The receiving node of the method dispatch.
@return [Node, nil] the receiver of the dispatched method or `nil`
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 13 def receiver node_parts[0] end
Checks whether the explicit receiver of this method dispatch is `self`.
@return [Boolean] whether the receiver of this method dispatch is `self`
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 89 def self_receiver? receiver && receiver.self_type? end
Checks whether the dispatched method is a setter method.
@return [Boolean] whether the dispatched method is a setter
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 62 def setter_method? loc.respond_to?(:operator) && loc.operator end
Private Instance Methods
Check if a node's parent is a kwbegin wrapper within a macro scope
@param parent [Node] parent of the node being checked
@return [Boolean] true if the parent is a kwbegin in a macro scope
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 151 def macro_kwbegin_wrapper?(parent) parent.kwbegin_type? && macro_scope?(parent) end
Check if a node does not have a parent
@param node [Node]
@return [Boolean] if the parent is nil
# File lib/rubocop/ast/node/mixin/method_dispatch_node.rb, line 160 def root_node?(node) node.parent.nil? end