ตัวตรวจสอบแบบแผนการตั้งชื่อ C/C++ (ncc)
ncc เป็นเครื่องมือการพัฒนาที่ช่วยให้โปรแกรมเมอร์เขียนโค้ด C/C++ ที่ยึดตามแบบแผนการตั้งชื่อบางประการ มันทำให้กระบวนการตรวจสอบโค้ด C/C++ เป็นไปโดยอัตโนมัติ เพื่อช่วยมนุษย์จากงานที่น่าเบื่อ (แต่สำคัญ) นี้ ทำให้เหมาะสำหรับโครงการที่ต้องการบังคับใช้มาตรฐานการเข้ารหัส
แพ็กเกจต่อไปนี้เป็นข้อกำหนดเบื้องต้นสำหรับเครื่องมือ ncc โปรดทราบว่า python 'clang' ให้การเชื่อมโยง libclang python เวอร์ชันเสียงดังกราวควรตรงกับเวอร์ชัน libclang.so บนระบบของคุณ
pip install clang
pip install pyyaml
บน Microsoft Windows ให้ติดตั้งติดตั้งเชนเครื่องมือคอมไพเลอร์ LLVM เวอร์ชัน 32 บิต
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 (MIT)
แดเนียล เจ. ฮอฟมันน์