Отключить жалобу Rubocop о методе

У меня есть метод, который идет так return if amount == 0 а rubocop жалуется что должно быть как return if amount.zero?, Как я могу пропустить этот метод? Вот мой.rubocop.yml:

rubocop

StringLiterals:
  EnforcedStyle: double_quotes
  Enabled: true

Style/FrozenStringLiteralComment:
  Enabled: false

Style/TrailingCommaInLiteral:
  Enabled: false

Style/TrailingCommaInArguments:
  Enabled: false

Style/CaseEquality:
  Enabled: false

Documentation:
  Description: "Document classes and non-namespace modules."
  Enabled: false

Metrics/MethodLength:
  CountComments: false
  Max: 15

Rails/Delegate:
  Enabled: false

AllCops:
  Exclude:
    - db/**/*
    - config/**/*
    - script/**/*
    - vendor/**/*
    - bin/**/*
    - Rakefile
    - spec/spec_helper.rb
    - spec/rails_helper.rb
    - spec/teaspoon_env.rb

  TargetRubyVersion: 2.3

Rails:
  Enabled: true

submit_ticket_payment.rb

def call
  return if amount == 0
  Stripe::Charge.create(
    amount: amount,
    currency: "usd",
    description: event_name,
    receipt_email: context.rsvp.email,
    source: context.token,
    statement_descriptor: event_name
  )
rescue Stripe::StripeError
  context.fail!
end

Так в принципе, как я могу не заботиться об этом конкретном случае?

3 ответа

Решение

Рассматриваемая проверка осуществляется Style/NumericPredicate коп.

Если вы, как правило, хотите, чтобы он был включен, но не жаловались на отдельные случаи, вы можете временно отключить его с помощью специального комментария:

# rubocop:disable Style/NumericPredicate
return if amount == 0
# rubocop:enable Style/NumericPredicate

Обратите внимание, что его нужно включить снова; в противном случае он пропустит проверку на весь оставшийся файл.

Если вы хотите пропустить правило только для этого конкретного метода, то:

# rubocop:disable Style/NumericPredicate
def call
  return if amount == 0
  # ...
end
# rubocop:enable Style/NumericPredicate

Что ж, вы можете либо проигнорировать это правило, либо попытаться реорганизовать код, чтобы вызвать жалобу, что обычно является лучшей практикой.

Для первого варианта игнорирования правила, кроме уже упомянутых случаев, есть еще:

Встроенный игнор со специальным комментарием:

      def call
  return if amount == 0 # rubocop:disable Style/NumericPredicate
  # ...
end

И игнорируйте файл конфигурации, что обычно является лучшим вариантом, таким образом у вас будет вся конфигурация стилей в одном месте. Вы можете использовать либо.rubocop.ymlили.rubocop_todo.yml, цель последнего — перечислить все нарушения, но поработать над рефакторингом, чтобы удалить их одно за другим. Файл todo можно создать с помощью команды CLI.rubocop --auto-gen-config.

      Style/NumericPredicate:
  Exclude:
    - 'path/to/file.rb'

Теперь о рефакторинге. Я понимаю, что вопрос не в этом, но считаю, что об этом всегда полезно упомянуть. Мы все знаем, что происходит, когда мы выбираем легкий путь игнорирования правил! :)

В этом случае предположим, что вы можете попасть вamountпеременная либо0илиnil, чтобы условие выполнялось. Проблема в том, что если вы позвонитеnil.zero?, это подниметNoMethodError: undefined method нуль?' для nil:NilClass` здесь вы можете использовать оператор безопасной навигации :

&.

поэтому ваш код может выглядеть примерно так.

      def call
  return if amount&.zero? || amount.nil?
  # ...
end
Другие вопросы по тегам