Clazy

Les développeurs KDE ne sont pas en reste pour ce qui est des outils pour aider à améliorer la qualité du code.

Sérgio Martins a développé “Clazy” un outils qui utilise Clang pour rechercher et avertir de certaines améliorations à faire dans votre code. Certains de ces plugins peuvent directement modifier le code source.

Comment le builder ?

Déjà récupérer le code source git clone git://anongit.kde.org/clazy

Il faut clang-devel >= 3.6

Ensuite il faut le builder et cela contre clang.

mkdir build && cd build && cmake  -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_INSTALL_PREFIX=<path> …/ && make install

Maintenant il faut s’assurer que <path>/lib64/ est dans votre LD_LIBRARY_PATH sinon ça ne marchera pas.

Dès que tout cela est fait vous pouvez l’essayer sur un projet.

Comment l’utiliser ?

Il faut export la variable CXX

export CXX=”clazy”

Ensuite il faut dire ce que vous voulez évaluer.

Si vous voulez avoir tous les warning reportés par clazy, il suffit d’exporter une deuxième variable:

export CLAZY_CHECKS=all_checks

Après il faut reconfigurer le build sur votre projet

cmake -DCMAKE_INSTALL_PREFIX=<path> ../

et là vous aller pouvoir voir tous les variables et les infos résultant.

Les divers plugins:

  • bogus-dynamic-cast
  • foreacher
  • global-const-char-pointer
  • inefficient-qlist
  • qstring-uneeded-heap-allocations
  • qstring-arg
  • qstring-ref
  • function-args-by-ref
  • qmap-with-key-pointer
  • non-pod-global-static
  • reserve-candidates
  • variant-sanitizer
  • virtual-call-ctor
  • missing-typeinfo
  • implicit-casts
  • old-style-connect
  • detaching-temporary
  • assert-with-side-effects
  • qgetenv

Comment faire les fixes directement dans le code?

C’est très simple :) Il suffit de le dire à Clazy en exportant la variable CLAZY_FIXIT

Par exemple:

export CLAZY_FIXIT=”fix-missing-qstringref”

Il y a que quelques plugins qui permettent la modification directe.

export CLAZY_FIXIT=”fix-old-style-connects” (change le style de connexion signal/slots (la nouvelle API qui est arrivée avec Qt5)
export CLAZY_FIXIT=”fix-missing-qstringref” (ça adapte le code pour utiliser const + ref lorsque c’est possible)
export CLAZY_FIXIT=”fix-fromCharPtrAllocations” (les 3 autres c’est pour réduire l’allocation lors de l’utilisation des QString)
export CLAZY_FIXIT=”fix-qlatin1string-allocations”
export CLAZY_FIXIT=”fix-fromLatin1_fromUtf8-allocations”

CLAZY_FIXIT ne permet pas de faire tout ensemble c’est un plugin par compilation ce qui est un peu logique car changer un fichier en court de route et remodifier encore derrière serait très risqué)

Mais pour fixer kde j’ai créé un script. Vous pouvez l’utiliser clazy-compile

il suffit de le renommer en .sh et le l’exécuter il fait tout pour vous.

Le futur ?

Ben il y a toujours des vérifications de code à faire et des optimisations donc ça va continuer. Mais j’en sais pas plus :)

Trackback

only 1 comment untill now

  1. morice.net @ 2015-11-23 14:03

    Merci pour le tuto et le script très facilement adaptable, tout est clair et clean!

Add your comment now