J’ai développé un formateur C, C++, Java et JavaScript avec Clang dans un environnement Node.js.
(github.com/lumirlumir)- Dépôt GitHub : https://github.com/lumirlumir/npm-clang-format-node
- Site de documentation officiel : https://clang-format-node.lumir.page/
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
- Création d’un fichier de configuration
Créez un fichier de configuration (.clang-format) qui définit le style de formatage. - Exécution de la commande
Lorsque vous exécutez la commandeclang-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
L’exécution de cette commande formate automatiquement le fichierclang-format -i my_source.cppmy_source.cppselon 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
- 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. - 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. - 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
- Écrivez votre code.
- Ajoutez les modifications dans le staging (
git add). - 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 🙇♂️
- Dépôt GitHub : https://github.com/lumirlumir/npm-clang-format-node
- Site de documentation officiel : https://clang-format-node.lumir.page/
2 commentaires
Je vous mets un gros pouce bleu au passage.
Merci !!