
Perl :: Critic - Critique Perl Source เพื่อการปฏิบัติที่ดีที่สุด
use Perl::Critic;
my $file = shift;
my $critic = Perl::Critic->new();
my @violations = $critic->critique($file);
print @violations;
Perl :: Critic เป็นกรอบการทำงานที่ขยายได้สำหรับการสร้างและใช้มาตรฐานการเข้ารหัสกับซอร์สโค้ด Perl โดยพื้นฐานแล้วมันเป็นเครื่องมือวิเคราะห์ซอร์สโค้ดแบบคงที่ Perl :: Critic มีการแจกจ่ายด้วย Perl :: Critic :: โมดูลนโยบายที่พยายามบังคับใช้แนวทางการเข้ารหัสต่างๆ โมดูลนโยบายส่วนใหญ่ขึ้นอยู่กับ แนวทางปฏิบัติที่ดีที่สุด ของ Damian Conway อย่างไรก็ตาม Perl :: Critic ไม่ได้ จำกัด อยู่ที่ PBP และจะสนับสนุนนโยบายที่ขัดแย้งกับ Conway คุณสามารถเปิดใช้งานปิดการใช้งานและปรับแต่งตำรวจเหล่านั้นผ่านส่วนต่อประสาน Perl :: Critic คุณยังสามารถสร้างโมดูลนโยบายใหม่ที่เหมาะกับรสนิยมของคุณเอง
สำหรับอินเทอร์เฟซบรรทัดคำสั่งไปยัง Perl :: Critic ดูเอกสารประกอบสำหรับ Perlcritic หากคุณต้องการรวม Perl :: Critic กับกระบวนการสร้างของคุณให้ทดสอบ :: Perl :: Critic ให้อินเทอร์เฟซที่เหมาะสำหรับโปรแกรมทดสอบ นอกจากนี้การทดสอบ :: Perl :: Critic :: Progressive มีประโยชน์สำหรับการใช้มาตรฐานการเข้ารหัสกับรหัสดั้งเดิม เพื่อความสะดวกสบายที่สุด (ด้วยค่าใช้จ่ายของความยืดหยุ่นบางอย่าง) ดูคำวิจารณ์ Pragma
หากคุณต้องการลอง Perl :: Critic โดยไม่ต้องติดตั้งอะไรมีบริการเว็บที่ http://perlcritic.com บริการเว็บยังไม่รองรับคุณสมบัติการกำหนดค่าทั้งหมดที่มีอยู่ใน Perl :: Critic API แต่ควรให้ความคิดที่ดีเกี่ยวกับสิ่งที่มันทำ
นอกจากนี้ ActivePerl ยังมีส่วนต่อประสานกราฟิกที่ลื่นไหลมากกับ perl-critic ที่เรียกว่า perlcritic-gui คุณสามารถรับ ActivePerl รุ่นชุมชนฟรีได้จาก http://www.activestate.com
Perl :: Critic ทำงานบน Perl กลับไปที่ Perl 5.10.1 มันขึ้นอยู่กับโมดูล PPI ในการทำงานหนักของการแยกวิเคราะห์ Perl
โมดูล Perl::Critic ถือเป็นชนชั้นสาธารณะ การเปลี่ยนแปลงใด ๆ ของอินเทอร์เฟซจะผ่านรอบการเสื่อมราคา
new( [ -profile => $FILE, -severity => $N, -theme => $string, -include => @PATTERNS, -exclude => @PATTERNS, -top => $N, -only => $B, -profile-strictness => $PROFILE_STRICTNESS_{WARN|FATAL|QUIET}, -force => $B, -verbose => $N ], -color => $B, -pager => $string, -allow-unsafe => $B, -criticism-fatal => $B)
new()
ส่งคืนการอ้างอิงไปยังวัตถุ Perl :: Critic ใหม่ อาร์กิวเมนต์ส่วนใหญ่เพิ่งส่งผ่านไปยัง Perl :: Critic :: Config แต่ฉันได้อธิบายไว้ที่นี่เช่นกัน ค่าเริ่มต้นสำหรับอาร์กิวเมนต์ทั้งหมดสามารถกำหนดไว้ในไฟล์ .perlcriticrc ของคุณ ดูส่วน "การกำหนดค่า" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น อาร์กิวเมนต์ทั้งหมดเป็นคู่คีย์-ค่าเป็นทางเลือกดังต่อไปนี้:
-Profile เป็นพา ธ ไปยังไฟล์การกำหนดค่า หากไม่ได้กำหนด $FILE perl :: critic :: config พยายามค้นหาไฟล์กำหนดค่า .perlcriticrc ในไดเรกทอรีปัจจุบันและจากนั้นในไดเรกทอรีที่บ้านของคุณ หรือคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PERLCRITIC เพื่อชี้ไปที่ไฟล์ในตำแหน่งอื่น หากไม่พบไฟล์การกำหนดค่าหรือหาก $FILE เป็นสตริงว่างเปล่านโยบายทั้งหมดจะถูกโหลดด้วยการกำหนดค่าเริ่มต้น ดู "การกำหนดค่า" สำหรับข้อมูลเพิ่มเติม
-Seerity คือระดับความรุนแรงขั้นต่ำ เฉพาะโมดูลนโยบายที่มีความรุนแรงมากกว่า $N ที่จะถูกนำไปใช้ ค่าความรุนแรงเป็นจำนวนเต็มตั้งแต่ 1 (การละเมิดอย่างรุนแรงน้อยที่สุด) ถึง 5 (การละเมิดที่รุนแรงที่สุด) ค่าเริ่มต้นคือ 5. สำหรับ -profile ที่กำหนดการลดลง - -severity มักจะเปิดเผยการละเมิดนโยบายเพิ่มเติม คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ ผู้ใช้สามารถกำหนดระดับความรุนแรงใหม่สำหรับนโยบายใด ๆ ในไฟล์. .perlcriticrc ดู "การกำหนดค่า" สำหรับข้อมูลเพิ่มเติม
หากเป็นเรื่องยากสำหรับคุณที่จะจำได้ว่าความรุนแรง "5" เป็นระดับที่เข้มงวดที่สุดหรือน้อยที่สุดคุณสามารถใช้ค่าหนึ่งในค่าเหล่านี้:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
--------------------------------------------------------
-severity => 'gentle' -severity => 5
-severity => 'stern' -severity => 4
-severity => 'harsh' -severity => 3
-severity => 'cruel' -severity => 2
-severity => 'brutal' -severity => 1
ชื่อสะท้อนให้เห็นถึงการวิพากษ์วิจารณ์รหัสอย่างรุนแรง: คำวิจารณ์ gentle รายงานเพียงการละเมิดที่รุนแรงที่สุดและอื่น ๆ ลงไปสู่การวิพากษ์วิจารณ์ brutal ซึ่งรายงานแม้แต่การละเมิดเล็กน้อยที่สุด
-นั่น คือการแสดงออกพิเศษที่กำหนดนโยบายที่จะนำไปใช้ตามธีมที่เกี่ยวข้อง ตัวอย่างเช่นต่อไปนี้จะโหลดเฉพาะนโยบายที่มีธีม 'ข้อบกพร่อง' และ 'PBP':
my $critic = Perl::Critic->new( -theme => 'bugs && pbp' );
เว้นแต่ว่าตัวเลือก -severity จะได้รับอย่างชัดเจนการตั้ง -theme อย่างเงียบ ๆ จะทำให้ -severity ถูกตั้งค่าเป็น 1 คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ ดูส่วน "ธีมนโยบาย" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับธีม
-รวม ถึงการอ้างอิงถึงรายการสตริง @PATTERNS โมดูลนโยบายที่ตรงกับ m/$PATTERN/ixms จะถูกโหลดเสมอโดยไม่คำนึงถึงการตั้งค่าอื่น ๆ ทั้งหมด ตัวอย่างเช่น:
my $critic = Perl::Critic->new(-include => ['layout'], -severity => 4);
สิ่งนี้จะทำให้ Perl :: Critic ใช้ CodeLayout::* โมดูลนโยบายแม้ว่าพวกเขาจะมีระดับความรุนแรงที่น้อยกว่า 4 คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ นอกจากนี้คุณยังสามารถใช้ -include ร่วมกับตัวเลือก -exclude โปรดทราบว่า -exclude มีความสำคัญกว่า -include เมื่อนโยบายตรงกับทั้งสองรูปแบบ
-exclude คือการอ้างอิงถึงรายการสตริง @PATTERNS โมดูลนโยบายที่ตรงกับอย่างน้อยหนึ่ง m/$PATTERN/ixms จะไม่ถูกโหลดโดยไม่คำนึงถึงการตั้งค่าอื่น ๆ ทั้งหมด ตัวอย่างเช่น:
my $critic = Perl::Critic->new(-exclude => ['strict'], -severity => 1);
สิ่งนี้จะทำให้ Perl :: Critic ไม่ใช้โมดูลนโยบาย RequireUseStrict และ ProhibitNoStrict โมดูลนโยบายแม้ว่าพวกเขาจะมีระดับความรุนแรงที่มากกว่า 1 คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ นอกจากนี้คุณยังสามารถใช้ -exclude กันร่วมกับตัวเลือก -include โปรดทราบว่า -exclude มีความสำคัญกว่า -include เมื่อนโยบายตรงกับทั้งสองรูปแบบ
-Single-Policy เป็นรูปแบบ PATTERN จะใช้นโยบายเดียวที่ตรงกับ m/$PATTERN/ixms นโยบายที่ไม่ตรงกันจะถูกแยกออก ตัวเลือกนี้มีความสำคัญเหนือกว่า -severity , -theme , -include , -exclude และ -only ตัวเลือก คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ
-top คือจำนวนการละเมิดสูงสุดที่จะกลับมาเมื่อได้รับการจัดอันดับตามระดับความรุนแรง นี่จะต้องเป็นจำนวนเต็มบวก การละเมิดยังคงถูกส่งคืนตามลำดับที่เกิดขึ้นภายในไฟล์ เว้นแต่ว่าตัวเลือก -severity จะได้รับอย่างชัดเจนการตั้งค่า -top อย่างเงียบ ๆ จะทำให้ -severity ถูกตั้งค่าเป็น 1 คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ
-เป็นค่าบูลีน เท่านั้น หากตั้งค่าเป็นค่าที่แท้จริง Perl :: Critic จะเลือกจากนโยบายที่กล่าวถึงในโปรไฟล์ของผู้ใช้เท่านั้น หากตั้งค่าเป็นค่าเท็จ (ซึ่งเป็นค่าเริ่มต้น) จากนั้น Perl :: Critic เลือกจากนโยบายทั้งหมดที่พบในเว็บไซต์ของคุณ คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ
-Profile-Strictness เป็นค่าที่แจกแจงหนึ่งใน "$ profile_strictness_warn" ใน perl :: critic :: utils :: constants (ค่าเริ่มต้น), "$ profile_strictness_fatal" ใน perl :: critic :: utils :: constants และ "$ profile_strictness_quiet" หากตั้งค่าเป็น "$ profile_strictness_fatal" ใน perl :: critic :: utils :: constants, perl :: critic จะทำการเตือนบางอย่างเกี่ยวกับปัญหาที่พบใน .perlcriticrc หรือไฟล์ที่ระบุผ่านทาง เลือก ที่เสียชีวิต ตัวอย่างเช่น Perl :: Critic โดยปกติ warn เฉพาะเกี่ยวกับโปรไฟล์ที่อ้างถึงนโยบายที่ไม่มีอยู่จริง แต่ค่านี้ทำให้สถานการณ์นี้เป็นอันตรายถึงชีวิต ตามลำดับ "$ profile_strictness_quiet" ใน perl :: critic :: utils :: ค่าคงที่ทำให้ perl :: critic ปิดเกี่ยวกับสิ่งเหล่านี้
-Force เป็นค่าบูลีนที่ควบคุมว่า Perl :: Critic สังเกตเห็นคำอธิบายประกอบ "## no critic" ที่มีมนต์ขลังในรหัสของคุณหรือไม่ หากตั้งค่าเป็นค่าที่แท้จริง Perl :: Critic จะวิเคราะห์รหัสทั้งหมด หากตั้งค่าเป็นค่าเท็จ (ซึ่งเป็นค่าเริ่มต้น) Perl :: Critic จะเพิกเฉยต่อรหัสที่ติดแท็กด้วยคำอธิบายประกอบเหล่านี้ ดู "การงอกฎ" สำหรับข้อมูลเพิ่มเติม คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ
-Verbose สามารถเป็นจำนวนเต็มบวก (จาก 1 ถึง 11) หรือข้อกำหนดรูปแบบตัวอักษร ดู Perl :: Critic :: การละเมิดคำอธิบายของข้อกำหนดรูปแบบ คุณสามารถตั้งค่าเริ่มต้นสำหรับตัวเลือกนี้ในไฟล์ .perlcriticrc ของคุณ
-unsafe ชี้นำ Perl :: Critic เพื่ออนุญาตให้ใช้นโยบายที่ถูกทำเครื่องหมายว่าเป็น "ไม่ปลอดภัย" โดยผู้เขียน นโยบายดังกล่าวอาจรวบรวมรหัสที่ไม่น่าเชื่อถือหรือทำสิ่งชั่วร้ายอื่น ๆ
-Color และ -Pager ไม่ได้ใช้โดย Perl :: Critic แต่มีให้เพื่อประโยชน์ของ perlcritic
-การวิพากษ์วิจารณ์ -fatal ไม่ได้ใช้โดย Perl :: Critic แต่มีให้เพื่อประโยชน์ของการวิพากษ์วิจารณ์
-Color-Severity-Highest , -Color-Weeverity-High , -Color-Weeverity- Medium , -Color-Weenity-Low และ -Color-Severity-Lowest ไม่ได้ใช้โดย Perl :: Critic แต่มีให้เพื่อประโยชน์ของ perlcritic แต่ละรายการถูกตั้งค่าเป็นคำว่า :: ข้อกำหนดสี Ansicolor ที่จะใช้เพื่อแสดงการละเมิดความรุนแรงที่สอดคล้องกัน
-files-with-violations และ -files-without-violations ไม่ได้ใช้โดย Perl :: Critic แต่มีให้เพื่อประโยชน์ของ perlcritic เพื่อให้เกิดเฉพาะชื่อไฟล์ที่เกี่ยวข้องที่จะแสดง
critique( $source_code )
รัน $source_code ผ่านเอ็นจิ้น Perl :: Critic โดยใช้นโยบายทั้งหมดที่โหลดลงในเอ็นจิ้นนี้ หาก $source_code เป็นการอ้างอิงสเกลาร์แสดงว่าจะถือเป็นสตริงของรหัส Perl จริง หาก $source_code เป็นการอ้างอิงถึงอินสแตนซ์ของเอกสาร PPI :: ดังนั้นอินสแตนซ์นั้นจะถูกใช้โดยตรง มิฉะนั้นจะถือว่าเป็นพา ธ ไปยังไฟล์ท้องถิ่นที่มีรหัส Perl วิธีนี้ส่งคืนรายการของ Perl :: Critic :: Objects การละเมิดสำหรับการละเมิดนโยบายที่โหลดแต่ละครั้ง รายการถูกจัดเรียงตามลำดับที่การละเมิดปรากฏในรหัส หากไม่มีการละเมิดวิธีนี้จะส่งคืนรายการที่ว่างเปล่า
add_policy( -policy => $policy_name, -params => %param_hash )
สร้างวัตถุนโยบายและโหลดลงในนักวิจารณ์นี้ หากวัตถุไม่สามารถสร้างอินสแตนซ์ได้มันจะทำให้เกิดข้อยกเว้นที่ร้ายแรง มิฉะนั้นจะส่งคืนการอ้างอิงไปยังนักวิจารณ์นี้
-policy เป็นชื่อของ Perl :: Critic :: โมดูลย่อยนโยบาย ส่วน 'Perl::Critic::Policy' ของชื่อสามารถละเว้นได้เพื่อความกะทัดรัด ข้อโต้แย้งนี้เป็นสิ่งจำเป็น
-Params เป็นตัวเลือกอ้างอิงถึงแฮชของพารามิเตอร์นโยบาย เนื้อหาของการอ้างอิงแฮชนี้จะถูกส่งผ่านไปยังตัวสร้างของโมดูลนโยบาย ดูเอกสารประกอบในโมดูลนโยบายที่เกี่ยวข้องสำหรับคำอธิบายของอาร์กิวเมนต์ที่สนับสนุน
policies()
ส่งคืนรายการที่มีการอ้างอิงไปยังวัตถุนโยบายทั้งหมดที่โหลดลงในเอ็นจิ้นนี้ วัตถุจะอยู่ในลำดับที่พวกเขาโหลด
config()
ส่งคืนวัตถุ Perl :: Critic :: Config ที่สร้างขึ้นหรือมอบให้กับนักวิจารณ์คนนี้
statistics()
ส่งคืนวัตถุ Perl :: Critic :: สถิติที่สร้างขึ้นสำหรับนักวิจารณ์คนนี้ วัตถุสถิติสะสมข้อมูลสำหรับไฟล์ทั้งหมดที่วิเคราะห์โดยนักวิจารณ์นี้
สำหรับคนที่ต้องการมีอินเทอร์เฟซที่ใช้งานได้วิธี critique สามารถส่งออกตามคำขอและเรียกว่าเป็นฟังก์ชันคงที่ หากอาร์กิวเมนต์แรกคือ Hashref เนื้อหาของมันจะถูกใช้เพื่อสร้างวัตถุ Perl :: Critic ใหม่ภายใน กุญแจของแฮชนั้นควรจะเหมือนกับที่ได้รับการสนับสนุนโดยวิธี Perl::Critic::new() นี่คือตัวอย่างบางส่วน:
use Perl::Critic qw(critique);
# Use default parameters...
@violations = critique( $some_file );
# Use custom parameters...
@violations = critique( {-severity => 2}, $some_file );
# As a one-liner
%> perl -MPerl::Critic=critique -e 'print critique(shift)' some_file.pm
ขณะนี้ไม่มีการสนับสนุนวัตถุอื่นใดในขณะนี้เป็นฟังก์ชั่นคงที่ ขอโทษ.
การตั้งค่าส่วนใหญ่สำหรับ Perl :: Critic และแต่ละโมดูลนโยบายสามารถควบคุมได้ด้วยไฟล์การกำหนดค่า ไฟล์การกำหนดค่าเริ่มต้นเรียกว่า .perlcriticrc Perl :: Critic จะค้นหาไฟล์นี้ในไดเรกทอรีปัจจุบันก่อนแล้วในไดเรกทอรีโฮมโฮมของคุณ หรือคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PERLCRITIC เพื่อชี้ไปที่ไฟล์อื่นอย่างชัดเจนในตำแหน่งอื่น หากไม่มีไฟล์เหล่านี้อยู่และตัวเลือก -profile จะไม่ถูกมอบให้กับคอนสตรัคเตอร์ดังนั้นโมดูลทั้งหมดที่พบใน Perl :: Critic :: Namespace นโยบายจะโหลดด้วยการกำหนดค่าเริ่มต้น
รูปแบบของไฟล์การกำหนดค่าเป็นชุดของบล็อกสไตล์ ini ที่มีคู่คีย์-ค่าคั่นด้วย '=' ความคิดเห็นควรเริ่มต้นด้วย '#' และสามารถวางบนบรรทัดแยกต่างหากหรือหลังคู่ชื่อชื่อหากคุณต้องการ
การตั้งค่าเริ่มต้นสำหรับ Perl :: Critic สามารถตั้งค่า ก่อนบล็อกชื่อแรก ตัวอย่างเช่นการวางสิ่งเหล่านี้หรือทั้งหมดที่ด้านบนของไฟล์การกำหนดค่าของคุณจะตั้งค่าเริ่มต้นสำหรับอาร์กิวเมนต์คอนสตรัคเตอร์ที่สอดคล้องกัน
severity = 3 #Integer or named level
only = 1 #Zero or One
force = 0 #Zero or One
verbose = 4 #Integer or format spec
top = 50 #A positive integer
theme = (pbp || security) && bugs #A theme expression
include = NamingConventions ClassHierarchies #Space-delimited list
exclude = Variables Modules::RequirePackage #Space-delimited list
criticism-fatal = 1 #Zero or One
color = 1 #Zero or One
allow-unsafe = 1 #Zero or One
pager = less #pager to pipe output to
ส่วนที่เหลือของไฟล์กำหนดค่าเป็นชุดของบล็อกเช่นนี้:
[Perl::Critic::Policy::Category::PolicyName]
severity = 1
set_themes = foo bar
add_themes = baz
maximum_violations_per_document = 57
arg1 = value1
arg2 = value2
Perl::Critic::Policy::Category::PolicyName เป็นชื่อเต็มของโมดูลที่ใช้นโยบาย โมดูลนโยบายที่แจกจ่ายด้วย Perl :: Critic ได้ถูกจัดกลุ่มเป็นหมวดหมู่ตามสารบัญในหนังสือ แนวปฏิบัติที่ดีที่สุด ของ Damian Conway เพื่อความกะทัดรัดคุณสามารถละเว้นส่วน 'Perl::Critic::Policy' ของชื่อโมดูล
severity คือระดับความสำคัญที่คุณต้องการกำหนดให้กับนโยบาย โมดูลนโยบายทั้งหมดถูกกำหนดด้วยค่าความรุนแรงเริ่มต้นตั้งแต่ 1 (รุนแรงน้อยที่สุด) ถึง 5 (รุนแรงที่สุด) อย่างไรก็ตามคุณอาจไม่เห็นด้วยกับความรุนแรงเริ่มต้นและเลือกที่จะให้ความรุนแรงที่สูงขึ้นหรือต่ำกว่าตามปรัชญาการเข้ารหัสของคุณเอง คุณสามารถตั้งค่า severity เป็นจำนวนเต็มตั้งแต่ 1 ถึง 5 หรือใช้หนึ่งในชื่อที่เทียบเท่า:
SEVERITY NAME ...is equivalent to... SEVERITY NUMBER
----------------------------------------------------
gentle 5
stern 4
harsh 3
cruel 2
brutal 1
ชื่อสะท้อนให้เห็นถึงการวิพากษ์วิจารณ์รหัสอย่างรุนแรง: คำวิจารณ์ gentle รายงานเพียงการละเมิดที่รุนแรงที่สุดและอื่น ๆ ลงไปสู่การวิพากษ์วิจารณ์ brutal ซึ่งรายงานแม้แต่การละเมิดเล็กน้อยที่สุด
set_themes ตั้งค่าธีมสำหรับนโยบายและแทนที่ชุดรูปแบบเริ่มต้น อาร์กิวเมนต์เป็นสตริงของคำว่าตัวอักษรและตัวเลขที่มีช่องว่างระหว่างกันอย่างน้อยหนึ่งคำ ชุดรูปแบบเป็นตัวพิมพ์ใหญ่ ดู "ธีมนโยบาย" สำหรับข้อมูลเพิ่มเติม
add_themes ต่อท้ายธีมเริ่มต้นสำหรับนโยบายนี้ อาร์กิวเมนต์เป็นสตริงของคำที่คั่นด้วยช่องว่างอย่างน้อยหนึ่งคำ ชุดรูปแบบเป็นกรณีที่ไม่รู้สึก ดู "ธีมนโยบาย" สำหรับข้อมูลเพิ่มเติม
maximum_violations_per_document จำกัด จำนวนการละเมิดนโยบายจะส่งคืนเอกสารที่กำหนด นโยบายบางอย่างมีขีด จำกัด เริ่มต้น ดูเอกสารสำหรับนโยบายส่วนบุคคลเพื่อดูว่ามีหนึ่งหรือไม่ หากต้องการบังคับให้นโยบายไม่มีขีด จำกัด ให้ระบุ "no_limit" หรือสตริงว่างสำหรับค่าของพารามิเตอร์นี้
คู่คีย์-ค่าที่เหลือคือพารามิเตอร์การกำหนดค่าที่จะถูกส่งผ่านไปยังตัวสร้างสำหรับนโยบายนั้น ตัวสร้างสำหรับวัตถุนโยบายส่วนใหญ่ไม่สนับสนุนข้อโต้แย้งและสิ่งที่ควรมีค่าเริ่มต้นที่สมเหตุสมผล ดูเอกสารเกี่ยวกับโมดูลนโยบายที่เหมาะสมสำหรับรายละเอียดเพิ่มเติม
แทนที่จะนิยามใหม่ความรุนแรงสำหรับนโยบายที่กำหนดคุณสามารถปิดการใช้งานนโยบายได้อย่างสมบูรณ์โดยการเตรียม '-' ไปยังชื่อของโมดูลในไฟล์การกำหนดค่าของคุณ ในลักษณะนี้นโยบายจะไม่ถูกโหลดโดยไม่คำนึงถึง - -severity ที่มอบให้กับ Perl :: Critic Cressuffructor
การกำหนดค่าอย่างง่ายอาจมีลักษณะเช่นนี้:
#--------------------------------------------------------------
# I think these are really important, so always load them
[TestingAndDebugging::RequireUseStrict]
severity = 5
[TestingAndDebugging::RequireUseWarnings]
severity = 5
#--------------------------------------------------------------
# I think these are less important, so only load when asked
[Variables::ProhibitPackageVars]
severity = 2
[ControlStructures::ProhibitPostfixControls]
allow = if unless # My custom configuration
severity = cruel # Same as "severity = 2"
#--------------------------------------------------------------
# Give these policies a custom theme. I can activate just
# these policies by saying `perlcritic -theme larry`
[Modules::RequireFilenameMatchesPackage]
add_themes = larry
[TestingAndDebugging::RequireTestLabels]
add_themes = larry curly moe
#--------------------------------------------------------------
# I do not agree with these at all, so never load them
[-NamingConventions::Capitalization]
[-ValuesAndExpressions::ProhibitMagicNumbers]
#--------------------------------------------------------------
# For all other Policies, I accept the default severity,
# so no additional configuration is required for them.
สำหรับตัวอย่างการกำหนดค่าเพิ่มเติมดูไฟล์ perlcriticrc ที่รวมอยู่ในไดเรกทอรี examples นี้ของการแจกแจงนี้
การกำหนดค่า Perl :: Critic ของ Damian Conway นั้นรวมอยู่ในการกระจายนี้เป็น examples/perlcriticrc-conway
โมดูลนโยบายจำนวนมากถูกแจกจ่ายด้วย Perl :: Critic พวกเขาได้รับการอธิบายสั้น ๆ ในเอกสารสหาย Perl :: Critic :: Policysummary และในรายละเอียดเพิ่มเติมในแต่ละโมดูลเอง พูดว่า "perlcritic -doc PATTERN" เพื่อดู perldoc สำหรับโมดูลนโยบายทั้งหมดที่ตรงกับ regex m/PATTERN/ixms
มีการแจกแจงนโยบายเพิ่มเติมจำนวนมากเกี่ยวกับ CPAN หาก Perl :: Critic ไม่มีนโยบายที่คุณต้องการบางคนอาจเขียนไว้แล้ว ดูส่วน "ดูเพิ่มเติม" ด้านล่างสำหรับรายการการแจกแจงเหล่านี้
แต่ละนโยบายจะถูกกำหนดด้วย "ธีม" อย่างน้อยหนึ่งชุด ชุดรูปแบบสามารถใช้เพื่อสร้างกลุ่มนโยบายโดยพลการ พวกเขามีวัตถุประสงค์เพื่อให้กลไกทางเลือกสำหรับการเลือกชุดนโยบายที่คุณต้องการ ตัวอย่างเช่นคุณอาจต้องการปิดการใช้งานชุดย่อยบางอย่างเมื่อวิเคราะห์โปรแกรมทดสอบ ในทางกลับกันคุณอาจต้องการเปิดใช้งานเฉพาะชุดย่อยของนโยบายเมื่อวิเคราะห์โมดูล
นโยบายที่จัดส่งด้วย Perl :: นักวิจารณ์ได้ถูกแบ่งออกเป็นธีมดังต่อไปนี้ นี่เป็นเพียงความพยายามของเราในการจัดกลุ่มตรรกะพื้นฐาน คุณมีอิสระที่จะคิดค้นธีมใหม่ที่เหมาะกับความต้องการของคุณ
THEME DESCRIPTION
--------------------------------------------------------------------------
core All policies that ship with Perl::Critic
pbp Policies that come directly from "Perl Best Practices"
bugs Policies that that prevent or reveal bugs
certrec Policies that CERT recommends
certrule Policies that CERT considers rules
maintenance Policies that affect the long-term health of the code
cosmetic Policies that only have a superficial effect
complexity Policies that specifically relate to code complexity
security Policies that relate to security issues
tests Policies that are specific to test programs
นโยบายใด ๆ อาจพอดีกับหลายธีม พูดว่า "perlcritic -list" เพื่อรับรายชื่อนโยบายที่มีอยู่ทั้งหมดและธีมที่เกี่ยวข้องกับแต่ละรายการ นอกจากนี้คุณยังสามารถเปลี่ยนธีมสำหรับนโยบายใด ๆ ในไฟล์ .perlcriticrc ของคุณ ดูส่วน "การกำหนดค่า" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น
การใช้ตัวเลือก -theme คุณสามารถสร้างกฎที่ซับซ้อนโดยพลการซึ่งกำหนดนโยบายที่จะโหลด ลำดับความสำคัญเหมือนกับรหัส Perl ปกติและคุณสามารถใช้วงเล็บเพื่อบังคับใช้ความสำคัญได้เช่นกัน ผู้ให้บริการที่ได้รับการสนับสนุนคือ:
Operator Alternative Example
-----------------------------------------------------------------
&& and 'pbp && core'
|| or 'pbp || (bugs && security)'
! not 'pbp && ! (portability || complexity)'
ชื่อธีมเป็นตัวพิมพ์ใหญ่ หาก -theme ถูกตั้งค่าเป็นสตริงที่ว่างเปล่ามันจะประเมินว่าเป็นนโยบายทั้งหมดที่เป็นจริง
Perl :: Critic ใช้วิธีการที่ยากลำบากในการใช้รหัสของคุณ: ไม่ว่าคุณจะปฏิบัติตามหรือไม่ ในโลกแห่งความเป็นจริงมันไม่ได้เป็นประโยชน์เสมอไป (หรือเป็นไปได้) ที่จะปฏิบัติตามมาตรฐานการเข้ารหัสอย่างเต็มที่ ในกรณีเช่นนี้ควรแสดงให้เห็นว่าคุณกำลังละเมิดมาตรฐานอย่างรู้เท่าทันและคุณมีเหตุผลที่ดี (DGR) สำหรับการทำเช่นนั้น
เพื่อช่วยในสถานการณ์เหล่านั้นคุณสามารถกำกับ Perl :: Critic เพื่อเพิกเฉยต่อบรรทัดหรือบล็อกของรหัสโดยใช้คำอธิบายประกอบ:
require 'LegacyLibaray1.pl'; ## no critic
require 'LegacyLibrary2.pl'; ## no critic
for my $element (@list) {
## no critic
$foo = ""; #Violates 'ProhibitEmptyQuotes'
$barf = bar() if $foo; #Violates 'ProhibitPostfixControls'
#Some more evil code...
## use critic
#Some good code...
do_something($_);
}
คำอธิบายประกอบ "## no critic" โดยตรง Perl :: นักวิจารณ์เพื่อเพิกเฉยต่อบรรทัดที่เหลือของรหัสจนกว่าจะพบคำอธิบายประกอบ "## use critic" หากคำอธิบายประกอบ "## no critic" อยู่ในบรรทัดเดียวกับคำสั่งรหัสแล้วจะมองข้ามรหัสบรรทัดนั้นเท่านั้น หากต้องการนำ Perlcritic ออกจากคำอธิบายประกอบ "## no critic" ให้ใช้ตัวเลือก --force
คำอธิบายประกอบ "## no critic" เปลือยเปล่าปิดใช้งานนโยบายที่ใช้งานอยู่ทั้งหมด หากคุณต้องการปิดใช้งานเฉพาะนโยบายเฉพาะให้เพิ่มรายการชื่อนโยบายเป็นอาร์กิวเมนต์เช่นเดียวกับที่คุณต้องการสำหรับ "no strict" หรือ "no warnings" Pragmas ตัวอย่างเช่นสิ่งนี้จะปิดการใช้งานนโยบาย ProhibitEmptyQuotes และ ProhibitPostfixControls จนกว่าจะสิ้นสุดบล็อกหรือจนกว่าจะถึงคำอธิบายประกอบ "## use critic" ต่อไป
## no critic (EmptyQuotes, PostfixControls)
# Now exempt from ValuesAndExpressions::ProhibitEmptyQuotes
$foo = "";
# Now exempt ControlStructures::ProhibitPostfixControls
$barf = bar() if $foo;
# Still subjected to ValuesAndExpression::RequireNumberSeparators
$long_int = 10000000000;
เนื่องจากชื่อนโยบายถูกจับคู่กับข้อโต้แย้ง "## no critic" เป็นการแสดงออกปกติคุณสามารถย่อชื่อนโยบายหรือปิดการใช้งานนโยบายทั้งหมดในครอบครัวในนัดเดียวเช่นนี้:
## no critic (NamingConventions)
# Now exempt from NamingConventions::Capitalization
my $camelHumpVar = 'foo';
# Now exempt from NamingConventions::Capitalization
sub camelHumpSub {}
รายการอาร์กิวเมนต์จะต้องอยู่ในวงเล็บหรือวงเล็บและต้องมี barewords ที่คั่นด้วยเครื่องหมายจุลภาคอย่างน้อยหนึ่งรายการ (เช่นอย่าใช้เครื่องหมายคำพูด) คำอธิบายประกอบ "## no critic" สามารถซ้อนกันได้และนโยบายที่ตั้งชื่อโดยคำอธิบายประกอบภายในจะถูกปิดใช้งานพร้อมกับที่ปิดการใช้งานคำอธิบายประกอบด้านนอกแล้ว
นโยบายบางอย่างเช่น Subroutines::ProhibitExcessComplexity ใช้กับบล็อกทั้งหมดของรหัส ในกรณีเหล่านั้นคำอธิบายประกอบ "## no critic" จะต้องปรากฏขึ้นในบรรทัดที่มีการรายงานการละเมิด ตัวอย่างเช่น:
sub complicated_function { ## no critic (ProhibitExcessComplexity)
# Your code here...
}
นโยบายเช่น Documentation::RequirePodSections ใช้กับเอกสารทั้งหมดซึ่งในกรณีนี้มีการรายงานการละเมิดที่บรรทัดที่ 1
ใช้คุณสมบัตินี้อย่างชาญฉลาด "## no critic" ควรใช้คำอธิบายประกอบในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้หรือเฉพาะในแต่ละบรรทัดของรหัส และคุณควรเฉพาะเจาะจงที่สุดเท่าที่จะเป็นไปได้เกี่ยวกับนโยบายที่คุณต้องการปิดการใช้งาน (เช่นไม่เคยใช้ "## no critic" ) หาก Perl :: Critic บ่นเกี่ยวกับรหัสของคุณลองหาวิธีแก้ปัญหาที่สอดคล้องก่อนที่จะหันไปใช้คุณสมบัตินี้
มาตรฐานการเข้ารหัสเป็นเรื่องส่วนตัวและเป็นส่วนตัวอย่างมาก เป้าหมายของ Perl :: Critic คือการช่วยให้คุณเขียนโค้ดที่สอดคล้องกับชุดของแนวปฏิบัติที่ดีที่สุด เป้าหมายหลักของเราคือการไม่กำหนดวิธีการปฏิบัติเหล่านั้น แต่เป็นการดำเนินการตามแนวทางปฏิบัติที่ผู้อื่นค้นพบ ในที่สุดคุณทำกฎ - Perl :: Critic เป็นเพียงเครื่องมือสำหรับการส่งเสริมความสอดคล้อง หากมีนโยบายที่คุณคิดว่ามีความสำคัญหรือว่าเรามองข้ามเราจะขอบคุณมากสำหรับการมีส่วนร่วมหรือคุณสามารถโหลดชุดนโยบายส่วนตัวของคุณเองลงใน Perl :: Critic
การออกแบบแบบแยกส่วนของ Perl :: นักวิจารณ์มีวัตถุประสงค์เพื่ออำนวยความสะดวกในการเพิ่มนโยบายใหม่ คุณจะต้องมีความเข้าใจเกี่ยวกับ PPI แต่โมดูลนโยบายส่วนใหญ่ค่อนข้างตรงไปตรงมาและต้องใช้รหัสประมาณ 20 บรรทัดเท่านั้น โปรดดูไฟล์ Perl :: Critic :: ผู้พัฒนาที่รวมอยู่ในการแจกจ่ายนี้สำหรับการสาธิตทีละขั้นตอนเกี่ยวกับวิธีการสร้างโมดูลนโยบายใหม่
หากคุณพัฒนาโมดูลนโยบายใหม่ ๆ อย่าลังเลที่จะส่งพวกเขาไปที่ <[email protected]> และฉันจะยินดีที่จะพิจารณานำพวกเขาเข้าไปในการกระจายของนักวิจารณ์ Perl :: หรือหากคุณต้องการทำงานในโครงการ Perl :: Critic โดยตรงคุณสามารถแยกที่เก็บของเราได้ที่ https://github.com/perl-critic/perl-critic.git
ทีมนักวิจารณ์ Perl :: มีให้เช่า หากองค์กรของคุณมีมาตรฐานการเข้ารหัสของตัวเองเราสามารถสร้างนโยบายที่กำหนดเองเพื่อบังคับใช้แนวทางท้องถิ่นของคุณ หรือหากฐานรหัสของคุณมีแนวโน้มที่จะมีรูปแบบข้อบกพร่องเฉพาะเราสามารถออกแบบนโยบายที่จะช่วยให้คุณจับข้อบกพร่องที่มีราคาแพงเหล่านั้น ก่อน ที่จะเข้าสู่การผลิต เพื่อหารือเกี่ยวกับความต้องการของคุณกับทีมนักวิจารณ์ Perl :: เพียงติดต่อ <[email protected]>
Perl :: Critic ต้องใช้โมดูลต่อไปนี้:
B :: คำหลัก
config :: tiny
ข้อยกเว้น :: คลาส
ไฟล์ :: ข้อมูลจำเพาะ
ไฟล์ :: spec :: unix
ไฟล์ :: ไหน
รายการ :: Someutils
รายการ :: Util
โมดูล :: สามารถทำได้
perl :: เป็นระเบียบ
POD :: คาถา
PPI
pod :: plaintext
POD :: SELECT
POD :: การใช้งาน
อย่างอ่านอย่างเดียว
สเกลาร์ :: util
สตริง :: รูปแบบ
เทอม :: Ansicolor
ข้อความ :: parsewords
รุ่น
คุณได้รับการสนับสนุนให้สมัครรับจดหมายส่งจดหมายสาธารณะที่ https://groups.google.com/d/forum/perl-critic อย่างน้อยหนึ่งสมาชิกของทีมพัฒนามักจะแขวนอยู่ใน IRC: //irc.perl.org/#perlcritic และคุณสามารถติดตาม Perl :: Critic บน Twitter ที่ https://twitter.com/perlcritic
มีการแจกแจงนโยบายเพิ่มเติมจำนวนมาก มีอยู่ไม่กี่รายการที่นี่:
Perl :: Critic :: More
Perl :: Critic :: Bangs
Perl :: Critic :: LAX
perl :: critic :: acrictersubs
perl :: critic :: swift
perl :: critic :: tics
การแจกแจงเหล่านี้ช่วยให้คุณใช้ Perl :: Critic ในการทดสอบหน่วยของคุณ:
ทดสอบ :: perl :: นักวิจารณ์
ทดสอบ :: Perl :: Critic :: Progressive
นอกจากนี้ยังมีการกระจายที่จะติดตั้งโมดูลที่เกี่ยวข้องกับ Perl :: Critic ทั้งหมดที่รู้จักกันในทีมพัฒนา:
งาน :: perl :: นักวิจารณ์
การตรวจสอบรหัส Perl เป็นเรื่องยากสำหรับมนุษย์เครื่องจักรเพียงอย่างเดียว หากคุณพบข้อบกพร่องใด ๆ โดยเฉพาะอย่างยิ่งเท็จ-บวกหรือเท็จ-นิเวศวิทยาจาก perl :: critic :: นโยบายโปรดส่งพวกเขาที่ https://github.com/perl-critic/perl-critic/issues ขอบคุณ.
Adam Kennedy - สำหรับการสร้าง PPI หัวใจและวิญญาณของ Perl :: Critic
Damian Conway - สำหรับการเขียน แนวปฏิบัติที่ดีที่สุดของ Perl ในที่สุด :)
Chris Dolan - สำหรับการมีส่วนร่วมคุณสมบัติและโมดูลนโยบายที่ดีที่สุด
Andy Lester-Wise Sage และ Master of All-Things-testing
Elliot Shank - ประหลาดคุณภาพที่ประกาศตัวเอง
Giuseppe Maxia - สำหรับความคิดที่ยอดเยี่ยมและการให้กำลังใจในเชิงบวกทั้งหมด
และชารอนภรรยาของฉัน - สำหรับการเข้าร่วมการประชุมรหัสตลอดทั้งคืนของฉัน
ขอขอบคุณมูลนิธิ Perl ที่ให้ทุนสนับสนุนโครงการของ Chris Dolan ในการดำเนินนโยบาย PBP ยี่สิบ http://www.perlfoundation.org/april_1_2007_new_grant_awards
ขอบคุณรายการเครื่องซักผ้าที่ไม่สมบูรณ์ของคนที่มีส่วนร่วมใน Perl :: นักวิจารณ์ไม่ทางใดก็ทางหนึ่ง: Gregory Oschwald, Mike O'Regan, Tom Hukins, Omer Gazit, Evan Zacks, Paul Howarth, Sawyer X, Christian Walde, Dave Rolsky, Jakub Wilk Sebastian Paaske Tørholm, Stuart A Johnston, Dan Book, Steven Humphrey, James Raspass, Nick Tonkin, Harrison Katz, Douglas Sims, Mark Fowler, Alan Berndt, Neil Bowers, Sergey Romanov, Gabor Szabo Aubert, Dave Cross, Anirvan Chatterjee, Todd Rinaldo, Graham Ollis, Karen Etheridge, Jonas Brømsø, Olaf Alders, Jim Keenan, Slaven Rezić, Szymon Nieznański
Jeffrey Ryan Thalhammer [email protected]
ลิขสิทธิ์ (C) 2005-2018 ระบบซอฟต์แวร์จินตนาการ สงวนลิขสิทธิ์
โปรแกรมนี้เป็นซอฟต์แวร์ฟรี คุณสามารถแจกจ่ายซ้ำและ/หรือแก้ไขภายใต้ข้อกำหนดเดียวกันกับ Perl เอง ข้อความทั้งหมดของใบอนุญาตนี้สามารถพบได้ในไฟล์ใบอนุญาตที่รวมอยู่ในโมดูลนี้