-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
def_node.rb
68 lines (60 loc) · 2.05 KB
/
def_node.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# frozen_string_literal: true
module RuboCop
module AST
# A node extension for `def` nodes. This will be used in place of a plain
# node when the builder constructs the AST, making its methods available
# to all `def` nodes within RuboCop.
class DefNode < Node
include ParameterizedNode
include MethodIdentifierPredicates
# Checks whether this node body is a void context.
#
# @return [Boolean] whether the `def` node body is a void context
def void_context?
method?(:initialize) || assignment_method?
end
# Checks whether this method definition node forwards its arguments
# as per the feature added in Ruby 2.7.
#
# @note This is written in a way that may support lead arguments
# which are rumored to be added in a later version of Ruby.
#
# @return [Boolean] whether the `def` node uses argument forwarding
def argument_forwarding?
arguments.any?(&:forward_args_type?) || arguments.any?(&:forward_arg_type?)
end
# The name of the defined method as a symbol.
#
# @return [Symbol] the name of the defined method
def method_name
children[-3]
end
# An array containing the arguments of the method definition.
#
# @return [Array<Node>] the arguments of the method definition
def arguments
children[-2]
end
# The body of the method definition.
#
# @note this can be either a `begin` node, if the method body contains
# multiple expressions, or any other node, if it contains a single
# expression.
#
# @return [Node] the body of the method definition
def body
children[-1]
end
# The receiver of the method definition, if any.
#
# @return [Node, nil] the receiver of the method definition, or `nil`.
def receiver
children[-4]
end
# @return [Boolean] if the definition is without an `end` or not.
def endless?
!loc.end
end
end
end
end