class RuboCop::Cop::VariableForce::Assignment
This class represents each assignment of a variable.
Constants
- MULTIPLE_LEFT_HAND_SIDE_TYPE
Attributes
node[R]
reassigned[R]
reassigned?[R]
referenced[R]
referenced?[R]
references[R]
variable[R]
Public Class Methods
new(node, variable)
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 17 def initialize(node, variable) unless VARIABLE_ASSIGNMENT_TYPES.include?(node.type) raise ArgumentError, "Node type must be any of #{VARIABLE_ASSIGNMENT_TYPES}, " \ "passed #{node.type}" end @node = node @variable = variable @referenced = false @references = [] @reassigned = false end
Public Instance Methods
exception_assignment?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 58 def exception_assignment? node.parent&.resbody_type? && node.parent.exception_variable == node end
for_assignment?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 80 def for_assignment? return false unless meta_assignment_node meta_assignment_node.for_type? end
meta_assignment_node()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 91 def meta_assignment_node unless instance_variable_defined?(:@meta_assignment_node) @meta_assignment_node = operator_assignment_node || multiple_assignment_node || rest_assignment_node || for_assignment_node end @meta_assignment_node end
multiple_assignment?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 68 def multiple_assignment? return false unless meta_assignment_node meta_assignment_node.type == MULTIPLE_ASSIGNMENT_TYPE end
name()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 31 def name @node.children.first end
operator()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 86 def operator assignment_node = meta_assignment_node || @node assignment_node.loc.operator.source end
operator_assignment?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 62 def operator_assignment? return false unless meta_assignment_node OPERATOR_ASSIGNMENT_TYPES.include?(meta_assignment_node.type) end
reassigned!()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 44 def reassigned! return if referenced? @reassigned = true end
reference!(node)
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 39 def reference!(node) @references << node @referenced = true end
regexp_named_capture?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 54 def regexp_named_capture? @node.type == REGEXP_NAMED_CAPTURE_TYPE end
rest_assignment?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 74 def rest_assignment? return false unless meta_assignment_node meta_assignment_node.type == REST_ASSIGNMENT_TYPE end
scope()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 35 def scope @variable.scope end
used?()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 50 def used? (!reassigned? && @variable.captured_by_block?) || @referenced end
Private Instance Methods
find_multiple_assignment_node(grandparent_node)
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 140 def find_multiple_assignment_node(grandparent_node) return unless grandparent_node.type == MULTIPLE_LEFT_HAND_SIDE_TYPE return if grandparent_node.children.any?(&:splat_type?) parent = grandparent_node.parent return parent if parent.type == MULTIPLE_ASSIGNMENT_TYPE find_multiple_assignment_node(parent) end
for_assignment_node()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 130 def for_assignment_node return unless (parent_node = node.parent) return parent_node if parent_node.for_type? grandparent_node = parent_node.parent return grandparent_node if parent_node.mlhs_type? && grandparent_node&.for_type? nil end
multiple_assignment_node()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 112 def multiple_assignment_node return nil unless node.parent&.mlhs_type? return nil unless (grandparent_node = node.parent&.parent) if (node = find_multiple_assignment_node(grandparent_node)) return node end return nil unless grandparent_node.type == MULTIPLE_ASSIGNMENT_TYPE grandparent_node end
operator_assignment_node()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 104 def operator_assignment_node return nil unless node.parent return nil unless OPERATOR_ASSIGNMENT_TYPES.include?(node.parent.type) return nil unless node.sibling_index.zero? node.parent end
rest_assignment_node()
click to toggle source
# File lib/rubocop/cop/variable_force/assignment.rb, line 123 def rest_assignment_node return nil unless node.parent return nil unless node.parent.type == REST_ASSIGNMENT_TYPE node.parent end