ITiviti-CPP-Analyzer (atau ICA) adalah plugin dentang, yang membawa beberapa pemeriksaan analisis statis (tercantum di sini).
Jika Anda ingin berkontribusi pada proyek, lihat Contributing.md.
Anda membutuhkan dentang dan cmake untuk membangun plugin. Anda juga membutuhkan paket libclang-10-dev dan libclang-cpp10-dev . Secara opsional, Anda mungkin perlu meningkatkan 1.68+ header (dapat diunduh selama build).
Saat ini, ICA hanya bekerja dengan 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 hanya diperlukan jika Anda belum meningkatkan headerBOOST_ROOT dapat ditentukan sebagai gantinyaTARGET_COMPILER adalah kompiler yang digunakan untuk tes. Tentukan jika Anda tidak menggunakan clang-10 untuk kompilasi Plugin yang dibangun akan berada di ./build/libica-plugin.so
Anda membutuhkan libica-plugin.so dan clang-10
Daftar cek yang terpisah koma dengan level emit yang ditentukan secara opsional
Periksa nama tercantum di sini. Alias untuk mendaftar semua cek - all
Level emit:
none - cek dinonaktifkanwarn - DefaulterrContoh:
all=warn,-redundant-noexcept,erase-in-loop=err
Akan mengaktifkan all cek dengan erase-in-loop peringatan, redundant-noexcept
Anda membutuhkan bendera tambahan:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url -Opsional nonaktifkan URL mengintegrasikan ke dalam pesan cek CHECKS adalah daftar periksa
Setiap argumen untuk compiler frontend dilewatkan dengan -Xclang , jadi daftar terakhir terlihat seperti itu:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
Jika Anda memiliki proyek CMake, ada opsi untuk menggunakan ICA dengan mudah, baik sebagai proyek eksternal atau subdirektori di ruang kerja Anda. Bagaimanapun, beberapa pembantu cmake harus tersedia:
add_ica_checks(check1 check2 ...) - Muat plugin dan aktifkan cek yang ditentukan. Anda dapat menggunakan level emit di sini seperti biasa.ica_no_url() - Nonaktifkan URL Mengintegrasikan ke dalam Pesan Periksa. Menjalankan target_ica_checks(MyTarget VISIBILITY ...) atau target_ica_no_url(MyTarget VISIBILITY) akan menerapkan konfigurasi ke target tunggal dan/atau dependensinya.
Berikut adalah beberapa contoh integrasi minimal:
Pertama, Anda perlu membuat ICA Anda dibangun (lihat) dan diinstal:
cd build && cmake --install . --install-prefix /path/to/ica/installation/Dan tambahkan ini ke cmakelists.txt Anda
# 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)Tambahkan sumber ICA sebagai subdirektori ke proyek Anda (mungkin melalui submodule git ) dan tambahkan ini ke cmakelists.txt Anda
# 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 akan menekan peringatan apa pun di telepon
map.emplace( 0 , std::string{}); // NOLINTPemeriksaan Value-Default-Default akan ditekan di sini