Script d'analyse statique de code C++


#1

Hello,

Dans ma boite, on est censé suivre des guidelines de style pour le code que l’on produit (une variable privée comme par m_, pas de variables publiques dans une classe, etc.). Comme on est une acquisition à la base, une partie de notre code n’est pas au standard. Le but est de le passer progressivement. Par contre tout nouveau bout de code doit suivre le standard. On a la chance d’avoir accès à ReSharper C++, qui possède tout une batterie d’analyse statique pour vérifier ce genre de chose.
J’aimerai intégré une sorte de métrique dans notre système d’intégration continue avec le nombre d’“erreurs” vis-à-vis du standard. Malheureusement, je n’ai pas trouvé grand chose sur Internet pour ce problème. Il y a cpplint mais qui suit les standards Google (pas les mêmes que le notre). Je suis tombé sur cette liste mais j’ai l’impression que c’est majoritairement de l’analyse statique pour trouver des bugs, alors que je cherche plus un analyseur de style. J’imagine que CLang serait capable de faire ce que je souhaite, mais ça nécessiterai un effort de dev’ qui n’est pas possible actuellement.
Est-ce que vous connaissez des outils (préférablement gratuit) qui serait capable de faire ce dont j’ai besoin ?
Merci


#2

Une grosse partie de l’analyse que propose Resharper C++ provient de clang-tidy (je ne sais pas si c’est à lui que tu te réfères quand tu parles de Clang, qui est un front-end compiler). Tu penses qu’il est si complexe que ca de parser l’output de clang-tidy pour extraire des metriques?

Pour pc-lint de Gimpel ('memba the Bug of the Month dans les magazines :older_man: ?), un gars a bricolé un truc qui analyse l’output.


#3

De mon côté c’est plutôt Java et on a utilisé (utilise encore) SonarQube pour ce genre de besoin…

Apparemment ça existe également pour le C++ : https://www.sonarsource.com/products/codeanalyzers/sonarcfamilyforcpp.html


#4

Le plugin C++ pour Sonar est payant, contrairement au Java intégré de base.
Si je comprend bien les nouvelles licences Sonar, ça se paye au nombre de lignes de code analysées, et ça peut monter assez vite. Donc méfiance.
Pour analyser la partie PL/SQL sur nos projets on a trouvé un plugin alternatif open-source et gratuit qui nous suffit… si ça se trouve des gens ont fait pareil pour C++ ?


#5

Ah zut… pas cool ça… :confused:


#6

clang-tidy devrait pouvoir faire l’affaire effectivement, même si ça va être un peu chiant de parser le bazar (mais bon j’ai fait pire). Par contre, en lisant la doc, je ne comprends pas de quoi j’ai besoin pour bien faire fonctionner le tout. Est-ce qu’il faut que je build avec clang (auquel cas ça risque d’être coton) ? Est-ce qu’il y a un tuto avec Windows comme exemple ?

Edit: j’ai essayé de suivre cet exemple minimal mais je n’ai pas l’impression que ça fonctionne (aucun output).


#7

Pas besoin de creer de build basé sur Clang, puisque d’après ce que je vois dans la doc, tu passes le path des sources en paramètre. Il te reste à obtenir la liste de te fichiers sources. Soit effectivement en utilisant CMake, ou avec un script maison dans le language de ton choix.

Comme tu es sous VS, jette un oeil a l’extension Clang Power Tools. C’est concu pour l’IDE, mais en bas de la page de description, tu trouves 2 scripts PowerShell pour CI et automation.


#8

De tout ce que j’ai pu testé, ça marche sous Linux mais pas moyen de faire marcher l’affaire sous Windows (notamment les checks readability-identifier-naming qui m’intéressent particulièrement). C’est pas forcément bloquant mais c’est pénible pour le dev comme je suis sous Windows :frowning: J’ai testé la même version des deux côtés (3.8.0) et sous Windows j’ai 0 warnings alors que j’en ai sous Linux (avec même fichier et même ligne de commande).