Detekt : Un analyseur statique de code pour améliorer la qualité de votre code Kotlin

Detekt est un analyseur statique de code capable de vous pointer de très nombreux points d’amélioration sur votre code Kotlin.

Julien Bouffard
L’Actualité Tech — Blog CBTW
3 min readMar 4, 2021

--

Detekt : un analyseur statique de code pour améliorer la qualité de votre code Kotlin
Kotlin — Photo by Marc Reichelt

Que ce soit sur un projet back-end ou Android, en local ou sur votre CI, Detekt vous remontera les écarts aux bonnes pratiques de développement communément acceptées.

Pour l’exemple, nous allons l’intégrer sur un projet Android et l’inclure dans une CI à l’aide de Github actions. C’est bien sûr à adapter en fonction du projet.

L’installation via Gradle

Dans le fichier build.gradle du projet, il nous faut rajouter la dépendance et le plug-in.

build.gradle

Dans le fichier build.gradle de votre module, il faudra apply le plug-in pour lui permettre d’ajouter les nouvelles Tasks au build.

build.gradle

Il existe de nombreuses options de configuration pour générer les rapports, lancer les tâches detekt sur certains builds et fournir le fichier de configuration sur les règles d’analyse de code à appliquer.

Dans ce cas, j’ai un fichier detekt.yml à la racine de mon projet. Je l’indique dans la configuration du plug-in.

config = files(rootDir.absolutePath + “/detekt.yml”)

Par défaut, Detekt utilisera ce fichier detekt. Il est conseillé de le personnaliser pour coller aux pratiques de l’équipe du projet.

Exemples de règles à activables ou désactivables

Voici des exemples de règles à activer ou désactiver selon l’équipe en place.

Detekt en action

Une fois Detekt installé et configuré sur le projet, un simple gradlew detekt lance la tâche detekt et génère le rapport de l’analyse. Dans mon cas, dans le fichier build/detekt/report.html

Le rapport récapitule par catégorie les points d’amélioration et les lignes posant problème.

On retrouve des catégories du simple formatage du code aux optimisations de code trop complexe à lire ou à l’usage de scope global pour lancer une coroutine, etc.

https://detekt.github.io/detekt/reporting.html#html

Intégration de detekt dans une CI avec Github actions

Afin de garantir un code de qualité et uniformisé dans l’équipe, rien de mieux que de l’inclure dans la CI.

Deux solutions :

  • La meilleure : utiliser l’action github detekt all.
  • La pragmatique : lancer la task detekt de notre projet et la paramétrer pour que le build ne fail pas en cas de remontée de problèmes.

La meilleure solution

Nous lui passons notre fichier de configuration detekt.yml. Si Detekt rapporte des trous dans les bonnes pratiques définies par l’équipe, le build fail et protège le projet de dérives.

La solution pragmatique

En cas de projet legacy, il se peut que le rapport detekt soit très long à corriger. Pour ne pas bloquer les développements et déploiements tout en améliorant petit à petit la qualité du code, on peut lancer la task gradle avec en configuration cette ligne pour éviter que le build fail en cas d’erreurs.

ignoreFailures = true

Ici, on lance la tâche gradle detekt paramétrée plus haut et on télécharge le rapport en artifact pour suivre les améliorations à apporter.

Le build ne fail pas mais remonte le rapport afin de vérifier que les dérives n’aillent pas crescendo.

Pour aller plus loin

Si vous avez trouvé cet article intéressant, je vous invite à découvrir d’autres articles sur des POC que j’ai expérimenté avec ARCore et la réalité augmentée :

--

--