Rubocop реализует местные правила

Я часть большой организации, мы используем CI и CD. В рамках нашего стремления улучшить нашу кодовую базу Ruby мы хотели бы обеспечить соблюдение местных правил, которые не используются более широкой командой.

Мы работаем с 1 базой кода, разделяемой между 15 командами (более 120 разработчиков), и правила рубокопа, реализованные на данный момент, довольно минимальны. Мы хотели бы, чтобы наша команда соблюдала больше правил и запускала это в качестве теста только в нашей команде, прежде чем принимать решение о развертывании его в масштабах всей компании.

У нас есть .rubocop.yml, который выглядит так:

inherit_from:
  - .rubocop/enforced_rules.yml
  - .rubocop/optional_rules.yml
  - .rubocop/disabled_rules.yml

Мы хотели бы, чтобы местный голос .team_a_only_rules.yml, который мы могли использовать в нашей команде, заменит 3 файла выше.

Есть ли способ сделать это и принудительно применить его перед отправкой кода на удаленный компьютер?

Также мы не хотим фиксировать это .team_a_only_rules.yml, и я думаю, мы могли бы добавить его в .gitignore файл, но вопрос будет в том, как обеспечить соблюдение локальных правил, которые отменяют все другие правила всей компании?


person JsonP    schedule 24.09.2019    source источник
comment
Я не уверен, что понимаю необходимость этого. Будет ли местная кодовая база передана крупной организации или только местной команде? Если нет, то почему бы просто не установить определенные правила на уровне проекта / репо? Но если это так, то почему не все, использующие одно и то же руководство по стилю, нарушают цель даже наличия руководства по стилю (то есть согласованности)?   -  person lacostenycoder    schedule 24.09.2019
comment
@lacostenycoder Да, у нас есть 1 база кода, которую разделяют 15 команд, однако на данный момент правила, внедренные в масштабах компании, минимальны, мы хотели бы опираться на это, иметь более строгие правила, попробовать этот подход в нашей команде и развернуть его остальным командам.   -  person JsonP    schedule 24.09.2019
comment
Вы можете попробовать настроить сценарий bin / shell для завершения команды, использующей дополнительный файл конфигурации. bin/rc, например, может вызвать альтернативный файл конфигурации.   -  person Jay Dorsey    schedule 24.09.2019


Ответы (1)


У вас должна быть возможность передать файл rubocop для использования в ваших правилах, подобных этому

rubocop -c team_a_only_rules.yml

Но проблема будет с CI, потому что я не знаю, как вы скажете CI, когда какие правила использовать.

person lacostenycoder    schedule 24.09.2019
comment
Я не вижу здесь правильного синтаксического анализа yml с помощью rubocop, поэтому может потребоваться промежуточный этап преобразования, который должен быть легким для CI. Я пробовал это с Style/NumericLiterals и ложным / истинным (без условного), и он всегда интерпретировал результат как истинный (включен) - person Jay Dorsey; 24.09.2019
comment
Попробую этот подход и проголосую за ответ в случае успеха. - person JsonP; 24.09.2019
comment
Мне не удалось заставить переменные среды работать внутри .rubocop.yml, поэтому я удалил эту часть из своего ответа. Вероятно, есть способ заставить их работать, но для этого потребуются некоторые хаки или скрипты вокруг самого rubocop. - person lacostenycoder; 24.09.2019