2012-02-07 7 views
6

मैं एक पर्ल स्क्रिप्ट में पर्ल क्रिटिक की RequRcsKeywords की जांच को बाहर करने का प्रयास कर रहा हूं। मैं अपनी डिफ़ॉल्ट नीति को .perlcriticrc में बदलना नहीं चाहता हूं इसलिए मैंने स्रोत के शीर्ष पर "कोई आलोचक" रेखा नहीं जोड़ा। उस परिवर्तन के बावजूद, पर्ल क्रिटिक अभी भी आरसीएस कीवर्ड की कमी के बारे में शिकायत करता है।पर्ल आलोचक से RequRcsKeywords को बाहर करने का सही तरीका क्या है?

यहाँ मेरी परीक्षण का मामला (critictest.pl) है:

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

जब मैं निष्पादित perlcritic -1 --verbose 8 critictest.pl मैं निम्नलिखित उत्पादन हो:

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

मुझे पता है कि पर्ल समालोचक काम कर रहा है, क्योंकि अगर मैं जोड़ने ## no critic (RequireCheckedSyscalls) तब आउटपुट में वह त्रुटि दूर हो जाती है। मैंने `## no critic (Miscellanea::RequireRcsKeywords) जोड़ने का भी प्रयास किया लेकिन इससे कोई बदलाव नहीं हुआ। बाहरी नीति फ़ाइल का उपयोग किए बिना मेरी फ़ाइल में RequRcsKeywords नीति को अनदेखा करने के लिए पर्ल आलोचक को बताने का सही तरीका क्या है?

संपादित करें: मैं पर्ल 5.10.1, पर्ल आलोचक 1.108, और डेबियन 6.0.3 का उपयोग कर रहा हूं।

उत्तर

4

आप --include और --exclude कमांड लाइन पर के साथ अपने .perlcriticrc फाइल करने के लिए एक बंद समायोजन जोड़ सकते हैं।

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

documentation कहते एफ झंडा अपने आप में कुछ नहीं करता तो यह हानिरहित होना चाहिए:

$ 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

ध्यान दें कि उल्लंघन आपकी फ़ाइल के लाइन 1 पर होता है। अगर मैं आपकी पहली पंक्ति हटा देता हूं, तो मुझे RCS उल्लंघन नहीं मिलता है। मुझे संदेह है कि यह नीति पूरी फ़ाइल पर लागू होती है और केवल तभी अनदेखा की जा सकती है जब no critic प्रगामा आपकी फ़ाइल की पहली पंक्ति पर दिखाई दे।

यह भी ध्यान रखें कि यह आप कह रहा है कि यह आपके pragma अनदेखी है:

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

इसे इंगित करने के लिए धन्यवाद। मैंने इसे याद किया था। पहली पंक्ति को हटाने से अब पर्ल आलोचना नीति को अनदेखा कर देती है। दुर्भाग्यवश, मैं अब 'perl' के साथ उपसर्ग किए बिना कमांड चला सकता हूं क्योंकि '#!' चला गया है। – Starfish

+1

इस व्यवहार के लिए अनुरोध सबमिट करें: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Critic – toolic

2

आप दोनों कुटिया और "कोई आलोचक" पहली पंक्ति पर एनोटेशन डाल सकते हैं। इस तरह:

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

इससे शेबांग लाइन विफल हो जाती है: 'पर्ल स्क्रिप्ट नहीं खोल सकता "## कोई आलोचक RequRcsKeywords ": ऐसी कोई फ़ाइल या निर्देशिका नहीं – mob

+3

आप कह सकते हैं '#!/Usr/bin/perl - ## कोई आलोचक नहीं ...', हालांकि (मुझे लगता है)। – mob

+0

@mob: यह मेरे सिस्टम पर काम करता है। –

0

एक हैक निम्नलिखित पहली पंक्ति का उपयोग हो सकता है।

संबंधित मुद्दे