Как правильно исключить RequireRcsKeywords из Perl Critic? - PullRequest
7 голосов
/ 07 февраля 2012

Я пытаюсь исключить проверки 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 ]

4 голосов
/ 08 февраля 2012

Вы можете добавить одноразовые корректировки в файл .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)
2 голосов
/ 07 февраля 2012

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

#!/usr/bin/perl -- ## no critic RequireRcsKeywords
2 голосов
/ 07 февраля 2012

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

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

[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1.  (Severity: 2)
0 голосов
/ 08 февраля 2012

Возможно, взломать следующую первую строку:

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

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

...