#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 может выполнить эту работу