class RuboCop::Cop::Style::TernaryCorrector
Corrector to correct conditional assignment in ternary conditions.
Public Class Methods
correct(node)
click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 496 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/rubocop/cop/style/conditional_assignment.rb, line 502 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/rubocop/cop/style/conditional_assignment.rb, line 518 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/rubocop/cop/style/conditional_assignment.rb, line 533 def element_assignment?(node) node.send_type? && node.method_name != :[]= end
extract_branches(node)
click to toggle source
# File lib/rubocop/cop/style/conditional_assignment.rb, line 537 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 550 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/rubocop/cop/style/conditional_assignment.rb, line 545 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/rubocop/cop/style/conditional_assignment.rb, line 524 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