class RuboCop::Cop::Style::TernaryCorrector
Corrector
to correct conditional assignment in ternary conditions.
Public Class Methods
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 516 def correct(corrector, node) corrector.replace(node, correction(node)) end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 520 def move_assignment_inside_condition(corrector, node) rhs = node.send_type? ? node.last_argument : node.expression if_branch, else_branch = extract_branches(node) assignment = assignment(node) remove_parentheses(corrector, rhs) if Util.parentheses?(rhs) corrector.remove(assignment) move_branch_inside_condition(corrector, if_branch, assignment) move_branch_inside_condition(corrector, else_branch, assignment) end
Private Class Methods
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 534 def correction(node) "#{lhs(node.if_branch)}#{ternary(node)}" end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 547 def element_assignment?(node) node.send_type? && !node.method?(:[]=) end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 551 def extract_branches(node) rhs = node.send_type? ? node.last_argument : node.expression condition = rhs.children.first if rhs.begin_type? && rhs.children.one? _condition, if_branch, else_branch = *(condition || rhs) [if_branch, else_branch] end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 564 def move_branch_inside_condition(corrector, branch, assignment) corrector.insert_before(branch, assignment.source) end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 559 def remove_parentheses(corrector, node) corrector.remove(node.loc.begin) corrector.remove(node.loc.end) end
Source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 538 def ternary(node) _variable, *_operator, if_rhs = *node.if_branch _else_variable, *_operator, else_rhs = *node.else_branch expr = "#{node.condition.source} ? #{if_rhs.source} : #{else_rhs.source}" element_assignment?(node.if_branch) ? "(#{expr})" : expr end