Forum Programmation.c++ application de convention d'écriture

Posté par  (site web personnel) . Licence CC By‑SA.
1
12
mai
2022

Bonjour à tous,
je suis à la recherche d'un ou plusieurs outils pour donner à l'utilisateur la possibilité de vérifier que son code est conforme et pourra être déposé sur notre dépôt git.

contexte

Je travaille sur le développement d'un logiciel d'acquisition, visualisation, analyse et diagnostic de données provenant du système d'acquisition d'un imageur médical. Jusqu'à présent je travaillais seul sur ce projet, mais à l'avenir des collègues vont me prêter main forte car le projet commence à grossir et les demandes utilisateurs aussi :) C'est évidement une excellente nouvelle !

Comme je travaillais seul, j'avais la quasi-certitude que les conventions étaient respectées; je connais bien le dev et sa rigueur personnelle :) Mais maintenant que l'équipe grossit il faut mettre en place des outils pour s'assurer de la cohérence du code.

Le projet est écrit en c++ et utilise Qt et root (cern).

Pour la mise en forme du code j'utilise clang-format. Ça, c'est carrément un outil génial et qui marche bien. Je suis parfois bluffé par sa puissance.

J'utilise aussi cppcheck pour faire de l'analyse statique de code.

Il n'y a pas de code coverage et le code est versionné avec git/gitlab.

ma recherche

Je cherche un outil qui me permette de mettre en place des règles simples et peu nombreuses dont voici un sous ensemble.
* snake_case PARTOUT (nom de fichier, variable, fonction, classe, enum… TOUT !!!)
* pas de préfixe my
* extension des fichiers
* nom des fichiers
* utilisation de caractères ascii (regexp [a-z0-9])

J'ai fait des recherches, mais je ne converge pas vraiment et c'est pour ça que je me permets de venir vous voir pour trouver de l'aide.

Je vous remercie d'avance pour votre aide.

Olivier

  • # pre-commit

    Posté par  (Mastodon) . Évalué à 1. Dernière modification le 12 mai 2022 à 14:05.

    Bonjour,

    Je n'y connais pas grand chose en c++, je fais du python…

    Par contre, j'use et j'abuse du formateur black et du linter flake8 (avec d'autres trucs), que j'ai mis dans un .pre-commit-config.yaml

    À chaque fois que je "commit" du code, le pre-commit s'execute, et m'affiche les éventuels problèmes… en fait, pas très souvent, car du coup je connais les trucs à ne pas faire en codant pour éviter de le bloquer.

    Je ne réponds pas à ta question sur quel formateur utiliser, mais comment l'utiliser :)

    Courage !

    PS: çà serait un bon sujet de stage pour un bébé ingé, ton formateur :)

  • # ben... clang-format, non?

    Posté par  . Évalué à 2.

    Tout est dans le titre.

    Utilises clang-format pour générer un code formatté correctement à partir du code a ajouter, fais un diff, et si il y a des différences, tu envoies une erreur. Ensuite, tu places tout ça dans un pre-commit hook ainsi qu'un pre-merge (je suis plus sûr pour le 2nd, mais bref, le hook qui vérifie les patches avant de fusionner, parce que le pre-commit hook est malheureusement uniquement en local et n'est pas cloné à ma connaissance).

    Je n'ai jamais utilisé cette technique avec clang-format, qui est sur ma TODO-list depuis perpette, mais j'ai fait exactement ça avec astyle, que j'utilise depuis avant la naissance de clang-format.

  • # Uncrustify

    Posté par  . Évalué à 1.

    Outil de reformatage de code compatible avec les langages ressemblant au C.
    Je ne sais pas s'il gère les nommages de fichiers mais tu peux gérer beaucoup de choses pour ce qui concerne le code lui-même (nommage, indentation, parenthèses … )

    • [^] # Re: Uncrustify

      Posté par  . Évalué à 1.

      Pour ce qui est des noms de fichiers, il semble que git permette de tester des choses, par exemple le fait d'autoriser ou non les caractères ascii dans les noms de fichiers (voir le pre-commit.sample et/ou git config hooks.allownonascii)

  • # réponse commune

    Posté par  (site web personnel) . Évalué à 2.

    Salut à tous,
    j'ai réussi à faire localement ce que je voulais en utilisant effectivement des "formateurs" de code.

    • En utilisant clang-format je fais la mise en forme physique, c'est-à-dire la disposition des éléments de structuration du code les uns par rapport aux autres. C'est super puissant et ça marche plutot bien.
    • En utilisant clang-tidy je fais plutôt de la syntaxe et je peux vérifier vraiment beaucoup de choses; c'est vraiment top.

    Maintenant, il me reste à mettre en place les hooks qui me permettront d'inviter les contributeurs à respecter les règles en vigueur dans le dépôt. En plus je pense que certains éléments ne peuvent pas être vérifiés autrement. Je pense aussi que je peux coupler ça avec le CI/CD pour renforcer les vérifications.

    En tout cas, merci à tous pour votre aide.

    OL

    Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.