Как может мы ловить комментарии стороны с помощью Perl:: Опрятный или Perl:: Критик?

Только для добавления к ответу, данному пользователем "17 из 26"

, сокет на самом деле состоит из 5 кортежей - (исходный IP, исходный порт, целевой IP, целевой порт, протокол). Здесь протокол мог TCP или UDP или любой протокол транспортного уровня. Этот протокол определяется в пакете от поля 'протокола' в дейтаграмме IP.

Таким образом возможно иметь к различным приложениям на сервере, связывающемся с тому же клиенту на точно тех же 4 кортежах, но отличающийся в поле протокола. Например

Apache в стороне сервера, говорящей на (server1.com:880-client1:1234 на TCP) и World of Warcraft, говорящая на (server1.com:880-client1:1234 на UDP)

Оба, клиент и сервер обработает это, поскольку поле протокола в пакете IP в обоих случаях отличается, даже если все другие 4 поля - то же.

5
задан Brad Gilbert 8 September 2009 в 17:28
поделиться

4 ответа

Думаю, это должно сработать для вас (если я понял, что вы хотите):

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;
17
ответ дан 18 December 2019 в 07:10
поделиться

Я не думаю, что есть какой-либо механизм для фактического перемещения боковых комментариев в Perl :: Tidy или в Perl :: Critic . Вы, конечно, можете полностью удалить их, используя -dsc или - delete-side-comments , но вы, вероятно, не захотите этого делать.

Однако это определенно возможно расширить Perl :: Critic для этого, см., в частности, Perl :: Critic :: DEVELOPER , где описывается, как это делается.

Вы также можете сослаться на некоторые из меньшие расширения, написанные другими, такие как исходный код Perl :: Critic :: Policy :: CodeLayout :: RequireASCII , часть Perl :: Critic :: More .

3
ответ дан 18 December 2019 в 07:10
поделиться

Не все сторонние комментарии плохие. Например, в моем ответе на Как проверить наличие подкаталога в Perl , они не мешают и позволяют людям легче увидеть параллельную структуру в коде. Вот почему мы отложили их в сторону: они второстепенные игроки, которые усиливают утверждение, не привлекая к нему особого внимания.

Я использую комментарии к строкам сами по себе для более подробных объяснений мотивации, особых случаев и скоро. Я использую их, чтобы прервать поток кода, чтобы разработчик их прочитал, потому что они содержат очень важную дополнительную информацию о коде.

И, если вы используете Perl :: Critic, вам иногда понадобятся боковые комментарии :)

 ....; ## no critic
2
ответ дан 18 December 2019 в 07:10
поделиться

re brian d foy: «Не все боковые комментарии плохие» - Согласен, боковые комментарии будут часто появляться в вашем коде, если вы используете Smart :: Comments .

0
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: