class RuboCop::Cop::Performance::Squeeze


str.squeeze!(‘a’)
str.squeeze(‘a’)
# good
str.gsub!(/a+/, ‘a’)
str.gsub(/a+/, ‘a’)
# bad
@example
The ‘squeeze(’a’)‘ method is faster than `gsub(/a+/, ’a’)‘.
can be replaced by `squeeze(’a’)‘ and `squeeze!(’a’)‘.
Identifies places where `gsub(/a+/, ’a’)‘ and `gsub!(/a+/, ’a’)‘

def on_send(node)

rubocop:disable Metrics/AbcSize
def on_send(node)
  squeeze_candidate?(node) do |receiver, bad_method, regexp_str, replace_str|
    regexp_str = regexp_str[0..-2] # delete '+' from the end
    regexp_str = interpret_string_escapes(regexp_str)
    return unless replace_str == regexp_str
    good_method = PREFERRED_METHODS[bad_method]
    message = format(MSG, current: bad_method, prefer: good_method)
    add_offense(node.loc.selector, message: message) do |corrector|
      string_literal = to_string_literal(replace_str)
      new_code = "#{receiver.source}#{node.loc.dot.source}#{good_method}(#{string_literal})"
      corrector.replace(node, new_code)
    end
  end
end

def repeating_literal?(regex_str)

def repeating_literal?(regex_str)
  regex_str.match?(/\A(?:#{Util::LITERAL_REGEX})\+\z/o)
end