Ce workshop traite sur l'intĂ©gration des outils clang dans vscode. Il peut quand mĂȘme vous aider Ă vous familiariser avec les outils qu'offrent la suite clang si vous utilisez un IDE diffĂ©rent.
N'hĂ©sitez pas Ă star â le repo si vous avez aimĂ© ce workshop!
DĂ©roulement du workshop:
- Installation des outils nécessaires
- Mise en place de sa propre norme Ă l'aide de clang-format
- Mise en place du language server clangd avec vscode.
- Utilisation du language server, lint et clang-tidy
- Mise en place d'un CI pour vérifier que son code compile
git clone git@github.com:ajnart/workshop-llvm.git workshop
cd workshop
Tout d'abord nous allons installer clangd, Ă l'aide de la page d'installation
Vous pouvez vérifier l'installation à l'aide de clangd --version
Ainsi que l'extension vscode clangd ou de l'extension pour votre IDE Ă l'aide de la commande (ctrl+p):
ext install llvm-vs-code-extensions vscode-clangd
Clang-format devrait ĂȘtre installĂ© depuis le paquet installĂ© dans l'Ă©tape prĂ©cĂ©dente, pour le vĂ©rifier, faites: clang-format --version
Clang-format devait Ă©galement ĂȘtre installĂ©.
On vérifie ça grùce à : clang-tidy --version
Nous allons également installer B-ear afin de générer une base de donnée de compilation de nos projets. Bear créera un compile_commands.json
qui permettra Ă clangd de mieux linter votre code.
L'extension clangd recommande de désinstaller l'extension C/C++ pour ne pas avoir de duplications de recommandations
Dans cette Ă©tape, nous allons gĂ©nĂ©rer un fichier .clang-format qui va ĂȘtre utilisĂ© pour dire Ă clang-format
quelle norme utiliser pour linter vos fichiers.
Pour se faire, utilisez un générateur en ligne
Sauvegardez votre .clang-format dans le dossier de ce workshop.
Clang-format va chercher le fichier .clang-format le plus proche du current working directory en remontant récursivement dans vos fichiers.
Maintenant, faites en sorte que l'extension clangd soit le formateur de code par défaut dans vscode:
ctrl+p format document with...
ou alors en Ă©ditant son fichier settings.json:
"[cpp]": {
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
},
Vous devriez maintenant ĂȘtre en mesure de formater votre code Ă l'aide de votre config .clang-format
â Il faut faire la commande bear -- \build command\
pour créer la base de donnée de compilation pour clangd.
Dans notre exemple : bear -- make
générera un fichier compile_commands.json
qui sera ensuite utilisé pour linter vos fichiers.
En mettant votre curseur sur la fonction divide, clangd devrait vous montrer le prototype de la fonction
Nous allons maintenant configurer clang-tidy pour avoir des recommandations sur notre code.
Créer un fichier .clang-tidy
contenant:
Checks: "
*,
-fuchsia*,
"
Cette configuration active tout les checks par défaut, il faut ensuite désactiver manuellement certains checks à la main en rajoutant une ligne sous la forme: -\glob\,
Pour voir tout les checks disponibles, rendez vous ici
Comme vous pouvez le voir sur le gif ci-dessous, grùce à clangd il est trÚs facile de régler les erreurs basiques dans votre code :
En fonction de votre configuration clang-tidyn vous aurez des recommendations affichĂ©es dans l'onglet problems en bas de la fenĂȘtre vscode:
Nous allons maintenant s'intéresser au dossier .github
pour rajouter des workflows grĂące aux github actions
Tout d'abord, créer un fichier CI.yml
pour créer une action il faut que cette action:
- S'active quand il y a des pushs sur master
- Contienne un job build qui:
- Utilise le docker epitech
- Contient une step qui:
- RĂ©alise votre commande de build
Cette action va maintenant lancer un docker utilisant l'image docker epitech
L'indentation de cette liste correspond Ă l'indentation que vous aurez dans votre fichier yml đ
J'espĂšre que mon workshop vous a plu. Si vous voulez aller plus loin vous pouvez:
- Mettre en place une action pour vérifier que son code est conforme à sa propre norme
- Faire une action pour vérifier que les tests passent
- Utiliser --html sur gcovr pour créer un fichier .html indiquant le coverage
- Uploader le .html généré par gcovr dans une github pages
- Utiliser un analyseur de code sémantique
- Transformer le résultat de ses tests gtest en HTML
Made with †by Thomas "Ajnart" Camlong