class RuboCop::Cop::Style::TernaryCorrector
Corrector to correct conditional assignment in ternary conditions.
def correct(node)
def correct(node) lambda do |corrector| corrector.replace(node.source_range, correction(node)) end end
def correction(node)
def correction(node) condition, if_branch, else_branch = *node "#{lhs(if_branch)}#{ternary(condition, if_branch, else_branch)}" 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(node)
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
def move_branch_inside_condition(corrector, branch, assignment)
def move_branch_inside_condition(corrector, branch, assignment) corrector.insert_before(branch.loc.expression, 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(condition, if_branch, else_branch)
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