class RuboCop::Cop::Style::RedundantCondition
end
c
elsif cond
b
if b
# good
b || c
# good
end
c
else
b
if b
# bad
@example
a = b || c
# good
a = b ? b : c
# bad
@example
This cop checks for unnecessary conditional expressions.
def autocorrect(node)
def autocorrect(node) lambda do |corrector| if node.ternary? corrector.replace(range_of_offense(node), '||') elsif node.modifier_form? || !node.else_branch corrector.replace(node.source_range, node.if_branch.source) else corrected = make_ternary_form(node) corrector.replace(node.source_range, corrected) end end end
def else_source(else_branch)
def else_source(else_branch) wrap_else = else_branch.basic_conditional? && else_branch.modifier_form? wrap_else ? "(#{else_branch.source})" : else_branch.source end
def make_ternary_form(node)
def make_ternary_form(node) _condition, if_branch, else_branch = *node ternary_form = [if_branch.source, else_source(else_branch)].join(' || ') if node.parent&.send_type? "(#{ternary_form})" else ternary_form end end
def message(node)
def message(node) if node.modifier_form? || !node.else_branch REDUNDANT_CONDITION else MSG end end
def offense?(node)
def offense?(node) condition, if_branch, else_branch = *node return false if use_if_branch?(else_branch) condition == if_branch && !node.elsif? && ( node.ternary? || !else_branch.instance_of?(AST::Node) || else_branch.single_line? ) end
def on_if(node)
def on_if(node) return if node.elsif_conditional? return unless offense?(node) add_offense(node, location: range_of_offense(node)) end
def range_of_offense(node)
def range_of_offense(node) return :expression unless node.ternary? range_between(node.loc.question.begin_pos, node.loc.colon.end_pos) end
def use_if_branch?(else_branch)
def use_if_branch?(else_branch) else_branch&.if_type? end