我正在尝试在单个Perl脚本中排除对Perl Critic的RequireRcsKeywords的检查。我不想在.perlcriticrc中更改我的默认策略,所以我在源代码的顶部添加了一个“no critic”行。尽管有这种变化,Perl Critic仍然抱怨缺乏RCS关键字。
这是我的测试用例(critictest.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策略而不必使用外部策略文件的正确方法是什么?
答案 0 :(得分: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 :(得分:2)
请注意,违规发生在文件的第1行。如果我删除了第一行,则不会收到RCS
违规行为。我怀疑此政策适用于整个文件,只有no critic
pragma出现在您文件的第一行时才能忽略。
另请注意,它告诉您它忽略了您的编译指示:
[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1. (Severity: 2)
答案 2 :(得分:2)
你可以将shebang和“no critic”注释放在第一行。像这样:
#!/usr/bin/perl -- ## no critic RequireRcsKeywords
答案 3 :(得分:0)
黑客可能会使用以下第一行:
#!/usr/bin/perl -F## no critic (Miscellanea::RequireRcsKeywords)
documentation表示-F标志本身不做任何事情,所以它应该是无害的。