Vérificateur de convention de dénomination C/C++ (ncc)
ncc est un outil de développement pour aider les programmeurs à écrire du code C/C++ qui adhère à certaines conventions de dénomination. Il automatise le processus de vérification du code C/C++ pour épargner aux humains cette tâche ennuyeuse (mais importante). Cela le rend idéal pour les projets qui souhaitent appliquer une norme de codage.
Les packages suivants sont des prérequis pour l'outil ncc. Notez que le python 'clang' fournit des liaisons python libclang. La version de clang doit correspondre à la version de libclang.so sur votre système
pip install clang
pip install pyyaml
Sur Microsoft Windows, installez la version 32 bits de la chaîne d'outils du compilateur 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 ]
Pour une description détaillée de toutes les options :
ncc . py - - help
Pour imprimer toutes les règles :
ncc . py - - dump
Le style des constructions c/c++ est défini par des expressions régulières. Par exemple, les règles ci-dessous disent qu'une structure peut avoir n'importe quel caractère, qu'un nom de classe doit commencer par « C », et qu'une variable membre de classe doit commencer par m_, et qu'un nom de fonction doit commencer par un alphabet majuscule.
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
Copyright © 2018 Nithin Nellikunnu
Distribué sous la licence MIT (MIT).
Daniel J. Hofmann