2 points par beenzinozino 2025-01-25 | 2 commentaires | Partager sur WhatsApp

Bonjour !

J’ai développé un formateur C, C++, Java et JavaScript basé sur Clang dans un environnement Node.js. Ce projet est une nouvelle initiative lancée à partir du package clang-format d’Angular, qui n’est plus maintenu.

J’avais déjà partagé un contenu similaire il y a deux ou trois mois, mais à l’occasion de la publication de la version v1.3.0, j’ai ajouté un site de documentation détaillé pour permettre aux utilisateurs de l’utiliser plus facilement et plus confortablement. Vous pouvez consulter ce site de documentation ici ; il couvre de nombreux sujets, de la méthode d’installation de base aux raisons d’utiliser ce package. Si cela vous intéresse, n’hésitez pas à y jeter un œil.

Cette mise à jour ajoute plusieurs tests pour renforcer encore la stabilité du package, ainsi que de nouvelles fonctionnalités.

L’ensemble de ces packages est sous licence MIT et peut être utilisé librement.


Quel type de projet est clang-format-node ?

Ce package Node.js, basé sur clang-format de Clang — célèbre compilateur C de LLVM — prend en charge le formatage du code en C, C++ et Java. En bref, il joue un rôle similaire à Prettier dans un environnement Node.js, avec la différence qu’il fournit le formatage pour les langages C, C++ et Java que Prettier ne prend pas en charge.

clang-format-node est particulièrement utile dans des contextes comme le développement du cœur de Node.js ou d’Electron, où il faut écrire à la fois du code JavaScript et du code C/C++.

Le package clang-format existant avait l’inconvénient de nécessiter l’installation de dépendances supplémentaires liées au système d’exploitation, comme Ubuntu. Avec ce package, il est possible de l’utiliser immédiatement sans installation séparée. De plus, alors que le package existant était difficile à intégrer dans des workflows CI basés sur Node.js et npm, clang-format-node peut être utilisé simplement en l’installant via npm puis en configurant un script, ce qui lui donne de nombreux avantages dans les environnements CI.


Quelles sont alors les caractéristiques du package clang-format-node ?

1. Un Drop-in Replacement pour remplacer le clang-format d’Angular

clang-format-node est un Drop-in Replacement qui permet de remplacer facilement le package Angular/clang-format.
La transition depuis le package existant vers clang-format-node est très simple et peut se faire immédiatement, sans procédure complexe.

2. Node.js suffit, sans dépendance supplémentaire pour utiliser Clang

Aucune dépendance supplémentaire comme Python ou C++ n’est nécessaire. Avec Node.js seul, l’exécution est simple.

3. Large compatibilité

Le package prend largement en charge de nombreux systèmes d’exploitation et architectures, différentes versions de Node.js, les images de runners GitHub Actions, les images de build Docker, etc.

4. Configuration CI simple

Sans configuration complexe, vous pouvez utiliser clang-format-node comme n’importe quel autre package Node.js.

5. Build et release automatisés

À chaque mise à jour de clang-format, une nouvelle version npm est publiée automatiquement. GitHub Actions détecte régulièrement les mises à jour, construit le package, puis crée une Pull Request.


Formater du code avec clang-format et git-clang-format

