class RuboCop::Cop::Lint::DuplicateBranch


end
handle_error
rescue FooError, BarError
do_something
begin
# good
end
handle_error
rescue BarError
handle_error
rescue FooError
do_something
begin
# bad
end
do_something_else
else
do_foo
when foo, bar
case x
# good
end
do_something_else
else
do_foo
when bar
do_foo
when foo
case x
# bad
end
do_something_else
do_foo
if foo || bar
# good
end
do_something_else
do_foo
elsif bar
do_something_else
do_foo
if foo
# bad
@example
within ‘if/unless`, `case-when` and `rescue` constructs.
This cop checks that there are no repeated bodies

def offense_range(duplicate_branch)

def offense_range(duplicate_branch)
  parent = duplicate_branch.parent
  if parent.respond_to?(:else_branch) &&
     parent.else_branch.equal?(duplicate_branch)
    if parent.if_type? && parent.ternary?
      duplicate_branch.source_range
    else
      parent.loc.else
    end
  else
    parent.source_range
  end
end

def on_branching_statement(node)

def on_branching_statement(node)
  branches = node.branches.compact
  branches.each_with_object(Set.new) do |branch, previous|
    add_offense(offense_range(branch)) unless previous.add?(branch)
  end
end