Существуют ли хорошие автоматизированные среды для применения стандартов кодирования в Perl?

Я знаю о Perl::Critic

И мой поиск в Google пока не дал результатов по нескольким попыткам.:-(

У кого-нибудь есть какие-либо рекомендации здесь?

Будем благодарны за любые ресурсы для настройки Perl::Critic в соответствии с нашими стандартами кодирования и запуска его на основе кода.

7 ответов

Решение

С точки зрения настройки профиля, пробовали ли вы perlcritic --profile-proto? Это приведет к выводу всех установленных политик со всеми их параметрами с описанием обоих, включая значения по умолчанию, в формате perlcriticrc. Сохраните и отредактируйте, чтобы соответствовать тому, что вы хотите. Всякий раз, когда вы обновляете Perl::Critic, вы можете захотеть снова запустить эту команду и выполнить сравнение с вашим текущим perlcriticrc, чтобы вы могли увидеть любые изменения в существующих политиках и выбрать любые новые.

С точки зрения регулярного запуска perlcritic, установите тест Test:: Perl::Critic вместе с остальными вашими тестами. Это хорошо для нового кода.

Для вашего существующего кода используйте Test:: Perl::Critic:: Progressive вместо этого. T:: P::C:: Progressive будет успешным при первом запуске, но сохранит подсчеты количества нарушений; после этого T:: P::C:: Progressive будет жаловаться, если какой-либо из показателей возрастет. Одна вещь, на которую стоит обратить внимание, это когда вы отменяете изменения в вашей системе контроля версий. (Вы используете один, не так ли?) Скажем, я проверяю изменения и запускаю тесты, и мои изменения сокращают количество нарушений P::C. Позже выясняется, что мои изменения были плохими, поэтому я возвращаюсь к старому коду. T:: P::C:: Прогрессивный тест не пройден из-за уменьшенного количества отсчетов. На данный момент проще всего удалить файл истории (расположение по умолчанию t /.perlcritic-history) и запустить снова. Он должен воспроизводить ваши старые счета, и вы можете написать новый материал, чтобы снова их убить.

В Perl::Critic есть много политик, которые поставляются вместе с ним, но есть несколько дополнительных распределений политик. Посмотрите на Task:: Perl::Critic и http://search.cpan.org/dist/Task-Perl-Critic-IncludingOptionalDependencies/.

Вам не нужно иметь один perlcriticrc обрабатывать весь ваш код. Создайте отдельные файлы perlcriticrc для каждого набора файлов, которые вы хотите протестировать, а затем отдельный тест, который указывает на каждый из них. Для примера, посмотрите на авторские тесты для самого P: C по адресу http://perlcritic.tigris.org/source/browse/perlcritic/trunk/Perl-Critic/xt/author/. Когда выполняются авторские тесты, есть тест, который запускает весь код P::C, второй тест, который применяет дополнительные правила только к политикам, и третий, который критикует тесты P::C.

Я лично считаю, что все должны работать на "жестоком" уровне серьезности, но выбивать политику, с которой они не согласны. Perl::Critic не является полностью самодостаточным; даже разработчики P::C не согласны со всем, что говорит Конвей. Посмотрите на файлы perlcriticrc, используемые в самом Perl::Critic, и найдите в коде Perl::Critic случаи "## no crit"; Я считаю 143 в настоящее время.

(Да, я один из разработчиков Perl::Critic.)

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

В дополнение к "автоматизированным фреймворкам" я настоятельно рекомендую Perl Best Practices Дамиана Конвея. Я не согласен со 100% того, что он предлагает, но большую часть времени он ударяет.

Пост выше с упоминанием Devel:: Prof, вероятно, действительно означает Devel:: Cover (чтобы получить покрытие кода набора тестов).

Хорошей комбинацией является perlcritic с EPIC для Eclipse - нажмите CTRL-SHIFT-C (или предпочитаемый вами настроенный ярлык), и ваш код будет помечен предупреждающими индикаторами, если perlcritic обнаружит, на что жаловаться. Гораздо приятнее, чем не забывать запускать его перед регистрацией. И как обычно с perlcritic, он подберет ваш.perlcriticrc, чтобы вы могли настроить правила. Мы держим наш.perlcriticrc в контроле версий, чтобы все получали одинаковые стандарты.

В дополнение к косметическим рекомендациям, мне всегда полезно запускать Devel::Prof в моем наборе модульных тестов для проверки покрытия тестами.

Другие вопросы по тегам