class RuboCop::Cop::Performance::DeletePrefix


str.sub!(/^prefix/, ”)
str.sub(/^prefix/, ”)
str.gsub!(/^prefix/, ”)
str.gsub(/^prefix/, ”)
# bad
@example SafeMultiline: false
str.sub!(/^prefix/, ”)
str.sub(/^prefix/, ”)
str.gsub!(/^prefix/, ”)
str.gsub(/^prefix/, ”)
# good
@example SafeMultiline: true (default)
str.delete_prefix!(‘prefix’)
str.delete_prefix(‘prefix’)
# good
str.sub!(/Aprefix/, ”)
str.sub(/Aprefix/, ”)
str.gsub!(/Aprefix/, ”)
str.gsub(/Aprefix/, ”)
# bad
@example
The ‘delete_prefix(’prefix’)‘ method is faster than `gsub(/Aprefix/, ”)`.
for receiver is multiline string.
`^prefix` is unsafe as it will behave incompatible with `delete_prefix`
This cop has `SafeMultiline` configuration option that `true` by default because
can be replaced by `delete_prefix(’prefix’)‘.
This cop identifies places where `gsub(/Aprefix/, ”)` and `sub(/Aprefix/, ”)`
In Ruby 2.5, `String#delete_prefix` has been added.

def autocorrect(node)

def autocorrect(node)
  delete_prefix_candidate?(node) do |receiver, bad_method, regexp_str, _|
    lambda do |corrector|
      good_method = PREFERRED_METHODS[bad_method]
      regexp_str = drop_start_metacharacter(regexp_str)
      regexp_str = interpret_string_escapes(regexp_str)
      string_literal = to_string_literal(regexp_str)
      new_code = "#{receiver.source}.#{good_method}(#{string_literal})"
      # TODO: `source_range` is no longer required when RuboCop 0.81 or lower support will be dropped.
      # https://github.com/rubocop-hq/rubocop/commit/82eb350d2cba16
      corrector.replace(node.source_range, new_code)
    end
  end
end

def on_send(node)

def on_send(node)
  delete_prefix_candidate?(node) do |_, bad_method, _, replace_string|
    return unless replace_string.blank?
    good_method = PREFERRED_METHODS[bad_method]
    message = format(MSG, current: bad_method, prefer: good_method)
    add_offense(node, location: :selector, message: message)
  end
end