2012-02-07 4 views
6

Sto tentando di escludere i controlli di RequireRcsKeywords di Perl Critic in un singolo script Perl. Non voglio cambiare la mia politica di default in .perlcriticrc così ho aggiunto una riga "no critic" all'inizio del codice sorgente. Nonostante questo cambiamento, Perl Critic lamenta ancora la mancanza di parole chiave RCS.Qual è il modo corretto di escludere RequireRcsKeywords da Perl Critic?

Ecco il mio banco di prova (critictest.pl):

#!/usr/bin/perl 
## no critic (RequireRcsKeywords) 
use warnings; 
use strict; 
print "Hello, World.\n"; 

Quando eseguo perlcritic -1 --verbose 8 critictest.pl ottengo il seguente output:

[Miscellanea::RequireRcsKeywords] RCS keywords $Id$ not found at line 1, column 1. (Severity: 2) 
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column 1. (Severity: 2) 
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column 1. (Severity: 2) 
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1. (Severity: 2) 
[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1. (Severity: 2) 
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 5, column 1. (Severity: 1) 

So che Perl Critico funziona perché se aggiungo ## no critic (RequireCheckedSyscalls) quindi quell'errore nell'output scompare. Ho anche provato ad aggiungere `## no critic (Miscellanea::RequireRcsKeywords) ma ciò non ha causato alcuna modifica. Qual è il modo corretto per dire a Perl Critic di ignorare il criterio RequireRcsKeywords nel mio file senza dover utilizzare un file di criteri esterno?

EDIT: Sto usando Perl 5.10.1, Perl Critic 1.108 e Debian 6.0.3.

risposta

4

È possibile aggiungere regolazioni una tantum al file .perlcriticrc con --include e --exclude sulla riga di comando.

$ perlcritic --exclude RcsKeywords -1 --verbose 8 critictest.pl 
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1. (Severity: 2) 
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 4, column 1. (Severity: 1) 
2

Si noti che la violazione si verifica sulla riga 1 del file. Se elimini la prima riga, non ricevo la violazione RCS. Sospetto che questa politica si applichi all'intero file e può essere ignorata solo se il pragma no critic viene visualizzato sulla prima riga del file.

Nota anche che si sta dicendo è ignorare la tua pragma:

[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1. (Severity: 2) 
+0

Grazie per averlo indicato. L'avevo perso L'eliminazione della prima riga ora lascia Perl Critic ignorare la politica. Sfortunatamente, non posso più eseguire il comando senza prefisso con 'perl' perché' #! 'È sparito. – Starfish

+1

Invia una richiesta per questo comportamento: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Critic – toolic

2

si può mettere sia la baracca e l'annotazione "non critico" sulla prima riga. Come questo:

#!/usr/bin/perl -- ## no critic RequireRcsKeywords 
+0

Questo fa fallire la riga shebang: 'Impossibile aprire lo script perl" ## nessun critico RequireRcsKeywords ": Nessun file o directory' – mob

+3

Si potrebbe dire '#!/Usr/bin/perl - ## no critic ...', anche se (penso). – mob

+0

@mob: funziona sul mio sistema. –

0

Un hack potrebbe essere quello di utilizzare la seguente prima riga:

#!/usr/bin/perl -F## no critic (Miscellanea::RequireRcsKeywords) 

Il documentation dice il bandiera -F non fa nulla da sola e quindi dovrebbe essere innocuo.

Problemi correlati