Quand on développe des packages ou des projets R en équipe, une question revient vite : comment s'assurer que le code reste propre, testé et maintenable, sans avoir à déployer une usine à gaz de type SonarQube ? C'est exactement le problème que résout rsonar, un nouveau package R cité cet été dans le rweekly.
Le principe : un SonarQube pensé pour R
rsonar part d'un constat simple : l'écosystème R dispose déjà d'excellents outils d'analyse de qualité (lintr, styler, covr, goodpractice), mais chacun produit son propre rapport, dans son propre format, sans vue d'ensemble. rsonar vient les orchestrer et centraliser leurs résultats dans un rapport unique, interactif, avec une estimation de la dette technique — un peu comme le ferait SonarQube pour d'autres langages.
| Outil | Rôle |
|---|---|
lintr |
Analyse statique — bugs, style, complexité |
styler |
Formatage du code (style tidyverse) |
covr |
Couverture de tests |
goodpractice |
Bonnes pratiques de packaging R |
Le package reprend même le vocabulaire de SonarQube pour rester familier aux équipes qui en ont l'habitude : les issues de lintr deviennent les "issues", la couverture covr alimente le "Coverage", et un véritable Quality Gate (quality_gate()) permet de fixer des seuils bloquants (couverture minimale, zéro erreur de lint, etc.).
Un usage pensé pour tous les contextes
Ce qui rend rsonar particulièrement pratique, c'est qu'il s'utilise aussi bien en local que dans une CI :
-
En local, pour un feedback instantané : la fonction
quality_score(".")affiche directement un pourcentage de qualité et une note (A à E) dans la console de l'IDE, sans configuration de CI ni de forge. -
En profondeur, pour une analyse complète :
sonar_analyse()lance l'ensemble des outils sur un package et retourne un objet exploitable par toutes les autres fonctions.
Parmi les fonctionnalités clés :
-
sonar_report()génère un rapport HTML interactif. -
debt_index()calcule un indice de dette technique noté de A à E, à la manière du "Maintainability Rating" de SonarQube. -
sonar_hotspots()classe les fichiers à corriger en priorité, en fonction de leur dette technique. -
sonar_diff()compare deux analyses pour détecter des régressions de qualité entre deux versions. -
sonar_trend()permet de suivre l'évolution de la qualité dans le temps. -
export_sonar_json(),export_sarif()etexport_junit()exportent les résultats dans des formats standards, respectivement compatibles avec l'import générique d'issues SonarQube, le Code Scanning GitHub (SARIF), et les artefacts de tests GitLab CI (JUnit XML).
La correction automatique avec air
Autre atout notable : l'intégration avec air, le formateur de code R rapide développé par Posit. Avec sonar_fix(), rsonar peut :
- installer
airviainstall_air(); - formater automatiquement l'ensemble des fichiers R du projet ;
- et, en une seule option, ouvrir directement une Merge Request ou une Pull Request avec les corrections.
library(rsonar)
# Voir ce qui serait modifié, sans rien changer
fix <- sonar_fix(".", dry_run = TRUE)
# Corriger automatiquement le style du code
fix <- sonar_fix(".")
# Corriger ET ouvrir une Merge Request
fix <- sonar_fix(".", create_mr = TRUE)
Le point fort : la création automatique de MR/PR
C'est sans doute la fonctionnalité la plus intéressante pour un usage en équipe : intégré dans une pipeline CI, rsonar peut ouvrir tout seul une Merge Request (GitLab) ou une Pull Request (GitHub) contenant les corrections de style. Le job rsonar-fix est conçu comme une tâche manuelle optionnelle de la pipeline :
- installation du formateur
air; - exécution de
sonar_fix()sur l'ensemble des fichiers R ; - ouverture automatique d'une MR/PR avec les changements.
Résultat : plus besoin de reformater son code à la main avant de commiter, ni de faire des allers-retours en revue de code sur de simples questions de style. Un développeur déclenche le job, et une MR toute prête arrive avec le diff de mise en forme — il ne reste plus qu'à la relire et la fusionner.
Deux dépôts GitLab illustrent concrètement ce fonctionnement :
-
rproject_for_rsonar : un projet R d'exemple, qui sert de terrain de test pour exécuter
rsonar"en conditions réelles" et déclencher la génération automatique de MR. -
ci-templates-r : un dépôt de templates de pipelines CI réutilisables, dans lequel est notamment défini le job
rsonar-fixqui orchestre l'installation d'air, le passage desonar_fix()et la création de la Merge Request.
En combinant les deux, une équipe peut brancher rsonar sur n'importe quel projet R en quelques lignes de configuration GitLab CI, et bénéficier immédiatement d'un contrôle qualité centralisé... jusqu'à la correction automatisée du style de code, sans jamais quitter sa forge.
Pour aller plus loin, la documentation complète du package est disponible sur ddotta.github.io/rsonar, avec notamment un article dédié à l'intégration CI/CD.
This article was originally published by DEV Community and written by Damien Dotta.
Read original article on DEV Community