ITIVITI-CPP-Analyzer (o ICA) es un complemento Clang, que trae varias verificaciones de análisis estáticos (enumerados aquí).
Si desea contribuir al proyecto, consulte Contriping.md.
Necesita Clang y CMake para construir el complemento. También necesita paquetes libclang-10-dev y libclang-cpp10-dev . Opcionalmente, es posible que necesite encabezados Boost 1.68+ (se puede descargar durante la compilación).
Actualmente, ICA solo funciona con clang-10
[ ! -d build ] && mkdir build
cd build
cmake
-DGCC_TOOLCHAIN= < path/to/gcc/toolchain (probably, /usr/lib) >
-DBOOST_FROM_INTERNET=ON
-DTARGET_COMPILER=clang++-10
../
cmake --build . --parallelBOOST_FROM_INTERNET solo es necesario si no ha aumentado los encabezadosBOOST_ROOT se puede especificar en su lugarTARGET_COMPILER es el compilador utilizado para las pruebas. Especifique si no usa clang-10 para la compilación El complemento construido estará en ./build/libica-plugin.so
Necesitas libica-plugin.so y clang-10
Una lista de comprobaciones separadas por coma con niveles de emisión opcionalmente especificados
Los nombres de los cheques se enumeran aquí. Alias para enumerar todas las verificaciones - all
Niveles de emit:
none - Check está deshabilitadowarn - PredeterminadoerrEjemplo:
all=warn,-redundant-noexcept,erase-in-loop=err
Habilitará all las verificaciones con nivel de advertencia, deshabilitará redundant-noexcept y establecerá el nivel de error para la verificación erase-in-loop
Necesitas banderas adicionales:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url -Opcionalmente, deshabilite la integración de la URL en el mensaje de verificación CHECKS es la lista de verificación
Cada argumento para el compilador frontend se pasa con -Xclang , por lo que la lista final se ve así:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
Si tiene un proyecto CMake, hay opciones para usar ICA fácilmente, ya sea como un proyecto externo o un subdirectorio en su espacio de trabajo. En cualquier caso, varios ayudantes de CMake deberían estar disponibles:
add_ica_checks(check1 check2 ...) - Cargue el complemento y habilite las verificaciones especificadas. Puedes usar los niveles de emisión aquí como de costumbre.ica_no_url() - Desactive la integración de la URL en el mensaje de verificación. Ejecutar target_ica_checks(MyTarget VISIBILITY ...) o target_ica_no_url(MyTarget VISIBILITY) aplicará la configuración a un objetivo único y/o sus dependencias.
Aquí hay algunos ejemplos de integración mínimos:
Primero debe ser construido su ICA (ver) e instalado:
cd build && cmake --install . --install-prefix /path/to/ica/installation/Y agregue esto a su cmakelists.txt
# NOTE: `find_package` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# If ICA is installed in unusual location
list ( APPEND CMAKE_PREFIX_PATH "/path/to/ica/installation" )
find_package (ICA CONFIG REQUIRED)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec)Agregue las fuentes de ICA como subdirectorio a su proyecto (probablemente a través de git submódulo ) y agregue esto a sus cmakelists.txt
# NOTE: `add_subdirectory` should be located after root `project(...)`
project (<your project> LANGUAGES C CXX)
...
# Set any other cache variables here: GCC_TOOLCHAIN, LLVM_ROOT, ...
set (BOOST_FROM_INTERNET ON )
add_subdirectory (itiviti-cpp-analyzer)
add_ica_checks(<your checks list>)
...
# NOTE: Added checks will be effective only for subsequent targets
add_subdirectory (my-subdir)
add_library (my-lib)
add_executable (my-exec) // NOLINT suprimirá cualquier advertencia en la línea
map.emplace( 0 , std::string{}); // NOLINTEl cheque de valores emplace-default se suprimirá aquí