2012-02-07 32 views
6

Tôi đang cố gắng loại trừ các kiểm tra của Perl Critic's RequireRcsKeywords trong một tập lệnh Perl đơn lẻ. Tôi không muốn thay đổi chính sách mặc định của mình trong .perlcriticrc vì vậy tôi đã thêm dòng "không có nhà phê bình" vào đầu nguồn. Mặc dù thay đổi đó, Perl Critic vẫn than phiền về việc thiếu từ khóa RCS.Cách chính xác để loại trừ RequireRcsKeywords khỏi Perl Critic là gì?

Đây là trường hợp của tôi thử nghiệm (critictest.pl):

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

Khi tôi thực hiện perlcritic -1 --verbose 8 critictest.pl tôi nhận được kết quả như sau:

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

Tôi biết rằng Perl phê bình đang làm việc vì nếu tôi thêm ## no critic (RequireCheckedSyscalls) thì lỗi đó trong đầu ra biến mất. Tôi cũng đã thử thêm `## no critic (Miscellanea::RequireRcsKeywords) nhưng điều đó không gây ra bất kỳ thay đổi nào. Cách chính xác để nói cho Perl Critic bỏ qua chính sách RequireRcsKeywords trong tệp của tôi mà không phải sử dụng tệp chính sách bên ngoài là gì?

EDIT: Tôi đang sử dụng Perl 5.10.1, Perl Critic 1.108 và Debian 6.0.3.

Trả lời

4

Bạn có thể thêm điều chỉnh một lần vào tập tin .perlcriticrc của bạn với --include--exclude trên dòng lệnh.

$ 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

Lưu ý rằng vi phạm xảy ra trên Dòng 1 của tệp của bạn. Nếu tôi xóa dòng đầu tiên của mình, tôi không bị vi phạm RCS. Tôi nghi ngờ rằng chính sách này áp dụng cho toàn bộ tệp và chỉ có thể bị bỏ qua nếu pragma no critic xuất hiện trên dòng đầu tiên của tệp của bạn.

Cũng lưu ý rằng nó đang nói với bạn đó là phớt lờ pragma của bạn:

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

Cảm ơn bạn đã chỉ ra điều đó. Tôi đã bỏ lỡ nó. Xóa dòng đầu tiên hiện nay cho phép Perl Critic bỏ qua chính sách. Thật không may, tôi không còn có thể chạy lệnh mà không cần tiền tố nó với 'perl' vì' #! 'Biến mất. – Starfish

+1

Gửi yêu cầu cho hành vi này: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Critic – toolic

2

Bạn có thể đặt cả công việc và "không có nhà phê bình" chú thích trên dòng đầu tiên. Như thế này:

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

Điều này làm cho dòng shebang không thành công: "Không thể mở tập lệnh perl" ## không có nhà phê bình RequireRcsKeywords ": Không có tệp hoặc thư mục nào như vậy ' – mob

+3

Bạn có thể nói' #!/Usr/bin/perl - ## không có nhà phê bình ...', mặc dù (tôi nghĩ). – mob

+0

@mob: hoạt động trên hệ thống của tôi. –

0

Một hack có thể sử dụng dòng đầu tiên như sau:

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

Các documentation nói cờ -F không làm bất cứ điều gì bởi chính nó nên nó phải được vô hại.

Các vấn đề liên quan