module RuboCop::AST::MethodDispatchNode

Common functionality for nodes that are a kind of method dispatch: `send`, `csend`, `super`, `zsuper`, `yield`

Public Instance Methods

access_modifier?() click to toggle source

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
arguments() click to toggle source

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
block_literal?() click to toggle source

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
block_node() click to toggle source

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
command?(name) click to toggle source

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
const_receiver?() click to toggle source

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
def_modifier?() click to toggle source

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
dot?() click to toggle source

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
double_colon?() click to toggle source

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
implicit_call?() click to toggle source

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
macro?() click to toggle source

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
method_name() click to toggle source

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
receiver() click to toggle source

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
self_receiver?() click to toggle source

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
setter_method?() click to toggle source

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

macro_kwbegin_wrapper?(parent) click to toggle source

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
root_node?(node) click to toggle source

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