''clang-tidy'' détecte les parties du code qui sont soit bancals, soit pourrait être écrite d'une meilleure façon. Ne pas utiliser : * ''readability-static-accessed-through-instance'' dans le cas d'un projet ''Qt''. Dans la déclaration des classes, les champs ''public : ... public slot :'' seront considérés comme des doublons car ''slot'' est enlevé lors du preprocessing. =====CMake===== S'intègre parfaitement avec [[prog:cmake|CMake]]. Il faut commencer par activer l'option ''set(CMAKE_EXPORT_COMPILE_COMMANDS ON)''. Puis lancer la génération des ''Makefile'' avec ''%%CC="clang" CXX="clang++" cmake -S . -B build%%'' pour générer également le fichier ''compile_commands.json''. L'utilisation du compilateur ''clang'' n'est pas obligatoire. Elle est simplement là pour vérifier que le code compile bien avec ''clang''. L'analyse se lance avec ''run-clang-tidy''. =====Options===== * Configuration des règles Le fichier de config peut se générer via ''clang-tidy %%--%%dump-config > .clang-tidy''. Il est conseillé de générer ce fichier à chaque changement de version de clang, certaines options pouvant être supprimées ou renommées. Exemple du début du fichier ''.clang-tidy'': --- Checks: '*,-llvm-header-guard,-modernize-use-trailing-return-type,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-fuchsia-default-arguments-calls' WarningsAsErrors: '*' HeaderFilterRegex: '' ... [[https://www.kdab.com/clang-tidy-part-1-modernize-source-code-using-c11c14/|Clang-Tidy, part 1: Modernize your source code using C++11/C++14]] {{ :prog:clang:clang-tidy_part_1_modernize_your_source_code_using_c_11_c_14_-_kdab_2020-02-13_22_45_54_.html |Archive du 16/03/2017 le 13/02/2020}} * Analyse uniquement certains dossiers Il est aussi possible de filtrer certains dossiers : run-clang-tidy-12 '^((?!/path1/|/path2/).)*$' * Spécifier la localisation de clang-tidy Peut être utile si on souhaite utiliser ''clang-tidy'' pour Android qui est différent de celui du système mais ''run-clang-tidy'' n'est pas fourni dans le SDK Android. /usr/lib/llvm-14/bin/run-clang-tidy -clang-tidy-binary .../Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-tidy * Exclure certains fichiers Il faut modifier le fichier ''compile_commands.json'' avec une commande ''perl'' qui autorise les regex multilignes. perl -0777 -i.original -pe 's/,\n\{\n.*\n.*_RCS_FILES\.cpp",\n.*_RCS_FILES\.cpp"\n\}//g' compile_commands.json perl -0777 -i.original -pe 's/\{\n.*\n.*_RCS_FILES\.cpp",\n.*_RCS_FILES\.cpp"\n\},\n//g' compile_commands.json =====Gestion les erreurs===== * Ignorer la vérification sur des lignes de code spécifiques badcode; // NOLINT // NOLINTNEXTLINE badcode; badcode; // NOLINT(cert-err-58-cpp) // NOLINTBEGIN(google*) Foo(bool param); // NOLINTEND(google*) =====Extensions===== [[http://bbannier.github.io/blog/2015/05/02/Writing-a-basic-clang-static-analysis-check.html|Writing a basic clang static analysis check]] {{ :prog:clang:writing_a_basic_clang_static_analysis_check_2021-06-30_06_21_21_.html |Archive du 02/05/2015 le 30/06/2021}} Et une version à jour du système de compilation : [[https://clang.llvm.org/docs/LibASTMatchersTutorial.html|Tutorial for building tools using LibTooling and LibASTMatchers]], {{ :prog:clang:tutorial_for_building_tools_using_libtooling_and_libastmatchers_clang_17.0.0git_documentation_23_05_2023_08_35_52_.html |Archive du clang 17.0.0 master le 23/05/2023}} [[https://clang.llvm.org/extra/clang-tidy/Contributing.html|Getting Involved]] {{ :prog:clang:getting_involved_extra_clang_tools_17.0.0git_documentation_24_05_2023_09_20_28_.html |Archive du clang 17.0.0 master le 24/05/2023}} =====Cache===== ====kokulshan/clang-tidy-cache==== [[https://github.com/kokulshan/clang-tidy-cache|Site web]] * Installation Il faut avoir installé go. make * Exécution CLANG_TIDY_CACHE_BINARY=/usr/bin/clang-tidy-17 CLANG_TIDY_CACHE_DIR=~/.cache/clang-tidy-cache run-clang-tidy-17 -clang-tidy-binary /usr/local/bin/clang-tidy-cache ====matus-chochlik/ctcache==== [[https://github.com/matus-chochlik/ctcache|Site web]] * Installation Il suffit de copier les scripts python ''clang-tidy'' et ''clang-tidy-cache'' dans ''/usr/local/bin''. * Execution CTCACHE_CLANG_TIDY=/usr/bin/clang-tidy CTCACHE_DIR=~/.cache/clang-tidy-cache run-clang-tidy -clang-tidy-binary /usr/local/bin/clang-tidy