
Perl :: Critic - Kritik -Perl -Quellcode für Best -Practices.
use Perl::Critic;
my $file = shift;
my $critic = Perl::Critic->new();
my @violations = $critic->critique($file);
print @violations;
Perl :: Critic ist ein erweiterbares Framework zum Erstellen und Anwenden von Codierungsstandards auf Perl -Quellcode. Im Wesentlichen handelt es sich um eine statische Quellcode -Analyse -Engine. Perl :: Critic wird mit einer Reihe von Perl :: Critic :: Richtlinienmodulen verteilt, die versuchen, verschiedene Codierungsrichtlinien durchzusetzen. Die meisten politischen Module basieren auf Damian Conways Buch Perl Best Practices . Perl :: Critic ist jedoch nicht auf PBP beschränkt und wird sogar Richtlinien unterstützen, die Conway widersprechen. Sie können diese Polices über die Perl :: Critic -Schnittstelle aktivieren, deaktivieren und anpassen. Sie können auch neue Richtlinienmodule erstellen, die zu Ihrem eigenen Geschmack passen.
Eine Befehlszeilenschnittstelle zu Perl :: Critic finden Sie in der Dokumentation für Perlcritic. Wenn Sie Perl :: Critic in Ihren Build -Prozess integrieren möchten, testen Sie :: Perl :: Critic eine Schnittstelle, die für Testprogramme geeignet ist. Testen Sie auch :: Perl :: Critic :: Progressive ist nützlich, um die Codierungsstandards schrittweise auf den Legacy -Code anzuwenden. Für die ultimative Bequemlichkeit (auf Kosten einer gewissen Flexibilität) sehen Sie die Kritik Pragma.
Wenn Sie Perl :: Critic probieren möchten, ohne etwas zu installieren, gibt es einen Web-Service unter http://perlcritic.com. Der Web-Service unterstützt noch nicht alle Konfigurationsfunktionen, die in der nativen Perl :: Critic-API verfügbar sind, aber es sollte Ihnen eine gute Vorstellung davon geben, was es tut.
Außerdem enthält ActivePerl eine sehr glatte grafische Schnittstelle zu Perl-Critic namens perlcritic-gui . Sie können eine kostenlose Community -Ausgabe von ActivePerl von http://www.activestate.com erhalten.
Perl :: Critic läuft auf Perl zurück zu Perl 5.10.1. Es stützt sich auf das PPI -Modul, um die schwere Arbeit zu erledigen, Perl zu analysieren.
Das Perl::Critic -Modul wird als öffentliche Klasse angesehen. Alle Änderungen an der Schnittstelle werden einen Abschaltungszyklus durchlaufen.
new( [ -profile => $FILE, -severity => $N, -theme => $string, -include => @PATTERNS, -exclude => @PATTERNS, -top => $N, -only => $B, -profile-strictness => $PROFILE_STRICTNESS_{WARN|FATAL|QUIET}, -force => $B, -verbose => $N ], -color => $B, -pager => $string, -allow-unsafe => $B, -criticism-fatal => $B)
new()
Gibt einen Verweis auf ein neues Perl :: Critic -Objekt zurück. Die meisten Argumente werden einfach direkt in Perl :: Critic :: config übergeben, aber ich habe sie auch hier beschrieben. Der Standardwert für alle Argumente kann in Ihrer .perlcriticrc -Datei definiert werden. Weitere Informationen dazu finden Sie im Abschnitt "Konfiguration". Alle Argumente sind optionale Schlüsselwertpaare wie folgt:
-Profile ist ein Pfad zu einer Konfigurationsdatei. Wenn $FILE nicht definiert ist, versucht Perl :: Critic :: config, eine .perlcriticrc -Konfigurationsdatei im aktuellen Verzeichnis und dann in Ihrem Heimverzeichnis zu finden. Alternativ können Sie die PERLCRITIC -Umgebungsvariable so einstellen, dass sie auf eine Datei an einem anderen Ort verweisen. Wenn eine Konfigurationsdatei nicht gefunden werden kann oder wenn $FILE eine leere Zeichenfolge ist, werden alle Richtlinien mit ihrer Standardkonfiguration geladen. Weitere Informationen finden Sie in "Konfiguration".
-Durch die durchlässige Schweregradniveau. Es werden nur politische Module angewendet, die einen Schweregrad von mehr als $N haben. Die Schweregradewerte sind von 1 (am wenigsten schwere Verstöße) bis 5 (schwerste Verstöße) von 1 (am wenigsten schwere Verstöße). Der Ausfall beträgt 5. Für eine bestimmte -profile wird die Verringerung der -severity in der Regel mehr politische Verstöße aufzeigen. Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen. Benutzer können die Schweregradniveau für jede Richtlinie in ihrer .perlcriticrc -Datei neu definieren. Weitere Informationen finden Sie in "Konfiguration".
Wenn es für Sie schwierig ist, sich daran zu erinnern, ob der Schweregrad "5" am meisten oder am wenigsten restriktiv ist, können Sie einen dieser benannten Werte verwenden:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
--------------------------------------------------------
-severity => 'gentle' -severity => 5
-severity => 'stern' -severity => 4
-severity => 'harsh' -severity => 3
-severity => 'cruel' -severity => 2
-severity => 'brutal' -severity => 1
Die Namen spiegeln wider, wie stark der Kodex kritisiert wird: Eine gentle Kritik berichtet nur über die schwersten Verstöße und so weiter zu einer brutal Kritik, die selbst die geringsten Verstöße meldet.
-Theme ist ein besonderer Ausdruck, der bestimmt, welche Richtlinien auf der Grundlage ihrer jeweiligen Themen gelten sollen. Zum Beispiel würde das Folgende nur Richtlinien mit einem "Fehler" und "PBP" -Thema lädt:
my $critic = Perl::Critic->new( -theme => 'bugs && pbp' );
Sofern die Option -severity explizit angegeben ist, wird das Einstellen -theme stillschweigend dazu führt .perlcriticrc dass die -severity Option auf 1 festgelegt wird. Weitere Informationen zu Themen finden Sie im Abschnitt "Richtlinienthemen".
-IncLude ist ein Verweis auf eine Liste von String @PATTERNS . Richtlinienmodule, die mindestens ein m/$PATTERN/ixms entsprechen, werden unabhängig von allen anderen Einstellungen immer geladen. Zum Beispiel:
my $critic = Perl::Critic->new(-include => ['layout'], -severity => 4);
Dies würde dazu führen, dass Perl :: Kritiker alle CodeLayout::* Richtlinienmodule anwendet, obwohl sie eine Schweregradniveau haben, die weniger als 4 beträgt. Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen. Sie können auch -exclude -include . Beachten Sie, dass -exclude Vorrang vor -include , wenn eine Richtlinie beide Muster entspricht.
-Exclude ist ein Verweis auf eine Liste von String @PATTERNS . Richtlinienmodule, die mindestens ein m/$PATTERN/ixms entsprechen, werden unabhängig von allen anderen Einstellungen nicht geladen. Zum Beispiel:
my $critic = Perl::Critic->new(-exclude => ['strict'], -severity => 1);
Dies würde dazu führen, dass Perl :: Kritiker die RequireUseStrict nicht anwendet und die Richtlinienmodule ProhibitNoStrict , obwohl sie eine Schweregradstufe von mehr als 1 haben. Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen. Sie können auch in Verbindung mit der Option -include -Option -exclude . Beachten Sie, dass -exclude Vorrang vor -include , wenn eine Richtlinie beide Muster entspricht.
-Single-Policy ist ein PATTERN . Es werden nur eine Richtlinie verwendet, die m/$PATTERN/ixms entspricht. Richtlinien, die nicht übereinstimmen, werden ausgeschlossen. Diese Option hat Vorrang vor den Optionen für -severity , -theme , -include , -exclude und -only . Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen.
-Top ist die maximale Anzahl von Verstößen gegen die Rückkehr, wenn sie nach ihren Schweregraden eingestuft werden. Dies muss eine positive Ganzzahl sein. Verstöße werden weiterhin in der Reihenfolge zurückgegeben, die sie in der Datei auftreten. Sofern die Option -severity explizit angegeben ist, wird das Einstellen -top stillschweigend dazu führt .perlcriticrc dass die -severity auf 1 festgelegt wird.
-Nur ein Boolescher Wert. Wenn Perl :: Critic auf einen echten Wert festgelegt wird, entscheidet er nur aus Richtlinien, die im Profil des Benutzers erwähnt werden. Wenn auf einen falschen Wert festgelegt wird (was die Standardeinstellung ist), wählt Perl :: Critic aus allen Richtlinien, die er auf Ihrer Website findet. Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen.
-Profile-Striktness ist ein aufgezählter Wert. Wenn in Perl :: Critic auf "$ profil_strictness_fatal" in Perl :: Critic :: utils :: Constants festgelegt wird, wird Perl :: Critic bestimmte Warnungen vor Problemen übernommen, die in einem .perlcriticrc oder der Datei über die Option -Profile -Option fatal angegeben sind. Zum Beispiel warn Perl :: Kritiker normalerweise nur vor Profilen, die sich auf nicht existierende Richtlinien beziehen, aber dieser Wert macht diese Situation tödlich. Entsprechend "$ profil_strictness_quiet" in Perl :: Critic :: utils :: Constants macht Perl :: Critic über diese Dinge den Mund.
-Force ist ein boolescher Wert, der steuert, ob Perl :: Critic die magischen Anmerkungen "## no critic" in Ihrem Code beobachtet. Wenn Perl :: Critic auf einen echten Wert eingestellt ist, analysiert er alle Code. Wenn Perl :: Critic auf einen falschen Wert festgelegt ist (was der Standard ist), ignorieren Sie den Code, der mit diesen Anmerkungen markiert ist. Weitere Informationen finden Sie in "Biegung der Regeln". Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen.
-Verbose kann eine positive Ganzzahl (von 1 bis 11) oder eine wörtliche Formatspezifikation sein. Siehe Perl :: Critic :: Verstoß für eine Erklärung der Formatspezifikationen. Sie können den Standardwert für diese Option in Ihrer .perlcriticrc -Datei festlegen.
-UnSafe lenkt Perl :: Critic, die Verwendung von Richtlinien zu ermöglichen, die vom Autor als "unsicher" gekennzeichnet sind. Solche Richtlinien können nicht vertrauenswürdigen Code kompilieren oder andere schändliche Dinge tun.
-Color und -Pager werden nicht von Perl :: Critic verwendet, sondern zum Nutzen von Perlcritic.
-kritisch-fatal wird nicht von Perl :: Kritiker verwendet, sondern zum Nutzen von Kritik.
-Color-Severity-Highst , -Color-Severity-High , -Color-Severity- Medium , -Artum-Severity-Low und -Color-Severity-Tiefst werden nicht von Perl :: Kritiker verwendet, sondern werden zum Nutzen von Perlkrit vorgesehen. Jedes wird auf den Begriff :: Ansicolor -Farbspezifikation eingestellt, um Verstöße gegen den entsprechenden Schweregrad anzuzeigen.
-Files-with-violationen und -files ohne Violationen werden von Perl :: Kritiker nicht verwendet, sondern zum Nutzen von Perlcritic bereitgestellt, um nur die relevanten Dateinamen anzuzeigen.
critique( $source_code )
Leitet den $source_code über die Perl :: Critic Engine aus, wobei alle Richtlinien, die in diesen Motor geladen wurden,. Wenn $source_code eine skalare Referenz ist, wird es als eine Zeichenfolge des tatsächlichen Perl -Codes behandelt. Wenn $source_code eine Referenz auf eine Instanz von PPI :: Dokument ist, wird diese Instanz direkt verwendet. Andernfalls wird es als Pfad zu einer lokalen Datei mit Perlcode behandelt. Diese Methode gibt eine Liste von Perl :: Critic :: Verstoßobjekten für jede Verletzung der geladenen Richtlinien zurück. Die Liste ist in der Reihenfolge sortiert, dass die Verstöße im Code erscheinen. Wenn es keine Verstöße gibt, gibt diese Methode eine leere Liste zurück.
add_policy( -policy => $policy_name, -params => %param_hash )
Erstellt ein politisches Objekt und lädt es in diesen Kritiker. Wenn das Objekt nicht instanziiert werden kann, wird eine tödliche Ausnahme ausgelöst. Andernfalls gibt es einen Verweis auf diesen Kritiker zurück.
-Policy ist der Name eines Perl :: Critic :: Policy Subclass -Modul. Der Teil 'Perl::Critic::Policy' des Namens kann für die Kürze weggelassen werden. Dieses Argument ist erforderlich.
-Params ist eine optionale Referenz auf einen Hash von Richtlinienparametern. Der Inhalt dieser Hash -Referenz wird an den Konstruktor des Richtlinienmoduls übergeben. In der Dokumentation im entsprechenden Richtlinienmodul finden Sie eine Beschreibung der von ihnen unterstützten Argumente.
policies()
Gibt eine Liste zurück, die Verweise auf alle Richtlinienobjekte enthält, die in diese Engine geladen wurden. Objekte sind in der Reihenfolge, dass sie geladen wurden.
config()
Gibt das Perl :: Critic :: Konfigurationsobjekt zurück, das für diesen Kritiker erstellt oder gegeben wurde.
statistics()
Gibt das Perl :: Critic :: Statistics -Objekt zurück, das für diesen Kritiker erstellt wurde. Das Statistikobjekt sammelt Daten für alle Dateien an, die von diesem Kritiker analysiert werden.
Für diejenigen, die es vorziehen, eine funktionale Schnittstelle zu haben, kann die critique auf Anfrage exportiert und als statische Funktion aufgerufen werden. Wenn das erste Argument ein Hashref ist, werden seine Inhalte verwendet, um ein neues Perl :: Kritikobjekt intern zu konstruieren. Die Schlüssel dieses Hash sollten die gleichen sein wie die von der Perl::Critic::new() -Methode. Hier sind einige Beispiele:
use Perl::Critic qw(critique);
# Use default parameters...
@violations = critique( $some_file );
# Use custom parameters...
@violations = critique( {-severity => 2}, $some_file );
# As a one-liner
%> perl -MPerl::Critic=critique -e 'print critique(shift)' some_file.pm
Keiner der anderen Objektmethoden wird derzeit als statische Funktionen unterstützt. Entschuldigung.
Die meisten Einstellungen für Perl :: Critic und jedes der Richtlinienmodule können durch eine Konfigurationsdatei gesteuert werden. Die Standardkonfigurationsdatei wird aufgerufen .perlcriticrc . Perl :: Critic wird zuerst im aktuellen Verzeichnis und dann in Ihrem Heimverzeichnis nach dieser Datei suchen. Alternativ können Sie die PERLCRITIC -Umgebungsvariable so festlegen, dass sie explizit auf eine andere Datei an einem anderen Ort verweisen. Wenn keine dieser Dateien vorhanden ist und der Konstruktor nicht die Option -profile gegeben wird, werden alle Module, die im Perl :: Critic :: Policy Namespace enthalten sind, mit ihrer Standardkonfiguration geladen.
Das Format der Konfigurationsdatei ist eine Reihe von INI-Blöcken, die Schlüsselwertpaare enthalten, die durch '=' getrennt sind. Kommentare sollten mit '#' beginnen und können in einer separaten Zeile oder nach den Namenswertepaaren platziert werden, wenn Sie dies wünschen.
Standardeinstellungen für Perl :: Critic selbst können vor dem ersten benannten Block festgelegt werden. Wenn Sie beispielsweise irgendwelche oder alle diese oben in Ihrer Konfigurationsdatei einsetzen, wird der Standardwert für das entsprechende Konstruktorargument festgelegt.
severity = 3 #Integer or named level
only = 1 #Zero or One
force = 0 #Zero or One
verbose = 4 #Integer or format spec
top = 50 #A positive integer
theme = (pbp || security) && bugs #A theme expression
include = NamingConventions ClassHierarchies #Space-delimited list
exclude = Variables Modules::RequirePackage #Space-delimited list
criticism-fatal = 1 #Zero or One
color = 1 #Zero or One
allow-unsafe = 1 #Zero or One
pager = less #pager to pipe output to
Der Rest der Konfigurationsdatei ist eine Reihe von Blöcken wie diese:
[Perl::Critic::Policy::Category::PolicyName]
severity = 1
set_themes = foo bar
add_themes = baz
maximum_violations_per_document = 57
arg1 = value1
arg2 = value2
Perl::Critic::Policy::Category::PolicyName ist der vollständige Name eines Moduls, das die Richtlinie implementiert. Die mit Perl :: Kritiker verteilten Richtlinienmodule wurden gemäß dem Inhaltsverzeichnis in Damian Conways Buch Perl Best Practices in Kategorien eingeteilt. Für die Kürze können Sie den Teil des Modulnamens 'Perl::Critic::Policy' weglassen.
Der severity ist das Wichtigkeit, das Sie der Richtlinie zuweisen möchten. Alle politischen Module sind mit einem Standardschweregrad -Wert von 1 (am wenigsten schwer) bis 5 (schwerwiegend) definiert. Sie können jedoch mit der Standardschwere nicht einverstanden und entscheiden, ihm eine höhere oder niedrigere Schwere zu geben, basierend auf Ihrer eigenen Codierungsphilosophie. Sie können die severity einer Ganzzahl von 1 bis 5 festlegen oder einen der äquivalenten Namen verwenden:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
----------------------------------------------------
gentle 5
stern 4
harsh 3
cruel 2
brutal 1
Die Namen spiegeln wider, wie stark der Kodex kritisiert wird: Eine gentle Kritik berichtet nur über die schwersten Verstöße und so weiter zu einer brutal Kritik, die selbst die geringsten Verstöße meldet.
set_themes legt das Thema für die Richtlinie fest und überschreibt sein Standardthema. Das Argument ist eine Zeichenfolge von einer oder mehrerer Whitespace-delimitierter alphanumerischer Wörter. Themen sind unempfindlich. Weitere Informationen finden Sie in "Richtlinien".
add_themes endet mit den Standardthemen für diese Richtlinie an. Das Argument ist eine Zeichenfolge von einer oder mehrerer Whitespace-delimitiertes Wörter. Themen sind unempfindlich. Weitere Informationen finden Sie in "Richtlinien".
maximum_violations_per_document begrenzt die Anzahl der Verstöße, die die Richtlinie für ein bestimmtes Dokument zurückgibt. Einige Richtlinien haben eine Standardgrenze; In der Dokumentation für die einzelnen Richtlinien finden Sie, ob es eine gibt. Um eine Richtlinie zu erzwingen, keine Grenze zu haben, geben Sie "NO_LIMIT" oder den leeren Zeichenfolge für den Wert dieses Parameters an.
Die verbleibenden Schlüsselwertpaare sind Konfigurationsparameter, die für diese Richtlinie in den Konstruktor übergeben werden. Die Konstrukteure für die meisten politischen Objekte unterstützen keine Argumente, und diejenigen, die dies tun, sollten angemessene Ausfälle haben. Weitere Informationen finden Sie in der Dokumentation des entsprechenden Richtlinienmoduls.
Anstatt den Schweregrad für eine bestimmte Richtlinie neu zu definieren, können Sie eine Richtlinie vollständig deaktivieren, indem Sie eine '-' für den Namen des Moduls in Ihrer Konfigurationsdatei vorbereiten. Auf diese Weise wird die Richtlinie niemals geladen, unabhängig von der durch den Perl :: Kritikkonstruktor gewährten -severity .
Eine einfache Konfiguration könnte so aussehen:
#--------------------------------------------------------------
# I think these are really important, so always load them
[TestingAndDebugging::RequireUseStrict]
severity = 5
[TestingAndDebugging::RequireUseWarnings]
severity = 5
#--------------------------------------------------------------
# I think these are less important, so only load when asked
[Variables::ProhibitPackageVars]
severity = 2
[ControlStructures::ProhibitPostfixControls]
allow = if unless # My custom configuration
severity = cruel # Same as "severity = 2"
#--------------------------------------------------------------
# Give these policies a custom theme. I can activate just
# these policies by saying `perlcritic -theme larry`
[Modules::RequireFilenameMatchesPackage]
add_themes = larry
[TestingAndDebugging::RequireTestLabels]
add_themes = larry curly moe
#--------------------------------------------------------------
# I do not agree with these at all, so never load them
[-NamingConventions::Capitalization]
[-ValuesAndExpressions::ProhibitMagicNumbers]
#--------------------------------------------------------------
# For all other Policies, I accept the default severity,
# so no additional configuration is required for them.
Weitere Konfigurationsbeispiele finden Sie in der perlcriticrc -Datei, die in diesem examples dieser Verteilung enthalten ist.
Die eigene Perl :: Critic-Konfiguration von Damian Conway ist auch in dieser Verteilung als examples/perlcriticrc-conway enthalten.
Eine große Anzahl von Richtlinienmodulen wird mit Perl :: Critic verteilt. Sie werden kurz im Begleitdokument Perl :: Critic :: Policysummary und im Detail in den einzelnen Modulen selbst beschrieben. Sagen Sie "perlcritic -doc PATTERN" um die Perldoc für alle Richtlinienmodule zu sehen, die mit dem Regex m/PATTERN/ixms entsprechen
Es gibt eine Reihe von Verteilungen zusätzlicher Richtlinien für CPAN. Wenn Perl :: Critic keine gewünschte Richtlinie enthält, hat möglicherweise bereits jemand sie geschrieben. Eine Liste einiger dieser Verteilungen finden Sie im Abschnitt "Siehe auch".
Jede Richtlinie ist mit einem oder mehreren "Themen" definiert. Themen können verwendet werden, um willkürliche Gruppen von Richtlinien zu erstellen. Sie sollen einen alternativen Mechanismus zur Auswahl Ihrer bevorzugten Richtlinienmenge bereitstellen. Sie können beispielsweise bei der Analyse von Testprogrammen eine bestimmte Teilmenge von Richtlinien deaktivieren. Umgekehrt möchten Sie möglicherweise nur eine bestimmte Teilmenge von Richtlinien bei der Analyse von Modulen aktivieren.
Die Richtlinien, die mit Perl :: Kritiker versandt werden, wurden in die folgenden Themen eingebrochen. Dies ist nur unser Versuch, einige grundlegende logische Gruppierungen bereitzustellen. Sie können neue Themen erfinden, die Ihren Bedürfnissen entsprechen.
THEME DESCRIPTION
--------------------------------------------------------------------------
core All policies that ship with Perl::Critic
pbp Policies that come directly from "Perl Best Practices"
bugs Policies that that prevent or reveal bugs
certrec Policies that CERT recommends
certrule Policies that CERT considers rules
maintenance Policies that affect the long-term health of the code
cosmetic Policies that only have a superficial effect
complexity Policies that specifically relate to code complexity
security Policies that relate to security issues
tests Policies that are specific to test programs
Jede Richtlinie kann in mehrere Themen passen. Sagen Sie "perlcritic -list" um eine Auflistung aller verfügbaren Richtlinien und der Themen zu erhalten, die mit jedem verbunden sind. Sie können das Thema auch für jede Richtlinie in Ihrer Datei .perlcriticrc ändern. Weitere Informationen dazu finden Sie im Abschnitt "Konfiguration".
Mit der Option -theme können Sie eine willkürlich komplexe Regel erstellen, die feststellt, welche Richtlinien geladen werden. Vorrang ist der gleiche wie der normale Perl -Code, und Sie können auch Klammern verwenden, um Vorrang vorzunehmen. Unterstützte Betreiber sind:
Operator Alternative Example
-----------------------------------------------------------------
&& and 'pbp && core'
|| or 'pbp || (bugs && security)'
! not 'pbp && ! (portability || complexity)'
Themennamen sind unempfindlich. Wenn das -theme auf eine leere Zeichenfolge eingestellt ist, bewertet es alle Richtlinien als wahr.
Perl :: Critic verfolgt einen harten Ansatz für Ihren Code: Entweder Sie befolgen oder nicht. In der realen Welt ist es nicht immer praktisch (noch nicht möglich), die Codierungsstandards vollständig einzuhalten. In solchen Fällen ist es ratsam zu zeigen, dass Sie wissentlich gegen die Standards verstoßen und dass Sie einen verdammt guten Grund (DGR) dafür haben.
Um in diesen Situationen zu helfen, können Sie Perl :: Kritiker dazu leiten, bestimmte Zeilen oder Codeblöcke mit Anmerkungen zu ignorieren:
require 'LegacyLibaray1.pl'; ## no critic
require 'LegacyLibrary2.pl'; ## no critic
for my $element (@list) {
## no critic
$foo = ""; #Violates 'ProhibitEmptyQuotes'
$barf = bar() if $foo; #Violates 'ProhibitPostfixControls'
#Some more evil code...
## use critic
#Some good code...
do_something($_);
}
Die Anmerkungen "## no critic" Direct Perl :: Kritiker, um die verbleibenden Codezeilen zu ignorieren, bis eine Annotation "## use critic" gefunden wird. Wenn sich die Annotation "## no critic" in derselben Zeile wie eine Code -Anweisung befindet, wird nur diese Codezeile übersehen. Verwenden Sie die Option --force , um Perlcritic zu leiten, um die Anmerkungen "## no critic" zu ignorieren.
Eine nackte Annotation "## no critic" deaktiviert alle aktiven Richtlinien. Wenn Sie nur bestimmte Richtlinien deaktivieren möchten, fügen Sie eine Liste von Richtliniennamen als Argumente hinzu, genau wie für die "no strict" oder "no warnings" Pragmas. Dies würde beispielsweise die ProhibitEmptyQuotes und ProhibitPostfixControls -Richtlinien bis zum Ende des Blocks oder bis zum nächsten "## use critic" -Notation (je nachdem, was zuerst kommt), deaktiviert:
## no critic (EmptyQuotes, PostfixControls)
# Now exempt from ValuesAndExpressions::ProhibitEmptyQuotes
$foo = "";
# Now exempt ControlStructures::ProhibitPostfixControls
$barf = bar() if $foo;
# Still subjected to ValuesAndExpression::RequireNumberSeparators
$long_int = 10000000000;
Da die Richtliniennamen mit den Argumenten "## no critic" als reguläre Ausdrücke übereinstimmen, können Sie die Richtliniennamen in einer Aufnahme wie folgt abkürzen oder eine ganze Familie von Richtlinien deaktivieren:
## no critic (NamingConventions)
# Now exempt from NamingConventions::Capitalization
my $camelHumpVar = 'foo';
# Now exempt from NamingConventions::Capitalization
sub camelHumpSub {}
Die Argumentliste muss in Klammern oder Klammern beigefügt sein und einen oder mehrere von Kommas getrennte BareWords enthalten (z. B. verwenden keine Zitate). Die Annotationen "## no critic" können verschachtelt werden, und Richtlinien, die durch eine innere Annotation benannt werden, werden zusammen mit denjenigen deaktiviert, die bereits eine äußere Annotation deaktiviert haben.
Einige Richtlinien wie Subroutines::ProhibitExcessComplexity gelten für einen gesamten Codeblock. In diesen Fällen muss die Annotation "## no critic" in der Linie erscheinen, in der der Verstoß gemeldet wird. Zum Beispiel:
sub complicated_function { ## no critic (ProhibitExcessComplexity)
# Your code here...
}
Richtlinien wie Documentation::RequirePodSections für das gesamte Dokument gelten. In diesem Fall werden Verstöße in Zeile 1 gemeldet.
Verwenden Sie diese Funktion mit Bedacht. Annotationen "## no critic" sollten im kleinstmöglichen Bereich oder nur in einzelnen Codezeilen verwendet werden. Und Sie sollten immer so spezifisch wie möglich sein, welche Richtlinien Sie deaktivieren möchten (dh niemals einen bloßen "## no critic" ). Wenn sich Perl :: Critic über Ihren Code beschwert, versuchen Sie, eine konforme Lösung zu finden, bevor Sie auf diese Funktion zurückgreifen.
Codierungsstandards sind zutiefst persönlich und sehr subjektiv. Das Ziel von Perl :: Critic ist es, Ihnen beim Schreiben von Code zu helfen, der mit einer Reihe von Best Practices entspricht. Unser Hauptziel ist es nicht, zu bestimmen, was diese Praktiken sind, sondern die von anderen entdeckten Praktiken umzusetzen. Letztendlich treffen Sie die Regeln - Perl :: Critic ist lediglich ein Instrument zur Förderung der Konsistenz. Wenn es eine Richtlinie gibt, die Sie für wichtig halten oder die wir übersehen haben, wären wir sehr dankbar für Beiträge, oder Sie können einfach Ihre eigene private Richtlinie in Perl :: Kritiker laden.
Das modulare Design von Perl :: Kritiker soll die Hinzufügung neuer Richtlinien erleichtern. Sie müssen ein gewisses Verständnis für PPI haben, aber die meisten Richtlinienmodule sind ziemlich einfach und benötigen nur etwa 20 Codezeilen. In der in dieser Verteilung enthaltenen Perl :: Critic :: Entwicklerdatei finden Sie eine Schritt-für-Schritt-Demonstration, wie neue Richtlinienmodule erstellt werden.
Wenn Sie neue Richtlinienmodule entwickeln, senden Sie sie gerne an <[email protected]> und ich werde gerne in Betracht ziehen, sie in die Distribution von Perl :: Critic zu setzen. Oder wenn Sie direkt am Perl :: Critic-Projekt arbeiten möchten, können Sie unser Repository unter https://github.com/perl-critic/perl-critic.git aufgeben.
Das Perl :: Critic -Team steht ebenfalls zur Einstellung zur Verfügung. Wenn Ihre Organisation über eigene Codierungsstandards verfügt, können wir benutzerdefinierte Richtlinien erstellen, um Ihre lokalen Richtlinien durchzusetzen. Oder wenn Ihre Codebasis für ein bestimmtes Defektmuster anfällig ist, können wir Richtlinien entwerfen, die Ihnen helfen, diese kostspieligen Mängel zu fangen , bevor sie in die Produktion gehen. Um Ihre Bedürfnisse mit dem Perl :: Critic -Team zu besprechen, wenden Sie sich einfach an <[email protected]> .
Perl :: Critic benötigt die folgenden Module:
B :: Schlüsselwörter
Config :: winzig
Ausnahme :: Klasse
Datei :: Spec
Datei :: Spec :: Unix
Datei :: was
Liste :: Einigeutils
Liste :: Util
Modul :: Steckbar
Perl :: Tidy
POD :: Zauber
PPI
POD :: Klartext
POD :: SELECT
POD :: Nutzung
Readonly
Scalar :: Util
String :: Format
Begriff :: Ansicolor
Text :: Parsewords
Version
Sie werden aufgefordert, die öffentliche Mailingliste unter https://groups.google.com/d/forum/perl-critic zu abonnieren. Mindestens ein Mitglied des Entwicklungsteams hängt normalerweise in IRC: //irc.perl.org/#perlcritic herum, und Sie können Perl :: Critic auf Twitter unter https://twitter.com/perlcritic folgen.
Es gibt eine Reihe von Verteilungen zusätzlicher Richtlinien. Einige sind hier aufgeführt:
Perl :: Critic :: More
Perl :: Critic :: Bangs
Perl :: Kritiker :: lax
Perl :: Kritiker :: Stridresubs
Perl :: Critic :: Swift
Perl :: Critic :: Tics
Diese Verteilungen ermöglichen es Ihnen, Perl :: Kritiker in Ihren Unit -Tests zu verwenden:
Test :: Perl :: Kritiker
Test :: Perl :: Critic :: Progressive
Es gibt auch eine Verteilung, die alle dem Entwicklungsteam bekannten Perl :: Critic -verwandten Module installiert:
Aufgabe :: Perl :: Critic
Die Prüfung von Perlcode ist für den Menschen schwierig, geschweige denn Maschinen. Wenn Sie Fehler finden, insbesondere falsche Positives oder falsche Negative von einem Perl :: Critic :: Rictain, senden Sie sie bitte unter https://github.com/perl-critic/perl-critic/issues. Danke.
Adam Kennedy - Für die Erstellung von PPI, das Herz und die Seele von Perl :: Critic.
Damian Conway - endlich zum Schreiben von Perl Best Practices :)
Chris Dolan - für die besten Funktionen und Politikmodule beizutragen.
Andy Lester-weiser Weise und Meister der All-Things-Tests.
Elliot Shank - Der selbsternannte Qualitätsfreak.
Giuseppe Maxia - für all die großartigen Ideen und die positive Ermutigung.
Und Sharon, meine Frau - für die Abfahrt mit meinen Codes -Sitzungen.
Vielen Dank auch an die Perl Foundation für die Bereitstellung eines Stipendiums zur Unterstützung von Chris Dolans Projekt zur Durchführung von zwanzig PBP -Richtlinien. http://www.perlfoundation.org/april_1_2007_new_grant_awards
Thanks also to this incomplete laundry list of folks who have contributed to Perl::Critic in some way: Gregory Oschwald, Mike O'Regan, Tom Hukins, Omer Gazit, Evan Zacks, Paul Howarth, Sawyer X, Christian Walde, Dave Rolsky, Jakub Wilk, Roy Ivy III, Oliver Trosien, Glenn Fowler, Matt Creenan, Alex Balhatchet, Sebastian Paaske Tørholm, Stuart A Johnston, Dan Book, Steven Humphrey, James Raspass, Nick Tonkin, Harrison Katz, Douglas Sims, Mark Fowler, Alan Berndt, Neil Bowers, Sergey Romanov, Gabor Szabo, Graham Knop, Mike Eldridge, David Steinbrunner, Kirk Kimmel, Guillaume Aubert, Dave Cross, Anirvan Chatterjee, Todd Rinaldo, Graham Ollis, Karen Etheridge, Jonas Brømsø, Olaf Alders, Jim Keenan, Slaven Rezić, Szymon Nieznański.
Jeffrey Ryan Thalhammer [email protected]
Copyright (C) 2005-2018 Imaginative Softwaresysteme. Alle Rechte vorbehalten.
Dieses Programm ist kostenlose Software; Sie können es umverteilen und/oder unter den gleichen Bedingungen wie Perl selbst ändern. Der vollständige Text dieser Lizenz finden Sie in der Lizenzdatei in diesem Modul.