Module: RuboCop::AST::MethodDispatchNode

Extended by:
NodePattern::Macros
Includes:
MethodIdentifierPredicates
Included in:
SendNode, SuperNode, YieldNode
Defined in:
lib/rubocop/ast/node/mixin/method_dispatch_node.rb

Overview

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

Constant Summary

Constants included from MethodIdentifierPredicates

RuboCop::AST::MethodIdentifierPredicates::ENUMERATOR_METHODS

Instance Method Summary collapse

Methods included from NodePattern::Macros

def_node_matcher, def_node_search, node_search, node_search_all, node_search_body, node_search_first

Methods included from MethodIdentifierPredicates

#assignment_method?, #bang_method?, #camel_case_method?, #comparison_method?, #enumerator_method?, #method?, #operator_method?, #predicate_method?

Instance Method Details

#access_modifier?Boolean

Checks whether the dispatched method is an access modifier.



46
47
48
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 46

def access_modifier?
  bare_access_modifier? || non_bare_access_modifier?
end

#argumentsArray<Node>

An array containing the arguments of the dispatched method.



28
29
30
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 28

def arguments
  node_parts[2..-1]
end

#bare_access_modifier?Boolean

Checks whether the dispatched method is a bare access modifier that affects all methods defined after the macro.



55
56
57
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 55

def bare_access_modifier?
  macro? && bare_access_modifier_declaration?
end

#block_literal?Boolean

Whether this method dispatch has an explicit block.



131
132
133
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 131

def block_literal?
  parent && parent.block_type? && eql?(parent.send_node)
end

#block_nodeBlockNode?

The block node associated with this method dispatch, if any.



139
140
141
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 139

def block_node
  parent if block_literal?
end

#command?(name) ⇒ Boolean

Checks whether the name of the dispatched method matches the argument and has an implicit receiver.



73
74
75
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 73

def command?(name)
  !receiver && method?(name)
end

#const_receiver?Boolean

Checks whether the explicit receiver of this method dispatch is a const node.



116
117
118
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 116

def const_receiver?
  receiver && receiver.const_type?
end

#def_modifier?Boolean

Checks if this node is part of a chain of def modifiers.

Examples:


private def foo; end


150
151
152
153
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 150

def def_modifier?
  send_type? &&
    [self, *each_descendant(:send)].any?(&:adjacent_def_modifier?)
end

#dot?Boolean

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`.



91
92
93
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 91

def dot?
  loc.respond_to?(:dot) && loc.dot && loc.dot.is?('.')
end

#double_colon?Boolean

Checks whether the dispatched method uses a double colon to connect the receiver and the method name.



99
100
101
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 99

def double_colon?
  loc.respond_to?(:dot) && loc.dot && loc.dot.is?('::')
end

#implicit_call?Boolean

Checks whether the method dispatch is the implicit form of #call, e.g. ‘foo.(bar)`.



124
125
126
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 124

def implicit_call?
  method?(:call) && !loc.selector
end

#macro?Boolean

Note:

This does not include DSLs that use nested blocks, like RSpec

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.



39
40
41
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 39

def macro?
  !receiver && macro_scope?
end

#method_nameSymbol

The name of the dispatched method as a symbol.



21
22
23
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 21

def method_name
  node_parts[1]
end

#non_bare_access_modifier?Boolean

Checks whether the dispatched method is a non-bare access modifier that affects only the method it receives.



64
65
66
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 64

def non_bare_access_modifier?
  macro? && non_bare_access_modifier_declaration?
end

#receiverNode?

The receiving node of the method dispatch.



14
15
16
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 14

def receiver
  node_parts[0]
end

#self_receiver?Boolean

Checks whether the explicit receiver of this method dispatch is self.



107
108
109
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 107

def self_receiver?
  receiver && receiver.self_type?
end

#setter_method?Boolean

Checks whether the dispatched method is a setter method.



80
81
82
# File 'lib/rubocop/ast/node/mixin/method_dispatch_node.rb', line 80

def setter_method?
  loc.respond_to?(:operator) && loc.operator
end