5

我的部门目前正在制定一些通用的代码最佳实践,我们希望在某种程度上强制执行,为开发人员提供Perl::Tidy配置Perl::Critic

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

my $counter = 0;  # Reset counter

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

可以用Perl::Tidyor实现Perl::Critic吗?

4

4 回答 4

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;
于 2009-09-04T14:01:21.300 回答
3

我认为没有任何机制可以实际将旁注移入Perl::Tidy或移入Perl::Critic. 当然,您可以使用-dscor完全删除它们--delete-side-comments,但您可能不想这样做。

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

您还可以参考其他人编写的一些较小的 Perl::Critic::Policy::CodeLayout::RequireASCII扩展,例如Perl::Critic::More.

于 2009-09-04T12:49:50.767 回答
2

并不是所有的旁注都是不好的。例如,在我对How do I check for a sub-subdirectory in Perl 的回答中,它们不碍事,让人们更容易看到代码中的并行结构。这就是为什么我们把他们放在一边:他们是次要角色,可以增强声明而不引起太多关注。

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

而且,如果您使用 Perl::Critic,有时您会需要旁注:)

 ....; ## no critic
于 2009-09-04T16:47:41.207 回答
0

re brian d foy 的“并非所有的旁注都是不好的”——同意,如果您使用Smart::Comments,旁注将经常出现在您的代码中。

于 2009-09-08T17:00:55.857 回答