class RuboCop::Cop::Lint::DuplicateSetElement


[:foo, :bar].to_set
# good
[:foo, :bar, :foo].to_set
# bad
Set.new([:foo, :bar])
# good
Set.new([:foo, :bar, :foo])
# bad
Set[:foo, :bar]
# good
Set[:foo, :bar, :foo]
# bad
@example
Checks for duplicate literal, constant, or variable elements in Set.

def on_send(node)

def on_send(node)
  return unless (set_elements = set_init_elements(node))
  seen_elements = Set[]
  set_elements.each_with_index do |set_element, index|
    # NOTE: Skip due to the possibility of corner cases where Set elements
    # may have changing return values if they are not literals, constants, or variables.
    next if !set_element.literal? && !set_element.const_type? && !set_element.variable?
    if seen_elements.include?(set_element)
      register_offense(set_element, set_elements[index - 1])
    else
      seen_elements << set_element
    end
  end
end

def register_offense(current_element, prev_element)

def register_offense(current_element, prev_element)
  add_offense(current_element) do |corrector|
    range = prev_element.source_range.end.join(current_element.source_range.end)
    corrector.remove(range)
  end
end