2009-09-04 3 views
5

Meine Abteilung ist derzeit dabei, einige Best Practices für den allgemeinen Code festzulegen, die wir gerne etwas durchsetzen würden, indem wir Entwicklern Perl::Tidy und Perl::Critic Konfigurationen zur Verfügung stellen.Wie können wir Seitenkommentare mit Perl :: Tidy oder Perl :: Critic abfangen?

Jetzt haben wir Probleme mit Seitenkommentare. Die Seiten Kommentar ist dies:

my $counter = 0; # Reset counter 

Wir würden es vorziehen, nicht an allen Seiten Kommentare zu haben, da in den meisten Fällen können sie über dem betreffenden Code geschrieben werden, wo sie leichter gelesen werden. Wenn überhaupt möglich, wäre eine Perl::Tidy Lösung perfekt, die einen Seitenkommentar auf die darüber liegende Zeile verschieben würde, die zweitbeste wäre eine Perl::Critic Richtlinie (die ich bei CPAN ebenfalls nicht gefunden habe) und drittbeste und letzte wäre Seien Sie Entwickler, die darauf achten, dass diese Kommentare bei Code-Reviews angezeigt werden.

Ist es möglich, mit Perl::Tidy oder Perl::Critic zu implementieren?

Antwort

17

Ich denke, das sollte für Sie arbeiten (wenn ich verstanden, was Sie wollen):

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; 
+0

Danke, sieht wie ein guter Start aus! –

+0

/Golfclap Schön gemacht! :) –

+0

Schlecht gemacht, habe ich den POD weggelassen, aber ich lief aus Tuits. –

3

Ich glaube nicht, dass es einen Mechanismus für das Verschieben von seitlichen Kommentaren in Perl::Tidy oder in Perl::Critic gibt. Sie können sie natürlich vollständig mit -dsc oder --delete-side-comments entfernen, aber Sie möchten das wahrscheinlich nicht tun.

Es ist jedoch definitiv möglich, Perl::Critic zu erweitern, um dies zu tun, siehe insbesondere Perl::Critic::DEVELOPER, die beschreibt, wie dies erreicht wird.

Sie könnten auch auf einige der kleineren Erweiterungen verweisen, die andere geschrieben haben, z. B. the source toPerl::Critic::Policy::CodeLayout::RequireASCII, Teil von Perl::Critic::More.

2

Nicht alle Seiten Kommentare sind schlecht. Zum Beispiel, in meiner Antwort auf How do I check for a sub-subdirectory in Perl, bleiben sie aus dem Weg und erlauben Menschen, die parallele Struktur im Code leichter zu sehen. Deshalb legen wir sie beiseite: Sie sind kleine Spieler, die eine Aussage verbessern, ohne ihr viel Aufmerksamkeit zu schenken.

Ich verwende Kommentare zu den Zeilen, um ausführlichere Erklärungen zu Motivation, Sonderfällen usw. zu erhalten. Ich benutze diese, um den Codefluss zu unterbrechen, um sicherzustellen, dass der Entwickler sie liest, weil sie sehr wichtige Extra-Code-Informationen haben.

Und wenn Sie Perl :: Critic verwenden, wirst du manchmal die Seiten Kommentare :)

....; ## no critic 
+0

Witzigerweise übergibt '## no kritic' die Perl :: Critic-Regel, die ich in meiner Antwort erstellt habe. '## kein Kritiker noch mehr Text' geht auch, ich weiß nicht, ob das als Bug gewertet werden sollte. –

0

re brian d Foy "Nicht alle Seiten Kommentare schlecht" wollen - Zugegeben, Nebenkommentare werden häufig in Ihrem Code angezeigt, wenn Sie Smart::Comments verwenden.

+0

Wenn Sie intelligente Kommentare mit der Perl :: Critic-Regel verwenden möchten, die ich in meiner Antwort erstellt habe, müssen Sie nur diese Zeile ganz oben hinzufügen: 'return if $ elem-> content = ~/^ \ s * ## # /; '.Dies führt dazu, dass die Regel Kommentare ignoriert, die mit mindestens drei Oktophren beginnen. –

Verwandte Themen