【问题标题】:What is the correct way to exclude RequireRcsKeywords from Perl Critic?从 Perl Critic 中排除 RequireRcsKeywords 的正确方法是什么?
【发布时间】:2015-03-16 01:14:54
【问题描述】:

我试图在单个 Perl 脚本中排除对 Perl Critic 的 RequireRcsKeywords 的检查。我不想在 .perlcriticrc 中更改我的默认策略,所以我在源代码的顶部添加了一个“nocritic”行。尽管发生了这种变化,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 策略而不必使用外部策略文件的正确方法是什么?

编辑:我正在使用 Perl 5.10.1、Perl Critic 1.108 和 Debian 6.0.3。

【问题讨论】:

    标签: perl perl-critic


    【解决方案1】:

    您可以在命令行中使用--include--exclude.perlcriticrc 文件添加一次性调整。

    $ 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】:

      请注意,违规发生在文件的第 1 行。如果我删除您的第一行,我不会收到 RCS 违规。我怀疑此政策适用于整个文件,并且只有当 no critic 杂注出现在文件的第一行时才能忽略。

      另请注意,它告诉您它正在忽略您的编译指示:

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

      【讨论】:

      • 感谢您指出这一点。我错过了。现在删除第一行确实会让 Perl Critic 忽略该策略。不幸的是,我不能再运行该命令而不使用前缀perl,因为#! 已经消失了。
      【解决方案3】:

      您可以将 shebang 和“nocritic”注释都放在第一行。像这样:

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

      【讨论】:

      • 这使得 shebang 线路失败:Can't open perl script "## no critic RequireRcsKeywords": No such file or directory
      • 你可以说#!/usr/bin/perl -- ## no critic ...,不过(我认为)。
      【解决方案4】:

      黑客可能是使用以下第一行:

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

      documentation 表示 -F 标志本身不会做任何事情,所以它应该是无害的。

      【讨论】:

        猜你喜欢
        • 2011-05-15
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多