class RuboCop::Cop::Style::TernaryCorrector
Corrector to correct conditional assignment in ternary conditions.
def correct(corrector, node)
def correct(corrector, node) corrector.replace(node, correction(node)) end
def correction(node)
def correction(node) "#{lhs(node.if_branch)}#{ternary(node)}" end
def element_assignment?(node)
def element_assignment?(node) node.send_type? && node.method_name != :[]= end
def extract_branches(node)
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
def move_assignment_inside_condition(corrector, node)
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
def move_branch_inside_condition(corrector, branch, assignment)
def move_branch_inside_condition(corrector, branch, assignment) corrector.insert_before(branch, assignment.source) end
def remove_parentheses(corrector, node)
def remove_parentheses(corrector, node) corrector.remove(node.loc.begin) corrector.remove(node.loc.end) end
def ternary(node)
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