class RuboCop::Cop::Style::TernaryCorrector

Corrector to correct conditional assignment in ternary conditions.

Public Class Methods

correct(corrector, node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 504
def correct(corrector, node)
  corrector.replace(node, correction(node))
end
move_assignment_inside_condition(corrector, node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 508
def move_assignment_inside_condition(corrector, node)
  *_var, rhs = *node
  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

correction(node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 522
def correction(node)
  "#{lhs(node.if_branch)}#{ternary(node)}"
end
element_assignment?(node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 535
def element_assignment?(node)
  node.send_type? && !node.method?(:[]=)
end
extract_branches(node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 539
def extract_branches(node)
  *_var, rhs = *node
  condition, = *rhs if rhs.begin_type? && rhs.children.one?
  _condition, if_branch, else_branch = *(condition || rhs)

  [if_branch, else_branch]
end
move_branch_inside_condition(corrector, branch, assignment) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 552
def move_branch_inside_condition(corrector, branch, assignment)
  corrector.insert_before(branch, assignment.source)
end
remove_parentheses(corrector, node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 547
def remove_parentheses(corrector, node)
  corrector.remove(node.loc.begin)
  corrector.remove(node.loc.end)
end
ternary(node) click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 526
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