class RuboCop::Cop::Style::FormatString

argument is an array literal.
if the first argument is a string literal and if the second
manner for all cases, so only two scenarios are considered -
The detection of String#% cannot be implemented in a reliable
Valid options include Kernel#format, Kernel#sprintf and String#%.
This cop enforces the use of a single string formatting utility.

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    _receiver, detected_method = *node
    case detected_method
    when :%
      autocorrect_from_percent(corrector, node)
    when :format, :sprintf
      case style
      when :percent
        autocorrect_to_percent(corrector, node)
      when :format, :sprintf
        corrector.replace(node.loc.selector, style.to_s)
      end
    end
  end
end

def autocorrect_from_percent(corrector, node)

def autocorrect_from_percent(corrector, node)
  receiver, _method, args = *node
  format = receiver.source
  args = if args.array_type? || args.hash_type?
           args.children.map(&:source).join(', ')
         else
           args.source
         end
  corrected = "#{style}(#{format}, #{args})"
  corrector.replace(node.loc.expression, corrected)
end

def autocorrect_to_percent(corrector, node)

def autocorrect_to_percent(corrector, node)
  _nil, _method, format, *args = *node
  format = format.source
  args   = if args.one?
             arg = args.first
             if arg.hash_type?
               "{ #{arg.source} }"
             else
               arg.source
             end
           else
             "[#{args.map(&:source).join(', ')}]"
           end
  corrected = "#{format} % #{args}"
  corrector.replace(node.loc.expression, corrected)
end

def message(detected_style)

def message(detected_style)
  format(MSG, method_name(style), method_name(detected_style))
end

def method_name(style_name)

def method_name(style_name)
  style_name == :percent ? 'String#%' : style_name
end

def on_send(node)

def on_send(node)
  formatter(node) do |selector|
    detected_style = selector == :% ? :percent : selector
    return if detected_style == style
    add_offense(node, :selector, message(detected_style))
  end
end