class RubbyCop::Cop::Style::TernaryCorrector

Corrector to correct conditional assignment in ternary conditions.

Public Class Methods

correct(node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 492
def correct(node)
  lambda do |corrector|
    corrector.replace(node.source_range, correction(node))
  end
end
move_assignment_inside_condition(node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 498
def move_assignment_inside_condition(node)
  *_var, rhs = *node
  if_branch, else_branch = extract_branches(node)
  assignment = assignment(node)

  lambda do |corrector|
    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
end

Private Class Methods

correction(node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 514
def correction(node)
  condition, if_branch, else_branch = *node

  "#{lhs(if_branch)}#{ternary(condition, if_branch, else_branch)}"
end
element_assignment?(node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 529
def element_assignment?(node)
  node.send_type? && node.method_name != :[]=
end
extract_branches(node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 533
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/rubbycop/cop/style/conditional_assignment.rb, line 546
def move_branch_inside_condition(corrector, branch, assignment)
  corrector.insert_before(branch.loc.expression, assignment.source)
end
remove_parentheses(corrector, node) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 541
def remove_parentheses(corrector, node)
  corrector.remove(node.loc.begin)
  corrector.remove(node.loc.end)
end
ternary(condition, if_branch, else_branch) click to toggle source
# File lib/rubbycop/cop/style/conditional_assignment.rb, line 520
def ternary(condition, if_branch, else_branch)
  _variable, *_operator, if_rhs = *if_branch
  _else_variable, *_operator, else_rhs = *else_branch

  expr = "#{condition.source} ? #{if_rhs.source} : #{else_rhs.source}"

  element_assignment?(if_branch) ? "(#{expr})" : expr
end