Есть ли способ выполнить инкрементное линтинг с RuboCop?

#ruby #rubocop

#ruby #rubocop

Вопрос:

У меня есть база кода Ruby, которая поддерживается в течение многих лет. Когда я использую RuboCop для проверки стиля кода, это приведет к тысячам нарушений. Есть ли способ использовать RuboCop для проверки только нового добавленного кода или нового измененного кода и сообщать только о нарушениях для этого кода?

Комментарии:

1. Вы можете передать файлы, которые хотите проверить, в rubocop . Если вы используете git, вы можете легко получить список измененных / новых файлов. Конечно, это все равно проверило бы весь файл.

Ответ №1:

Есть несколько способов, которыми Rubocop может вам помочь.

Если вы запустите

 rubocop --auto-gen-config
  

Rubocop сгенерирует для вас два файла конфигурации: в основном пустой .rubocop.yml , который содержит только один ключ:

 inherit_from: .rubocop_todo.yml
  

И .rubocop_todo.yml который отключает каждое нарушение, обнаруженное в вашей кодовой базе, для каждого файла:

 # This configuration was generated by
# `rubocop --auto-gen-config`
# on 2020-09-11 06:20:56 UTC using RuboCop version 0.90.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.

# Offense count: 1
# Cop supports --auto-correct.
Layout/SpaceAfterMethodName:
  Exclude:
    - 'test.rb'

# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
Lint/UnusedMethodArgument:
  Exclude:
    - 'test.rb'

  

Этот файл используется для двух целей:

  • Если руководство по стилю вашей организации отличается от конфигурации Rubocop по умолчанию, вы можете вырезать и вставить нарушение из TODO в «реальный» конфигурационный файл и отключить его навсегда и глобально.

  • Вы можете использовать файл TODO в качестве фактического списка задач и удалять исключения одно за другим и исправлять нарушения одно за другим, когда у вас есть время для их выполнения.

Однако обратите внимание, что исключения основаны на файлах, а не на строке, поэтому вы можете отключить cops только глобально или для каждого файла. Когда вы вносите изменения в существующий файл, во вновь добавленном коде также будут отключены эти параметры, поэтому рекомендуется сначала включить компоновку файла и исправить все существующие нарушения.

Также обратите внимание, что вам, вероятно, придется использовать --exclude-limit COUNT опцию, потому что, если существует более COUNT файлов с одинаковым нарушением, Rubocop просто отключит его глобально. Значение по умолчанию равно 15, поэтому вы должны установить для него значение, превышающее общее количество файлов в вашем проекте.

Еще один полезный параметр

 rubocop --safe-auto-correct --disable-uncorrectable
  

Который будет безопасно автоматически исправлять все безопасно исправляемые нарушения и добавлять комментарии, чтобы отключить cops для неисправимых нарушений.

Тем не менее, я бы сказал, что на самом деле это не работа Rubocop в первую очередь. Ваша система отчетности должна иметь возможность регистрировать «базовый уровень» и сообщать только об отклонениях от этого базового уровня.

Ответ №2:

Я обнаружил, что pronto-rubocop может выполнить эту работу