مدقق اصطلاح التسمية C/C++ (ncc)
ncc هي أداة تطوير لمساعدة المبرمجين على كتابة تعليمات برمجية C/C++ تلتزم ببعض اصطلاحات التسمية. يقوم بأتمتة عملية التحقق من كود C/C++ لتجنيب البشر هذه المهمة المملة (ولكنها مهمة). وهذا يجعله مثاليًا للمشاريع التي ترغب في فرض معيار الترميز.
الحزم التالية هي متطلبات مسبقة لأداة NCC. لاحظ أن python 'clang' يوفر روابط libclang python. يجب أن يتطابق إصدار clang مع إصدار libclang.so الموجود على نظامك
pip install clang
pip install pyyaml
في نظام التشغيل Microsoft Windows، قم بتثبيت إصدار 32 بت من سلسلة أدوات برنامج التحويل البرمجي LLVM.
ncc . py [ - - help ] [ - - recurse ] [ - - style STYLE_FILE ] [ - - cdbdir CDBDIR ] [ - - dump ]
[ - - output OUTPUT ] [ - - filetype FILETYPE ] [ - - exclude EXCLUDE [ EXCLUDE ...]]
[ - - path PATH [ PATH ...]] [ - - include INCLUDE [ INCLUDE ...]]
[ - - definition DEFINITION [ DEFINITION ...]] [ - - clang - lib CLANG_LIB ]
للحصول على وصف تفصيلي لجميع الخيارات:
ncc . py - - help
لطباعة جميع القواعد:
ncc . py - - dump
يتم تعريف نمط بنيات c/c++ بواسطة التعبيرات العادية. على سبيل المثال، تنص القواعد أدناه على أن البنية يمكن أن تحتوي على أي حرف، ويجب أن يبدأ اسم الفئة بـ "C"، ويجب أن يبدأ متغير عضو الفئة بـ m_، ويجب أن يبدأ اسم الوظيفة بأحرف أبجدية كبيرة
ClassName : ' C.* '
CppMethod : ' [A-Z].* '
VariableName :
ScopePrefix :
Global : ' g_ '
Static : ' s_ '
ClassMember : ' m_ '
DataTypePrefix :
String : ' str '
Pointer : ' p '
Integer : ' n '
Bool : ' b '
Pattern : ' ^.*$ '
./ncc.py --style examples/ncc.style --path examples/test.cpp
examples/test.cpp:16:7: " B " does not match " ^C.*$ " associated with ClassName
examples/test.cpp:28:9: " b " does not match " ^m_.*$ " associated with ClassMemberVariable
examples/test.cpp:31:5: " main(int, const char **) " does not match " ^[A-Z].*$ " associated with FunctionName
Total number of errors = 3
./ncc.py --style examples/ncc.style --recurse --exclude * .cpp * .h --path examples
examples/test.hpp:4:7: " Test " does not match " ^C.*$ " associated with ClassName
examples/test.hpp:12:9: " t " does not match " ^m_.*$ " associated with ClassMemberVariable
examples/test.hpp:19:9: " _aaa " does not match " ^[a-z].*$ " associated with StructMemberVariable
examples/test.c:8:9: " _b " does not match " ^[a-z].*$ " associated with StructMemberVariable
examples/test.c:9:9: " _c " does not match " ^[a-z].*$ " associated with StructMemberVariable
examples/tmp/test.hpp:4:7: " Test " does not match " ^C.*$ " associated with ClassName
examples/tmp/test.hpp:12:9: " t " does not match " ^m_.*$ " associated with ClassMemberVariable
examples/tmp/test.hpp:19:9: " _aaa " does not match " ^[a-z].*$ " associated with StructMemberVariable
Total number of errors = 8
حقوق الطبع والنشر © 2018 نيثين نيليكونو
وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا (MIT).
دانييل ج. هوفمان