我们如何使用Perl :: Tidy或Perl :: Critic来收集旁注?

时间:2009-09-04 11:44:33

标签: perl comments perl-critic perl-tidy

我的部门目前正在着手解决一些常规代码最佳做法,我们希望这些做法可以在某种程度上强制执行,为开发人员提供Perl::TidyPerl::Critic配置。

现在我们遇到了旁注的问题。旁边的评论是这样的:

my $counter = 0;  # Reset counter

我们宁愿根本没有附带评论,因为在大多数情况下,它们可以写在有问题的代码之上,在那里它们更容易阅读。如果可能的话,Perl::Tidy解决方案将是完美的,这会将一个侧面评论移到它上面的一行,第二个最好的是Perl::Critic政策(我在CPAN没有找到并且排在第三位且最后一位的是开发人员在进行代码审查时注意将这些意见指出。

是否可以使用Perl::TidyPerl::Critic实施?

4 个答案:

答案 0 :(得分:17)

我认为这对你有用(如果我明白你想要的话):

package Perl::Critic::Policy::CodeLayout::NoSideComments;

use strict;
use warnings;

use Readonly;

use Perl::Critic::Utils qw{ :severities :classification :ppi };
use parent 'Perl::Critic::Policy';

our $VERSION = 20090904;

Readonly::Scalar my $DESC => "side comments are not allowed";
Readonly::Scalar my $EXPL => "put the comment above the line, not next to it";

sub supported_parameters { return                       }
sub default_severity     { return 5                     }
sub default_themes       { return qw( custom )          }
sub applies_to           { return 'PPI::Token::Comment' }

sub violates {
    my ($self, $elem) = @_;

    #look backwards until you find whitespace that contains a 
    #newline (good) or something other than whitespace (error)

    my $prev = $elem->previous_sibling;
    while ($prev) {
        return $self->violation( $DESC, $EXPL, $elem )
            unless $prev->isa("PPI::Token::Whitespace");
        return if $prev->content =~ /\n/;
        $prev = $prev->previous_sibling;
    }

    #catch # after a block start, but leave the #! line alone
    return $self->violation( $DESC, $EXPL, $elem )
        unless $elem->parent->isa("PPI::Document");
    return;
}

1;

答案 1 :(得分:3)

我认为没有任何机制可以在Perl::TidyPerl::Critic中实际移动旁注释。当然,您可以使用-dsc--delete-side-comments完全删除它们,但您可能不希望这样做。

但是,绝对可以扩展Perl::Critic来执行此操作,特别参见Perl::Critic::DEVELOPER,其中介绍了如何完成此操作。

您还可以引用其他人编写的一些较小的扩展名,例如the source to Perl::Critic::Policy::CodeLayout::RequireASCIIPerl::Critic::More的一部分。

答案 2 :(得分:2)

并非所有的评论都不好。例如,在我对How do I check for a sub-subdirectory in Perl的回答中,他们不在路上,让人们更容易看到代码中的并行结构。这就是为什么我们将它们放在一边:它们是次要的玩家,可以在不引起人们注意的情况下增强声明。

我在线上使用注释来更详细地解释动机,特殊情况等等。我使用这些来中断代码流,以确保开发人员读取它们,因为它们具有非常重要的额外代码信息。

而且,如果你使用的是Perl :: Critic,你有时候会想要旁边的评论:)

 ....; ## no critic

答案 3 :(得分:0)

re brian d foy's“并非所有方面评论都不好” - 同意,如果您使用Smart::Comments,则会在您的代码中经常出现旁注。