Как правильно исключить RequireRcsKeywords из Perl Critic?

Я пытаюсь исключить проверки Perl Critic RequireRcsKeywords в одном скрипте Perl. Я не хочу менять свою политику по умолчанию в.perlcriticrc, поэтому я добавил строку "без критики" в начало исходного кода. Несмотря на это, Perl Critic все еще жалуется на отсутствие ключевых слов RCS.

Вот мой тестовый пример (crittest.pl):

#!/usr/bin/perl
## no critic (RequireRcsKeywords)
use warnings;
use strict;
print "Hello, World.\n";

Когда я выполню perlcritic -1 --verbose 8 critictest.pl Я получаю следующий вывод:

[Miscellanea::RequireRcsKeywords] RCS keywords $Id$ not found at line 1, column 1.  (Severity: 2)
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column 1.  (Severity: 2)
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column 1.  (Severity: 2)
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1.  (Severity: 2)
[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1.  (Severity: 2)
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 5, column 1.  (Severity: 1)

Я знаю, что Perl Critic работает, потому что, если я добавлю ## no critic (RequireCheckedSyscalls) тогда эта ошибка на выходе исчезнет. Я также попытался добавить `## no critic (Miscellanea::RequireRcsKeywords) но это не вызвало каких-либо изменений. Как правильно указать Perl Critic игнорировать политику RequireRcsKeywords в моем файле без использования внешнего файла политики?

РЕДАКТИРОВАТЬ: я использую Perl 5.10.1, Perl Critic 1.108 и Debian 6.0.3.

4 ответа

Решение

Вы можете добавить одноразовые корректировки в свой .perlcriticrc файл с --include а также --exclude в командной строке.

$ perlcritic --exclude RcsKeywords -1 --verbose 8 critictest.pl
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1.  (Severity: 2)
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 4, column 1.  (Severity: 1)

Обратите внимание, что нарушение происходит в строке 1 вашего файла. Если я удалю вашу первую строку, я не получу RCS нарушение. Я подозреваю, что эта политика применяется ко всему файлу и может быть проигнорирована, только если no critic Прагма появляется в первой строке вашего файла.

Обратите внимание, что он говорит вам, что игнорирует вашу прагму:

[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1.  (Severity: 2)

Вы можете поместить как шебанг, так и аннотацию "без критика" в первую строку. Как это:

#!/usr/bin/perl -- ## no critic RequireRcsKeywords

Хаком может быть использование следующей первой строки:

#!/usr/bin/perl -F## no critic (Miscellanea::RequireRcsKeywords)

В документации говорится, что флаг -F сам по себе ничего не делает, поэтому он должен быть безвредным.

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