(Le texte ci-dessous est une traduction partielle en coréen d’un texte que j’ai rédigé en anglais dans la section https://clang-format-node.lumir.page/docs/get-started/introduction.)

L’importance du formatage du code

Formatez toujours votre code

Le formatage du code est une tâche très importante pour améliorer la qualité du code. L’essentiel du formatage est de maintenir une présentation cohérente du code afin d’en améliorer la lisibilité et la compréhension.


Qu’est-ce que clang-format ?

clang-format est un outil qui formate automatiquement les fichiers source de langages comme le C et le C++, et il est développé comme une partie du projet open source LLVM Clang.

Fonctionnement
  1. Création d’un fichier de configuration
    Créez un fichier de configuration (.clang-format) qui définit le style de formatage.
  2. Exécution de la commande
    Lorsque vous exécutez la commande clang-format, le code source est automatiquement réorganisé selon les règles de style définies.
Caractéristiques principales
  • Prise en charge de nombreux langages
    Prend en charge de nombreux langages tels que C, C++, Java, JavaScript, Objective-C, Protobuf, C#, etc.
  • Exemple de commande de formatage
    clang-format -i my_source.cpp  
    
    L’exécution de cette commande formate automatiquement le fichier my_source.cpp selon le style défini.
Exemple de formatage de code
// Before formatting  
void test(QString&data, bool extraString) {  
    int i=0;  
    for (i=0;i<3;i++) {  
        data+="reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000) + "/filetoload.html";  
        if (extraString)  
        {  
            data += "some-extra";  
        }  
    }  
}  
  
// After formatting  
void test(QString &data, bool extraString)  
{  
    int i = 0;  
    for (i = 0; i < 3; i++) {  
        data += "reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000)  
                + "/filetoload.html";  
        if (extraString) {  
            data += "some-extra";  
        }  
    }  
}  

Cet exemple montre comment clang-format formate le code. Les règles de formatage peuvent être configurées librement selon le style de votre équipe.


Les limites de clang-format

clang-format est un excellent outil, mais il peut poser des problèmes avec le code existant et l’historique des commits.

Principaux problèmes
  1. Conflits avec le code existant
    Le formatage d’un fichier entier peut modifier aussi des parties sans lien avec le formatage, ce qui génère des changements inutiles.
  2. Confusion dans l’historique des commits
    De grands changements de formatage peuvent compliquer l’historique des commits et rendre plus difficiles la fusion de branches, la revue de code et l’analyse de code.
  3. Incohérence entre nouveau code et code existant
    Il peut être difficile de conserver le formatage lorsqu’on ajoute du nouveau code à une base déjà formatée.
Solution : git-clang-format

git-clang-format est une extension Git qui aide à n’appliquer le formatage qu’au code modifié. Son utilisation apporte les avantages suivants :

  • Réduction du périmètre de formatage : application du formatage uniquement au code modifié
  • Revue simplifiée : possibilité d’examiner séparément les changements de formatage et les changements de développement

Comment utiliser git-clang-format

Installation

git-clang-format est fourni avec le package clang-format-node. Vous pouvez l’utiliser en installant le package npm clang-format-git.

Workflow de base
  1. Écrivez votre code.
  2. Ajoutez les modifications dans le staging (git add).
  3. Exécutez git-clang-format.
Exemple
# Ajout d’un nouveau fichier et mise en staging des modifications  
$ git diff --staged  
diff --git a/x.cpp b/x.cpp  
new file mode 100644  
index 0000000..af14ed5  
--- /dev/null  
+++ b/x.cpp  
@@ -0,0 +1,3 @@  
+int main() {  
+  
+}  
  
# Exécution de git-clang-format  
$ git-clang-format  
changed files:  
    x.cpp  
  
# Vérification de l’état après formatage  
$ git status  
On branch master  
Changes to be committed:  
    new file:   x.cpp  
Changes not staged for commit:  
    modified:   x.cpp  

Ce workflow permet d’examiner séparément les changements de formatage et les changements de développement. Si le résultat du formatage ne vous convient pas, vous pouvez aussi revenir en arrière avec git checkout.

Définir le style

Vous pouvez définir le style de formatage avec l’option --style.

$ git-clang-format --style=WebKit  
$ git-clang-format --style=file  # utilise le fichier `.clang-format`  

Conclusion

clang-format est un outil puissant, mais dans un contexte de travail réel, la simple commande clang-format -i ne suffit souvent pas. En utilisant git-clang-format, qui applique le formatage uniquement aux parties modifiées, vous pouvez gérer le code efficacement et simplifier le processus de revue.

Comme git-clang-format ne formate que les changements, il permet de conserver une base de code propre et professionnelle tout en offrant un environnement de développement flexible. En ajoutant simplement quelques commandes Git lorsque vous formatez un commit de travail ou une branche entière, vous pouvez résoudre facilement les problèmes liés au formatage.


Merci d’avoir lu ce long article ! Je souhaite à tous les lecteurs de GeekNews une excellente nouvelle année 🙇‍♂️

2 commentaires

 
dooboo 2025-01-26

Je vous mets un gros pouce bleu au passage.

 
beenzinozino 2025-01-27

Merci !!