Itiviti-CPP-Analyzer (أو ICA) هو مكون إضافي Clang ، والذي يجلب العديد من عمليات فحص التحليل الثابت (المدرجة هنا).
إذا كنت ترغب في المساهمة في المشروع ، انظر المساهمة.
تحتاج إلى clang و cmake لبناء البرنامج المساعد. كما تحتاج إلى حزم libclang-10-dev و libclang-cpp10-dev . اختياريا ، قد تحتاج إلى Boost 1.68+ رؤوس (يمكن تنزيله أثناء الإنشاء بدلاً من ذلك).
حاليًا ، تعمل ICA فقط مع 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 إذا لم تقم بزيادة الرؤوسBOOST_ROOT بدلاً من ذلكTARGET_COMPILER هو المترجم المستخدم في الاختبارات. حدد ما إذا كنت لا تستخدم clang-10 للتجميع سيكون المكون الإضافي المبني في ./build/libica-plugin.so
تحتاج إلى libica-plugin.so و clang-10
قائمة مفصول فاصلة من الشيكات مع مستويات الانبعاث المحددة اختياريا
يتم سرد الأسماء هنا. الاسم المستعار لسرد جميع الشيكات - all
مستويات الانبعاثات:
none - التحقق من تعطيلwarn - افتراضيerrمثال:
all=warn,-redundant-noexcept,erase-in-loop=err
سيمكن all الشيكات بمستوى التحذير ، وتعطيل redundant-noexcept وضبط مستوى الخطأ للتحقق erase-in-loop
أنت بحاجة إلى أعلام إضافية:
-load path/to/libica-plugin.so-add-plugin ica-plugin-plugin-arg-ica-plugin checks=$CHECKS-plugin-arg-ica-plugin no-url اختياريًا تعطيل دمج عنوان URL في المراجعة CHECKS هي قائمة الشيكات
يتم تمرير كل حجة للواجهة الأمامية للمترجم باستخدام -Xclang ، وبالتالي فإن القائمة النهائية تبدو كذلك:
-Xclang -load -Xclang ../build/libica-plugin.so
-Xclang -add-plugin -Xclang ica-plugin
-Xclang -plugin-arg-ica-plugin -Xclang checks=$CHECKS
إذا كان لديك مشروع CMAKE ، فهناك خيارات لاستخدام ICA بسهولة ، إما كمشروع خارجي أو دليل فرعي في مساحة العمل الخاصة بك. في أي حال ، يجب أن يصبح العديد من مساعدي Cmake متاحين:
add_ica_checks(check1 check2 ...) - تحميل البرنامج المساعد وتمكين الشيكات المحددة. يمكنك استخدام مستويات الانبعاث هنا كالمعتاد.ica_no_url() - تعطيل دمج عنوان URL في مراجعة الرسالة. سيتم تشغيل target_ica_checks(MyTarget VISIBILITY ...) أو target_ica_no_url(MyTarget VISIBILITY) لتطبيق التكوين على هدف واحد و/أو تبعياته.
فيما يلي بعض أمثلة التكامل الدنيا:
أولاً ، تحتاج إلى إنشاء ICA الخاص بك (انظر) وتثبيته:
cd build && cmake --install . --install-prefix /path/to/ica/installation/وأضف هذا إلى 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)إضافة مصادر ICA كدليل فرعي إلى مشروعك (ربما من خلال الجهاز الفرعي git ) وأضف هذا إلى 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 على قمع أي تحذير على الخط
map.emplace( 0 , std::string{}); // NOLINTسيتم قمع فحص قيمة emplace-default-value هنا