Itiviti-cpp-analyzer (ou ICA) é um plug-in Clang, que traz várias verificações de análise estática (listadas aqui).
Se você deseja contribuir com o projeto, consulte contribuindo.md.
Você precisa de clang e cmake para construir o plug -in. Além disso, você precisa pacotes libclang-10-dev e libclang-cpp10-dev . Opcionalmente, você pode precisar aumentar 1.68+ cabeçalhos (ele pode ser baixado durante a compilação).
Atualmente, a ICA trabalha apenas com 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 é necessário apenas se você não aumentar os cabeçalhosBOOST_ROOT pode ser especificado em vez dissoTARGET_COMPILER é o compilador usado para testes. Especifique se você não usa clang-10 para compilação O plugin construído estará em ./build/libica-plugin.so
Você precisa de libica-plugin.so e clang-10
Uma lista separada por vírgula de cheques com níveis de emissão especificados opcionalmente
Os nomes de verificação estão listados aqui. Alias para listar todos os cheques - all
Níveis de emitir:
none - verificação está desativadowarn - PadrãoerrExemplo:
all=warn,-redundant-noexcept,erase-in-loop=err
permitirá all as verificações com nível de aviso, desativará redundant-noexcept e definir o nível de erro para erase-in-loop a verificação
Você precisa de sinalizadores adicionais:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url -Desativar opcionalmente a integração do URL à mensagem de verificação CHECKS é a lista de cheques
Todo argumento para o front -end do compilador é passado com -Xclang , então a lista final se parece com isso:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
Se você possui um projeto CMake, existem opções para usar facilmente a ICA, como um projeto externo ou um subdiretório em seu espaço de trabalho. De qualquer forma, vários ajudantes de cmake devem ficar disponíveis:
add_ica_checks(check1 check2 ...) - Carregue o plug -in e ative verificações especificadas. Você pode usar os níveis de emitis aqui, como de costume.ica_no_url() - Desative a integração da URL na mensagem de verificação. Executar target_ica_checks(MyTarget VISIBILITY ...) ou target_ica_no_url(MyTarget VISIBILITY) aplicará a configuração ao destino único e/ou suas dependências.
Aqui estão alguns exemplos mínimos de integração:
Primeiro, você precisa construir seu ICA (veja) e instalado:
cd build && cmake --install . --install-prefix /path/to/ica/installation/E adicione isso aos seus 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)Adicione as fontes da ICA como subdiretório ao seu projeto (provavelmente através do Git Submodule ) e adicione -o aos seus 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 Comment suprimirá qualquer aviso na linha
map.emplace( 0 , std::string{}); // NOLINTA verificação do valor do padrão-padrão será suprimida aqui