2012-02-07 9 views
6

Perl Critic RequireRcsKeywords'in kontrollerini tek bir Perl komut dosyasında hariç tutmaya çalışıyorum. Varsayılan politikamı .perlcriticrc'de değiştirmek istemiyorum, bu yüzden kaynağın başına "eleştiri yok" satırı ekledim. Bu değişikliğe rağmen, Perl Critic hala RCS anahtar kelimelerinin eksikliğinden şikayet ediyor. Ben Perl Eleştirmen ben eklemek çünkü eğer çalıştığınıRequireRcsKeywords'i Perl Critic'ten hariç tutmanın doğru yolu nedir?

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

biliyorum: Ben şu çıktıyı almak perlcritic -1 --verbose 8 critictest.pl çalıştırdığınızda

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

: Burada

benim test case (critictest.pl) 'dir ## no critic (RequireCheckedSyscalls) sonra çıktıdaki hata gider. Ayrıca `## no critic (Miscellanea::RequireRcsKeywords) eklemeyi denedim, ancak bu herhangi bir değişikliğe neden olmadı. Bir harici ilke dosyası kullanmadan dosyamdaki RequireRcsKeywords ilkesini yok saymanın Perl Critic'e söylenmesinin doğru yolu nedir?

DÜZENLEME: Perl 5.10.1, Perl Critic 1.108 ve Debian 6.0.3 kullanıyorum.

cevap

4

komut satırında --include ve --exclude ile .perlcriticrc dosyaya tek seferlik ayarlamalar ekleyebilir.

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

documentation zararsız olmalıdır böylece -F seçeneğinin tek başına hiçbir şey yapmaz diyor ki:

$ 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

İhlalin dosyanızın 1. satırında oluştuğuna dikkat edin. İlk satırınızı silersem, RCS ihlalini alamıyorum. Bu politikanın tüm dosya için geçerli olduğundan şüpheleniyorum ve dosyanızın ilk satırında no critic pragma göründüğünde göz ardı edilebilir.

Not ayrıca söylüyorum ki bu sizin pragma görmezden geçerli:

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

Bunu işaretlediğiniz için teşekkür ederiz. Onu özlemiştim. İlk satırı silmek artık Perl Critic'in politikayı göz ardı etmesine izin veriyor. Ne yazık ki, artık 'perl' ile öneklemeden komutu çalıştıramıyorum çünkü #. – Starfish

+1

Bu davranış için bir istek gönderin: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Critic – toolic

2

Sen shebang ve ilk satırda "hayır eleştirmen" ek açıklama hem koyabilirsiniz. Şunun gibi:

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

Bu, shebang satırının başarısız olmasını sağlar: "Perl betiğini açamıyorum" ## critive RequireRcsKeywords ": Böyle bir dosya veya dizin yok" – mob

+3

"#!/Usr/bin/perl - ## no critic ..." diyebilirsiniz, ama (sanırım). – mob

+0

@mob: Sistemimde çalışıyor. –

0

Bir kesmek izleyen ilk satırını kullanmayı olabilir.