Itiviti-CPP-Analyzer (ou ICA) est un plugin Clang, qui apporte plusieurs vérifications d'analyse statique (répertoriées ici).
Si vous souhaitez contribuer au projet, voir contribution.md.
Vous avez besoin de Clang et Cmake pour construire le plugin. Vous avez également besoin de packages libclang-10-dev et libclang-cpp10-dev . Facultativement, vous aurez peut-être besoin d'en-têtes Boost 1.68+ (il peut être téléchargé pendant la construction à la place).
Actuellement, ICA ne fonctionne qu'avec 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 n'est nécessaire que si vous n'avez pas boosté en-têtesBOOST_ROOT peut être spécifié à la placeTARGET_COMPILER est le compilateur utilisé pour les tests. Spécifiez si vous n'utilisez pas clang-10 pour la compilation Le plugin construit sera dans ./build/libica-plugin.so
Vous avez besoin libica-plugin.so et clang-10
Une liste séparée par des virgules avec des niveaux d'émit émetteurs éminés éventuellement
Les noms de vérification sont répertoriés ici. Alias pour énumérer tous les chèques - all
Émettre des niveaux:
none - le contrôle est désactivéwarn - par défauterrExemple:
all=warn,-redundant-noexcept,erase-in-loop=err
Activera all les vérifications avec un niveau d'avertissement, désactiver redundant-noexcept et définir le niveau d'erreur pour une vérification erase-in-loop
Vous avez besoin de drapeaux supplémentaires:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url - Désactiver éventuellement l'intégration de l'URL dans le message de vérification CHECKS sont la liste de chèques
Chaque argument pour le Frontend du compilateur est passé avec -Xclang , donc la liste finale ressemble à ceci:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
Si vous avez un projet CMake, il existe des options pour utiliser facilement ICA, soit comme projet externe, soit comme sous-répertoire dans votre espace de travail. Dans tous les cas, plusieurs aides CMake devraient être disponibles:
add_ica_checks(check1 check2 ...) - Chargez le plugin et activez les vérifications spécifiées. Vous pouvez utiliser des niveaux d'émission ici comme d'habitude.ica_no_url() - Désactiver l'intégration de l'URL dans le message de vérification. L'exécution target_ica_checks(MyTarget VISIBILITY ...) ou target_ica_no_url(MyTarget VISIBILITY) appliquera la configuration à une seule cible et / ou à ses dépendances.
Voici quelques exemples d'intégration minimaux:
Vous devez d'abord faire construire votre ICA (voir) et installer:
cd build && cmake --install . --install-prefix /path/to/ica/installation/Et ajoutez ceci à vos 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)Ajoutez des sources ICA en tant que sous-répertoire à votre projet (probablement via le sous-module Git ) et ajoutez-le à votre 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 supprimera tout avertissement sur la ligne
map.emplace( 0 , std::string{}); // NOLINTLe chèque d'emplacement-défaut de valeur sera supprimé ici