Отключить жалобу 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