13 points par beenzinozino 2024-11-14 | 2 commentaires | Partager sur WhatsApp

Bonjour, j’ai développé un formateur C, C++ et Java utilisant Clang dans un environnement Node.js. Ce projet est une nouvelle initiative basée sur le package clang-format d’Angular, désormais obsolète et non maintenu.

J’avais déjà publié un message similaire il y a environ deux mois, mais comme la stabilité du package s’est encore améliorée et que de nouvelles fonctionnalités ont été ajoutées, j’ai décidé d’écrire à nouveau.

Grâce à l’intérêt que beaucoup d’entre vous ont porté au projet et au fait que de nombreux utilisateurs historiques ont migré, le nombre de téléchargements hebdomadaires a désormais dépassé les 10 000. Merci beaucoup.

En outre, le package a atteint une couverture de tests complète, et une PR a été ouverte pour que le cœur de Node.js utilise ce package à la place de l’ancien projet clang-format d’Angular. Vous pouvez donc l’utiliser en ayant confiance dans sa stabilité. (Bien sûr, il est possible qu’il reste encore des points que je n’ai pas remarqués...)


Ce package, basé sur clang-format de Clang — célèbre compilateur C de LLVM — permet de formater le code en C, C++ et Java. On peut dire qu’il joue un rôle similaire à celui de Prettier, l’un des packages les plus connus dans l’environnement Node.js.

Cependant, comme Prettier ne prend pas en charge le formatage des langages C, C++ et Java, on utilise souvent clang-format pour gérer le formatage dans ces langages.

Dans un environnement Node.js, clang-format est particulièrement utile lorsqu’il faut écrire à la fois du code JavaScript et du code C/C++, comme dans le développement du cœur de Node.js. Avec l’ancien clang-format, il fallait installer des dépendances supplémentaires pour utiliser le package, mais ce n’est plus nécessaire avec celui-ci.

Par ailleurs, l’ancien package clang-format était assez difficile à intégrer dans des workflows utilisant Node.js et npm, notamment en CI. Avec ce package, il suffit simplement de le télécharger depuis npm et de configurer les scripts, ce qui apporte de nombreux avantages en environnement CI.


De plus, avec la mise à niveau vers la version 1.2.0, de nouvelles fonctionnalités ont été ajoutées. Le changement principal est l’ajout du package git-clang-format.

Prenons l’exemple d’un projet C/C++ dans lequel on ressent le besoin d’introduire du formatage de code à l’aide de packages comme clang-format.

Dans un petit projet, il peut être acceptable de refondre tout le formatage du code d’un seul coup puis de tout valider dans un seul commit, sans que cela ne pose trop de problèmes pour le suivi de l’historique. En revanche, dans un projet de grande taille, l’introduction du formatage peut obliger à modifier en bloc le formatage du code existant, avec le risque de rendre le suivi de l’historique des commits plus confus.

Dans ce cas, imaginons qu’un développeur n’ait modifié que 100 lignes sur 1 000, et qu’au moment du commit on ne vérifie le formatage que sur ces 100 lignes modifiées. Que se passe-t-il alors ? Premièrement, comme seul le code modifié doit être formaté, il n’est plus nécessaire de reprendre les 1 000 lignes, ce qui facilite le suivi de l’historique des commits. Deuxièmement, à mesure que du code continue d’être validé pendant le développement, de plus en plus de portions du code se retrouvent formatées, ce qui permet d’améliorer progressivement la cohérence du formatage dans le temps.

C’est précisément pour cela que le package git-clang-format est utilisé. De la même manière que lint-staged améliore la vitesse de la CI en ne vérifiant que les fichiers mis en staging, on peut aller encore plus loin en appliquant les vérifications de formatage uniquement aux lignes modifiées dans les fichiers modifiés. Cet outil est lui aussi fourni par LLVM par défaut, et je l’ai publié sous forme de package wrapper.

La documentation officielle décrit précisément son utilisation, donc n’hésitez pas à vous y intéresser. (La documentation officielle est toutefois en anglais.) Si vous avez des questions ou d’autres avis, je vous serais reconnaissant de les partager. Merci d’avoir lu ce long message.

Documentation officielle : https://clang-format-node.lumir.page
Dépôt : https://github.com/lumirlumir/npm-clang-format-node

2 commentaires

 
rumbarum 2024-11-18

J’encourage le développement open source !

 
beenzinozino 2024-11-18

Merci !!🙇‍♂️