Class: RuboCop::Cop::Style::ParallelAssignment::AssignmentSorter
- Inherits:
-
Object
- Object
- RuboCop::Cop::Style::ParallelAssignment::AssignmentSorter
show all
- Extended by:
- NodePattern::Macros
- Includes:
- TSort
- Defined in:
- lib/rubocop/cop/style/parallel_assignment.rb
Overview
Helper class necessitated by silly design of TSort prior to Ruby 2.1 Newer versions have a better API, but that doesn’t help us
Instance Method Summary
collapse
def_node_matcher, def_node_search, node_search, node_search_all, node_search_body, node_search_first
Constructor Details
130
131
132
|
# File 'lib/rubocop/cop/style/parallel_assignment.rb', line 130
def initialize(assignments)
@assignments = assignments
end
|
Instance Method Details
#accesses?(rhs, lhs) ⇒ Boolean
lhs is an assignment method call like obj.attr= or ary[idx]=. Does rhs access the same value which is assigned by lhs?
159
160
161
162
163
164
165
166
167
168
|
# File 'lib/rubocop/cop/style/parallel_assignment.rb', line 159
def accesses?(rhs, lhs)
if lhs.method?(:[]=)
matching_calls(rhs, lhs.receiver, :[]).any? do |args|
args == lhs.arguments
end
else
access_method = lhs.method_name.to_s.chop.to_sym
matching_calls(rhs, lhs.receiver, access_method).any?
end
end
|
#dependency?(lhs, rhs) ⇒ Boolean
152
153
154
155
|
# File 'lib/rubocop/cop/style/parallel_assignment.rb', line 152
def dependency?(lhs, rhs)
uses_var?(rhs, var_name(lhs)) ||
lhs.send_type? && lhs.assignment_method? && accesses?(rhs, lhs)
end
|
#tsort_each_child(assignment) ⇒ Object
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/rubocop/cop/style/parallel_assignment.rb', line 138
def tsort_each_child(assignment)
my_lhs, _my_rhs = *assignment
@assignments.each do |other|
_other_lhs, other_rhs = *other
next unless dependency?(my_lhs, other_rhs)
yield other
end
end
|
#tsort_each_node ⇒ Object
134
135
136
|
# File 'lib/rubocop/cop/style/parallel_assignment.rb', line 134
def tsort_each_node
@assignments.each { |a| yield a }
end
|