class RuboCop::Cop::Performance::DoubleStartEndWith

str.end_with?(var1, var2)
var2 = …
var1 = …
str.start_with?(“a”, “b”, “c”)
str.start_with?(“a”, Some::CONST)
@good
str.end_with?(var1) || str.end_with?(var2)
var2 = …
var1 = …
str.start_with?(“a”, “b”) || str.start_with?(“c”)
str.start_with?(“a”) || str.start_with?(Some::CONST)
@bad
@example
with an single ‘#start_with?`/`#end_with?` call.
separated by `||`. In some cases such calls can be replaced
This cop checks for double `#start_with?` or `#end_with?` calls

def add_offense_for_double_call(node, receiver, method, combined_args)

def add_offense_for_double_call(node, receiver, method, combined_args)
  add_offense(node,
              :expression,
              format(
                MSG,
                receiver: receiver.source,
                method: method,
                combined_args: combined_args,
                original_code: node.source
              ))
end

def autocorrect(node)

def autocorrect(node)
  _receiver, _method,
  first_call_args, second_call_args = process_source(node)
  combined_args = combine_args(first_call_args, second_call_args)
  first_argument = first_call_args.first.loc.expression
  last_argument = second_call_args.last.loc.expression
  range = first_argument.join(last_argument)
  lambda do |corrector|
    corrector.replace(range, combined_args)
  end
end

def check_for_active_support_aliases?

def check_for_active_support_aliases?
  cop_config['IncludeActiveSupportAliases']
end

def combine_args(first_call_args, second_call_args)

def combine_args(first_call_args, second_call_args)
  (first_call_args + second_call_args).map(&:source).join(', ')
end

def on_or(node)

def on_or(node)
  receiver,
  method,
  first_call_args,
  second_call_args = process_source(node)
  return unless receiver && second_call_args.all?(&:pure?)
  combined_args = combine_args(first_call_args, second_call_args)
  add_offense_for_double_call(node, receiver, method, combined_args)
end

def process_source(node)

def process_source(node)
  if check_for_active_support_aliases?
    check_with_active_support_aliases(node)
  else
    two_start_end_with_calls(node)
  end
end