class RuboCop::Cop::Style::SelfAssignment
Enforces the use the shorthand for self-assignment.
@example
# bad x = x + 1 # good x += 1
Constants
- MSG
- OPS
Public Class Methods
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 21 def self.autocorrect_incompatible_with [Layout::SpaceAroundOperators] end
Public Instance Methods
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 33 def on_cvasgn(node) check(node, :cvar) end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 29 def on_ivasgn(node) check(node, :ivar) end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 25 def on_lvasgn(node) check(node, :lvar) end
Private Instance Methods
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 88 def apply_autocorrect(corrector, node, rhs, operator, new_rhs) corrector.insert_before(node.loc.operator, operator) corrector.replace(rhs, new_rhs.source) end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 70 def autocorrect(corrector, node) rhs = node.expression if rhs.send_type? autocorrect_send_node(corrector, node, rhs) elsif rhs.operator_keyword? autocorrect_boolean_node(corrector, node, rhs) end end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 84 def autocorrect_boolean_node(corrector, node, rhs) apply_autocorrect(corrector, node, rhs, rhs.loc.operator.source, rhs.rhs) end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 80 def autocorrect_send_node(corrector, node, rhs) apply_autocorrect(corrector, node, rhs, rhs.method_name, rhs.first_argument) end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 39 def check(node, var_type) return unless (rhs = node.expression) if rhs.send_type? && rhs.arguments.one? check_send_node(node, rhs, node.name, var_type) elsif rhs.operator_keyword? check_boolean_node(node, rhs, node.name, var_type) end end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 60 def check_boolean_node(node, rhs, var_name, var_type) target_node = s(var_type, var_name) return unless rhs.lhs == target_node operator = rhs.loc.operator.source add_offense(node, message: format(MSG, method: operator)) do |corrector| autocorrect(corrector, node) end end
Source
# File lib/rubocop/cop/style/self_assignment.rb, line 49 def check_send_node(node, rhs, var_name, var_type) return unless OPS.include?(rhs.method_name) target_node = s(var_type, var_name) return unless rhs.receiver == target_node add_offense(node, message: format(MSG, method: rhs.method_name)) do |corrector| autocorrect(corrector, node) end end