Рубокоп: Возможно ли добавить исключения в полицейского Metrics / AbcSize? - PullRequest
2 голосов
/ 24 января 2020

Давайте рассмотрим следующий класс:

class App
  def call
    # ...
  end

  private

  def foo
    # ...
  end

  def bar
    # ... 
  end
end

Можно ли настроить rubocop на «жалобу» на Metrics/AbcSize для всех методов, когда Assignment Branch Condition size больше 15, за исключением call методов?

Для call методов «жаловаться» следует только в том случае, если Assignment Branch Condition size выше 30.

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 27 марта 2020

С увеличением использования функциональных объектов я вижу, что этот запрос появляется все больше и больше, и поэтому я пошел и реализовал опцию конфигурации IgnoredMethods для трех сложных полицейских метода:

  • Metrics/AbcSize
  • Metrics/CyclomaticComplexity
  • Metrics/PerceivedComplexity

запрос на получение уже объединен, поэтому с выпуском следующей версии RuboCop (вероятно, 0,81,0), вы сможете сделать это:

# rubocop.yml

Metrics/AbcSize:
  IgnoredMethods:
    - 'call'

Обратите внимание, что это отключит коп для всех методов #call, включая методы класса, по всей базе кода .

Я знаю, что это немного отличается от того, что вы искали, но для большинства намерений и целей отключение копа равнозначно установке максимума на 30.; -)

1 голос
/ 25 января 2020

Энди Уэйт прав, что он не запечен по умолчанию, но вы можете создать своего собственного полицейского для них, если хотите. Я никогда не делал это лично, но эта статья, кажется, объясняет это довольно хорошо:

https://medium.com/@DmytroVasin / как добавить собственного полицейского к rubocop-47abf82f820a

Если бы я попытался это сделать, я бы взглянул на исходный код Metrics / ABcSize и mimi c его поведение, за исключением случаев, когда встречается имя метода #call.

Исходный код здесь: https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/cop/metrics/abc_size.rb

1 голос
/ 25 января 2020

Как насчет этого:

def a
  ...
end

# rubocop:disable Metrics/AbcSize
def call
   ...
end
# rubocop:enable Metrics/AbcSize

def b
  ...
end
1 голос
/ 24 января 2020

RuboCop не поддерживает это. Вы не можете иметь разные ограничения для разных частей кода.

...