2012-02-07 8 views
6

Estoy tratando de excluir los controles de RequireRcsKeywords de Perl Critic en un solo script de Perl. No quiero cambiar mi política predeterminada en .perlcriticrc, así que agregué una línea "no crítica" en la parte superior de la fuente. A pesar de ese cambio, Perl Critic todavía se queja de la falta de palabras clave de RCS.¿Cuál es la forma correcta de excluir RequireRcsKeywords de Perl Critic?

Aquí es mi caso de prueba (critictest.pl):

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

Cuando ejecuto perlcritic -1 --verbose 8 critictest.pl me sale el siguiente resultado:

[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) 

Sé que Perl crítico está funcionando porque si añado ## no critic (RequireCheckedSyscalls), entonces ese error en la salida desaparece. También intenté agregar `## no critic (Miscellanea::RequireRcsKeywords) pero eso no causó ningún cambio. ¿Cuál es la forma correcta de decirle a Perl Critic que ignore la política RequireRcsKeywords en mi archivo sin tener que usar un archivo de política externo?

EDIT: uso Perl 5.10.1, Perl Critic 1.108 y Debian 6.0.3.

Respuesta

4

Puede añadir ajustes de una sola vez a su archivo .perlcriticrc con --include y --exclude en la línea de comandos.

$ 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

Observe que la infracción se produce en la Línea 1 de su archivo. Si elimino su primera línea, no obtengo la violación RCS. Sospecho que esta política se aplica al archivo completo y solo se puede ignorar si aparece el pragma no critic en la primera línea de su archivo.

Tenga en cuenta también que le está diciendo que es ignorar su pragma:

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

Gracias por señalarlo. Me lo había perdido. Eliminar la primera línea ahora permite que Perl Critic ignore la política. Desafortunadamente, ya no puedo ejecutar el comando sin prefijarlo con 'perl' porque el' #! 'Se ha ido. – Starfish

+1

Envíe una solicitud para este comportamiento: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Critic – toolic

2

Se puede retener tanto el tinglado y la anotación "no crítico" en la primera línea. De esta manera:

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

Esto hace que la línea shebang falle: 'No se puede abrir la secuencia de comandos de Perl" ## sin crítica RequireRcsKeywords ": Sin dicho archivo o directorio" – mob

+3

Sin embargo, podría decir '#!/Usr/bin/perl - ## no critic ...' (creo). – mob

+0

@mob: eso funciona en mi sistema. –

0

Un truco podría ser utilizar la siguiente primera línea:

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

El documentation dice -F no hace nada por sí mismo lo que debe ser inofensivo.

Cuestiones relacionadas