clang-format + clang-tidy dans Neovim(CoC) avec clangd en C++

  • Clang-Format est un outil permettant de formatter automatiquement vos fichiers (indentation, espaces, retours à la ligne, etc). Comme le C++ est un langage avec une syntaxe un peu lourde, utiliser ce type d'outils permet de faciliter la lecture du code.

  • clang-tidy est un linter C++ extensible qui peut être utilisé pour rechercher des problèmes dans votre code et appliquer des règles de style dans votre codebase.

Pour utiliser clang-format et clang-tidy dans Neovim avec clangd et le plugin CoC (Conqueror of Completion), voici les étapes à suivre :

Prérequis

  1. Installer clangd = clang-format + clang-tidy :
   sudo pacman -S clang
   clang-tidy --version
   clang-format --version
  1. Installer le plugin CoC pour Neovim si ce n’est pas déjà fait :
   :CocInstall coc-clangd

Configuration de clang-format

  1. Ajouter un fichier .clang-format à la racine de votre projet pour configurer le style de formatage. Vous pouvez le générer par défaut :
   clang-format -style=llvm -dump-config > .clang-format

Adaptez le contenu selon vos préférences.

  1. Configurer la commande pour auto-formater avec CoC. Ajoutez ceci dans votre fichier init.vim de Neovim :
   autocmd BufWritePre *.cpp,*.h,*.c :silent! :CocCommand clangd.action.formatDocument

Cela va automatiquement formater le code à chaque enregistrement des fichiers .cpp, .h, ou .c.

Configuration de clang-tidy

  1. Créer ou modifier le fichier compile_commands.json :
  2. clang-tidy utilise ce fichier pour connaître les options de compilation de votre projet. Si vous utilisez CMake, générez-le avec :
     cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
  • Placez le fichier compile_commands.json à la racine de votre projet.

  • Configurer clangd pour utiliser clang-tidy : Ajoutez cette ligne dans votre init.vim pour que clangd utilise automatiquement clang-tidy :

   let g:coc_config_home = expand('~/.config/nvim/coc-settings.json')

Ensuite, éditez le fichier coc-settings.json (généralement dans ~/.config/nvim/) et ajoutez :

   {
     "clangd.arguments": [
       "--clang-tidy"
     ],
     "clangd.semanticHighlighting": true
   }

Cela permet à clangd d'exécuter clang-tidy pour l'analyse de code.

Utilisation

  • Formatage manuel : Utilisez la commande :CocCommand clangd.action.formatDocument dans Neovim pour formater manuellement votre fichier.
  • Affichage des erreurs clang-tidy : clangd avec clang-tidy activera des diagnostics et suggestions de correction de style directement dans Neovim.

En suivant ces étapes, clang-format formatera votre code lors de l’enregistrement, et clang-tidy analysera votre code pour afficher des recommandations et des diagnostics directement dans Neovim via clangd.