class RuboCop::Cop::Performance::BigDecimalWithNumericArgument

def on_send(node)

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
def on_send(node)
  if (numeric = big_decimal_with_numeric_argument(node))
    if numeric.numeric_type?
      add_offense(numeric, message: MSG_FROM_FLOAT_TO_STRING) do |corrector|
        corrector.wrap(numeric, "'", "'")
      end
    elsif numeric.value.match?(/\A\d+\z/)
      add_offense(numeric, message: MSG_FROM_INTEGER_TO_STRING) do |corrector|
        corrector.replace(numeric, numeric.value)
      end
    end
  elsif (numeric_to_d = to_d(node))
    if numeric_to_d.numeric_type?
      add_offense(numeric_to_d, message: MSG_FROM_FLOAT_TO_STRING) do |corrector|
        big_decimal_args = node.arguments.map(&:source).unshift("'#{numeric_to_d.source}'").join(', ')
        corrector.replace(node, "BigDecimal(#{big_decimal_args})")
      end
    elsif numeric_to_d.value.match?(/\A\d+\z/)
      add_offense(numeric_to_d, message: MSG_FROM_INTEGER_TO_STRING) do |corrector|
        corrector.replace(node, "#{numeric_to_d.value}.to_d")
      end
    end
  end
end