
Perl :: Critic - Critique Perl Source Code لأفضل الممارسات.
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 :: وحدات السياسة التي تحاول فرض إرشادات الترميز المختلفة. تعتمد معظم وحدات السياسة على أفضل الممارسات في كتاب داميان كونواي. ومع ذلك ، لا يقتصر Perl :: Critic على PBP وسيؤيد حتى السياسات التي تتناقض مع كونواي. يمكنك تمكين هذه السياسات وتعطيلها وتخصيصها من خلال واجهة Perl :: Critic. يمكنك أيضًا إنشاء وحدات سياسة جديدة تناسب أذواقك.
للحصول على واجهة سطر الأوامر إلى Perl :: Critic ، راجع الوثائق الخاصة بـ PerlCritic. إذا كنت ترغب في دمج Perl :: Critic مع عملية الإنشاء الخاصة بك ، فإن Test :: Perl :: Critic يوفر واجهة مناسبة لبرامج الاختبار. أيضًا ، Test :: Perl :: Critic :: Progressive مفيد لتطبيق معايير الترميز تدريجياً على الكود القديم. للاطلاع على الراحة النهائية (على حساب بعض المرونة) ، انظر إلى النقد.
إذا كنت ترغب في تجربة Perl :: Critic دون تثبيت أي شيء ، فهناك خدمة ويب متوفرة على http://perlcritic.com. لا تدعم خدمة الويب بعد جميع ميزات التكوين المتوفرة في API Perl :: Critic ، ولكن يجب أن تمنحك فكرة جيدة عما تفعله.
أيضًا ، يتضمن ActivePerl واجهة رسومية بقعة للغاية إلى perl-critic تسمى perlcritic-gui . يمكنك الحصول على إصدار مجتمع مجاني من ActivePerl من http://www.activestate.com.
Perl :: Critic يعمل على Perl مرة أخرى إلى Perl 5.10.1. يعتمد على وحدة PPI للقيام بالعمل الثقيل المتمثل في تحليل بيرل.
تعتبر الوحدة 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 :: Config ، لكنني وصفتها هنا أيضًا. يمكن تحديد القيمة الافتراضية لجميع الوسائط في ملف .perlcriticrc . راجع قسم "التكوين" لمزيد من المعلومات حول ذلك. جميع الوسائط هي أزواج اختيارية قيمة المفاتيح على النحو التالي:
-Profile هو مسار إلى ملف التكوين. إذا لم يتم تعريف $FILE ، فإن Perl :: Critic :: Config يحاول العثور على ملف تكوين .perlcriticrc في الدليل الحالي ، ثم في الدليل الرئيسي. بدلاً من ذلك ، يمكنك تعيين متغير البيئة PERLCRITIC للإشارة إلى ملف في مكان آخر. إذا تعذر العثور على ملف التكوين ، أو إذا كان $FILE عبارة عن سلسلة فارغة ، فسيتم تحميل جميع السياسات بتكوينها الافتراضي. انظر "التكوين" لمزيد من المعلومات.
-الشهرة هو الحد الأدنى لمستوى الشدة. سيتم تطبيق وحدات السياسة التي لديها شدة أكبر من $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 . راجع قسم "موضوعات السياسة" لمزيد من المعلومات حول الموضوعات.
-include هو إشارة إلى قائمة @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 :: الناقد على وحدات سياسة RequireUseStrict و ProhibitNoStrict على الرغم من أن لديهم مستوى شدة أكبر من 1. يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc . يمكنك أيضًا استخدام -exclude بالتزامن مع خيار -include . لاحظ أن -exclude له الأسبقية -include حالة تطابق السياسة على كلا الأنماط.
-single-policy هو PATTERN سلسلة. سيتم استخدام سياسة واحدة فقط تتطابق مع m/$PATTERN/ixms . سيتم استبعاد السياسات التي لا تتطابق. هذا الخيار له الأسبقية على -severity ، -theme ، -include ، -exclude ، و -only . يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc .
-صوفية هي الحد الأقصى لعدد الانتهاكات التي يجب العودة إليها عند تصنيفها بمستويات شدتها. يجب أن يكون هذا صحيحًا إيجابيًا. لا يزال يتم إرجاع الانتهاكات بالترتيب الذي تحدث فيه داخل الملف. ما لم يتم إعطاء خيار -severity بشكل صريح ، فإن الإعداد -top في صمت في ضبط -severity على 1. يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc الخاص بك.
-فقط قيمة منطقية. إذا تم ضبطها على قيمة حقيقية ، فإن Perl :: Critic سيختار فقط من بين السياسات المذكورة في ملف تعريف المستخدم. إذا تم تعيينه على قيمة خاطئة (وهو الافتراضي) ، فإن Perl :: Critic يختار من جميع السياسات التي يجدها في موقعك. يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc .
-البروفيل ، هو قيمة مُعدة ، واحدة من "$ profile_strictness_warn" في perl :: critic :: utils :: constants (الافتراضي) ، "$ profile_strictness_fatal" في perl :: critic :: utils :: constants ، و "$ profile_strictness_quiet" في perl :: utils :: utils :: utils: إذا تم تعيينه على "$ profile_strictness_fatal" في Perl :: Critic :: Utils :: Constants ، Perl :: سوف يقوم الناقد ببعض التحذيرات حول المشكلات الموجودة في .perlcriticrc أو ملف محدد عبر الخيار المميت . على سبيل المثال ، warn Perl :: الناقد عادةً فقط من الملفات الشخصية التي تشير إلى السياسات غير الموجودة ، لكن هذه القيمة تجعل هذا الموقف قاتلاً. في المقابل ، "$ profile_strictness_quiet" في Perl :: Critic :: Utils :: Constants يجعل بيرل :: الناقد يصمت حول هذه الأشياء.
-الأفراد هي قيمة منطقية تتحكم في ما إذا كان Perl :: Critic يلاحظ التعليقات التوضيحية السحرية "## no critic" في الكود الخاص بك. إذا تم تعيينه على قيمة حقيقية ، فإن Perl :: Critic سيقوم بتحليل جميع الكود. إذا تم تعيينه على قيمة خاطئة (وهو الافتراضي) ، فسيتجاهل Critic Critic الكود الموسومة بهذه التعليقات التوضيحية. انظر "ثني القواعد" لمزيد من المعلومات. يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc .
يمكن أن يكون verbose عددًا صحيحًا إيجابيًا (من 1 إلى 11) ، أو مواصفات التنسيق الحرفي. انظر Perl :: Critic :: انتهاك لشرح مواصفات التنسيق. يمكنك تعيين القيمة الافتراضية لهذا الخيار في ملف .perlcriticrc .
-لا يوجه المكلف ببيرل :: الناقد للسماح باستخدام السياسات التي تم تمييزها على أنها "غير آمنة" من قبل المؤلف. قد تقوم هذه السياسات بتجميع الكود غير الموثوق به أو القيام بأشياء شائنة أخرى.
لا يتم استخدام Perl :: Color و -pager ولكن يتم توفيره لصالح perlcritic.
-لا يستخدم Perl :: المميت الناقص ، ولكن يتم توفيره لصالح النقد.
-الألوان-عالية ، أعلى ، -sulor-severity-High ، -color-severity- المتوسطة ، والملابس ذات الصديقة المنخفضة ، والألوان ذات المنحدر غير المستخدمة من قبل Perl :: ، ولكن يتم توفيرها لاستفادة من perlcritic. يتم تعيين كل منها على المصطلح :: مواصفات اللون Ansicolor لاستخدامها لعرض انتهاكات الشدة المقابلة.
لا يتم استخدام FILES-With-Violations و -files-Ite-Violations من قبل Perl :: ، ولكن يتم توفيرها لصالح بيرلكريتي ، لتسبب فقط في عرض أسماء الملفات ذات الصلة.
critique( $source_code )
يقوم بتشغيل $source_code من خلال محرك Perl :: Critic باستخدام جميع السياسات التي تم تحميلها في هذا المحرك. إذا كان $source_code هو مرجع عددي ، فسيتم معاملته كسلسلة من رمز perl الفعلي. إذا كان $source_code مرجعًا إلى مثيل من مستند PPI :: ، فسيتم استخدام هذا المثيل مباشرة. خلاف ذلك ، يتم التعامل معها كمسار إلى ملف محلي يحتوي على رمز Perl. هذه الطريقة تُرجع قائمة من Perl :: Critic :: انتهاك الأشياء لكل انتهاك للسياسات المحملة. يتم فرز القائمة بالترتيب الذي تظهر فيه الانتهاكات في القانون. إذا لم تكن هناك انتهاكات ، فإن هذه الطريقة تُرجع قائمة فارغة.
add_policy( -policy => $policy_name, -params => %param_hash )
ينشئ كائن سياسي ويحمله في هذا الناقد. إذا كان لا يمكن إنشاء مثيل للكائن ، فسوف يرمي استثناء قاتلة. خلاف ذلك ، فإنه يعيد إشارة إلى هذا الناقد.
-Policy هو اسم Perl :: Critic :: Policy Subcleass. يمكن حذف جزء 'Perl::Critic::Policy' من الاسم لإيجاز. هذه الحجة مطلوبة.
-Params هي إشارة اختيارية إلى تجزئة من معلمات السياسة. سيتم نقل محتويات مرجع التجزئة إلى مُنشئ وحدة السياسة. راجع الوثائق في وحدة السياسة ذات الصلة للحصول على وصف للوسائط التي تدعمها.
policies()
إرجاع قائمة تحتوي على إشارات إلى جميع كائنات السياسة التي تم تحميلها في هذا المحرك. سوف تكون الكائنات بالترتيب الذي تم تحميله.
config()
إرجاع كائن Perl :: Critic :: Config الذي تم إنشاؤه لهذا الناقد أو أعطى لهذا الناقد.
statistics()
إرجاع كائن Perl :: Critic :: Statistics الذي تم إنشاؤه لهذا الناقد. يتراكم كائن الإحصائيات البيانات لجميع الملفات التي يتم تحليلها من قبل هذا الناقد.
بالنسبة لأولئك الأشخاص الذين يفضلون الحصول على واجهة وظيفية ، يمكن تصدير طريقة critique عند الطلب ويسمى كدالة ثابتة. إذا كانت الوسيطة الأولى هي hashref ، يتم استخدام محتوياتها لبناء كائن جديد perl :: الناقد داخليًا. يجب أن تكون مفاتيح ذلك التجزئة هي نفسها التي تدعمها طريقة 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 :: Policy Pace بتكوينها الافتراضي.
تنسيق ملف التكوين هو سلسلة من كتل INI-style التي تحتوي على أزواج ذات قيمة رئيسية مفصولة بـ '='. يجب أن تبدأ التعليقات بـ "#" ويمكن وضعها على سطر منفصل أو بعد أزواج قيمة الاسم إذا كنت ترغب في ذلك.
يمكن تعيين الإعدادات الافتراضية لـ 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 في فئات وفقًا لجدول المحتويات في أفضل الممارسات في كتاب داميان كونواي. للإيجاز ، يمكنك حذف جزء '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.
قد يبدو التكوين البسيط هكذا:
#--------------------------------------------------------------
# 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 لهذا التوزيع.
تم تضمين تكوين Damian Conway الخاص Perl :: Critic أيضًا في هذا التوزيع كأمثلة examples/perlcriticrc-conway .
يتم توزيع عدد كبير من وحدات السياسة مع Perl :: Critic. يتم وصفها لفترة وجيزة في وثيقة المصاحبة بيرل :: الناقد :: policysummary وبتفاصيل أكثر في الوحدات الفردية نفسها. قل "perlcritic -doc PATTERN" لرؤية perldoc لجميع وحدات السياسة التي تتطابق مع regex m/PATTERN/ixms
هناك عدد من توزيعات سياسات إضافية على CPAN. إذا كان Perl :: Critic لا يحتوي على سياسة تريدها ، فقد يكون أحدهم قد كتبها بالفعل. راجع قسم "انظر أيضًا" أدناه للحصول على قائمة ببعض هذه التوزيعات.
يتم تعريف كل سياسة مع "موضوعات" واحدة أو أكثر. يمكن استخدام الموضوعات لإنشاء مجموعات تعسفية من السياسات. تهدف إلى توفير آلية بديلة لاختيار مجموعة السياسات المفضلة لديك. على سبيل المثال ، قد ترغب في تعطيل مجموعة فرعية معينة من السياسات عند تحليل برامج الاختبار. على العكس ، قد ترغب في تمكين مجموعة فرعية محددة من السياسات فقط عند تحليل الوحدات النمطية.
تم اقتحام السياسات التي تشحن مع Perl :: Critic إلى الموضوعات التالية. هذه مجرد محاولتنا لتوفير بعض المجموعات المنطقية الأساسية. أنت حر في ابتكار موضوعات جديدة تناسب احتياجاتك.
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" توجه بيرل :: الناقد لتجاهل الخطوط المتبقية من التعليمات البرمجية حتى يتم العثور على شرح "## use critic" . إذا كان التعليق التوضيحي "## no critic" على نفس السطر كبيان رمز ، فسيتم التغاضي عن سطر الكود هذا فقط. لتوجيه perlcritic لتجاهل التعليقات التوضيحية "## no critic" ، استخدم خيار --force .
يعطل التعليق التوضيحي "## no critic" جميع السياسات النشطة. إذا كنت ترغب في تعطيل سياسات محددة فقط ، فأضف قائمة بأسماء السياسة كوسيطات ، تمامًا كما تفعل مع pragmas "no strict" أو "no warnings" . على سبيل المثال ، من شأنه أن يعطل سياسات 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 {}
يجب أن تكون قائمة الوسيطة محاطة بين قوسين أو قوسين ويجب أن تحتوي على واحدة أو أكثر من فصايا مفصل الفاصلة (على سبيل المثال لا تستخدم عروض الأسعار). يمكن تداخل التعليقات التوضيحية "## 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 :: Critic إلى تسهيل إضافة سياسات جديدة. ستحتاج إلى الحصول على بعض الفهم لـ PPI ، ولكن معظم وحدات السياسة واضحة جدًا وتتطلب فقط حوالي 20 سطرًا من التعليمات البرمجية. يرجى الاطلاع على ملف Perl :: Critic :: Developer المدرج في هذا التوزيع لإظهار خطوة بخطوة لكيفية إنشاء وحدات سياسة جديدة.
إذا قمت بتطوير أي وحدات سياسية جديدة ، فلا تتردد في إرسالها إلى <[email protected]> وسأكون سعيدًا بالتفكير في وضعها في توزيع Perl :: Critic. أو إذا كنت ترغب في العمل في مشروع Perl :: Critic مباشرة ، فيمكنك أن تتفوق على مستودعنا على https://github.com/perl-critic/perl-critic.git.
فريق Perl :: Critic متاح أيضًا للتأجير. إذا كانت مؤسستك لديها معايير الترميز الخاصة بها ، فيمكننا إنشاء سياسات مخصصة لفرض إرشاداتك المحلية. أو إذا كانت قاعدة الكود الخاصة بك عرضة لنمط عيوب معين ، فيمكننا تصميم سياسات من شأنها أن تساعدك على التقاط تلك العيوب المكلفة قبل أن تدخل في الإنتاج. لمناقشة احتياجاتك مع فريق Perl :: Critic ، فقط اتصل بـ <[email protected]> .
Perl :: Critic يتطلب الوحدات التالية:
ب :: الكلمات الرئيسية
config :: tiny
استثناء :: الفصل
ملف :: المواصفات
ملف :: Spec :: Unix
ملف :: الذي
قائمة :: Someutils
قائمة :: useil
الوحدة النمطية :: قابلة للتوصيل
بيرل :: مرتبة
POD :: تعويذة
مؤشر أسعار المنتجين
POD :: نص عادي
POD :: حدد
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 :: Strictersubs
Perl :: Critic :: Swift
Perl :: Critic :: Tics
تمكنك هذه التوزيعات من استخدام Perl :: Critic في اختبارات وحدتك:
اختبار :: بيرل :: الناقد
اختبار :: Perl :: Critic :: Progressive
هناك أيضًا توزيع من شأنه تثبيت جميع الوحدات النمطية ذات الصلة Perl :: المعروفة بفريق التطوير:
المهمة :: بيرل :: الناقد
إن التدقيق في رمز Perl صعب بالنسبة للبشر ، ناهيك عن الآلات. إذا وجدت أي أخطاء ، وخاصةً ، وخصوصية كاذبة أو مواطنين خاطئين من Perl :: Critic :: Policy ، يرجى إرسالها على https://github.com/perl-critic/perl-critic/issues. شكرًا.
آدم كينيدي - لإنشاء مؤشر أسعار المنتجين ، قلب وروح بيرل :: الناقد.
داميان كونواي - لكتابة أفضل الممارسات بيرل ، أخيرًا :)
كريس دولان - للمساهمة في أفضل الميزات ووحدات السياسة.
آندي ليستر-حكيم الحكيم وسيادة جميع الأشياء.
Elliot Shank - غريب الجودة المعلنة ذاتيا.
Giuseppe Maxia - لجميع الأفكار العظيمة والتشجيع الإيجابي.
وشارون ، زوجتي - لطرح جلسات رمز لي طوال الليل.
شكرًا أيضًا لمؤسسة Perl لتقديم منحة لدعم مشروع كريس دولان لتنفيذ عشرين سياسات PBP. http://www.perlfoundation.org/april_1_2007_new_grant_awards
شكراً أيضًا لهذه قائمة الغسيل غير المكتملة من الأشخاص الذين ساهموا في Perl :: Critic بطريقة ما: Gregory Oschwald ، Mike O'Regan ، Tom Hukins ، Omer Gazit ، Evan Zacks ، Paul Howarth ، Sawyer X ، Christian Walde ، Dave Rolsky ، Jakub Wilk ، Roy Ivy Iii ، Balhatchet ، 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 ، Graham Knop ، Mike Eldrick. غيوم أوبرت ، ديف كروس ، أنيرفان تشاترجي ، تود رينالدو ، جراهام أوليس ، كارين إيثيرج ، جوناس برمسو ، أولاف ألدرز ، جيم كينان ، سلافن ريزيتش ، سزيمون نيزانسكي.
جيفري ريان تالهامر [email protected]
حقوق الطبع والنشر (C) 2005-2018 أنظمة البرمجيات الخيالية. جميع الحقوق محفوظة.
هذا البرنامج هو برنامج مجاني ؛ يمكنك إعادة توزيعه و/أو تعديله بموجب نفس الشروط مثل Perl نفسه. يمكن العثور على النص الكامل لهذا الترخيص في ملف الترخيص المدرج في هذه الوحدة.