Как правильно исключить 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 сам по себе ничего не делает, поэтому он должен быть безвредным.