C/C++ Comprobador de convenciones de nomenclatura (ncc)
ncc es una herramienta de desarrollo para ayudar a los programadores a escribir código C/C++ que cumpla con algunas convenciones de nomenclatura. Automatiza el proceso de verificación del código C/C++ para ahorrarle a los humanos esta aburrida (pero importante) tarea. Esto lo hace ideal para proyectos que desean aplicar un estándar de codificación.
Los siguientes paquetes son requisitos previos para la herramienta ncc. Tenga en cuenta que Python 'clang' proporciona enlaces de Python libclang. La versión clang debe coincidir con la versión libclang.so en su sistema
pip install clang
pip install pyyaml
En Microsoft Windows, instale la versión de 32 bits de la cadena de herramientas del compilador 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 ]
Para una descripción detallada de todas las opciones:
ncc . py - - help
Para imprimir todas las reglas:
ncc . py - - dump
El estilo de las construcciones c/c++ se define mediante expresiones regulares. Por ejemplo, las siguientes reglas dicen que una estructura puede tener cualquier carácter, el nombre de una clase debe comenzar con 'C' y una variable miembro de la clase debe comenzar con m_, y el nombre de una función debe comenzar con el alfabeto en mayúsculas.
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
Distribuido bajo la licencia MIT (MIT).
Daniel J. Hofmann