Code Review Coding New Products News Releases

Qodana 2023.1 : Configuration de profils flexible, Prise en charge de la migration vers le compilateurKotlin/JS IR, Vérification de la compatibilité des licences pour Go, intégration des plugins, et plus de 30 nouvelles Inspections

Read this post in other languages:

Actuellement en version Preview, Qodana est la plateforme de contrôle de la qualité du code intelligente de JetBrains. Ce puissant moteur d’analyse statique intègre les inspections des IDE de JetBrains à n’importe quel pipeline de CI et exécute les vérifications fortement consommatrices de ressources sur le serveur de CI, ce qui vous fait gagner du temps et économiser des ressources informatiques. Avec Qodana, vous bénéficiez de la prise en charge de plus de 60 technologies et pouvez analyser un nombre illimité de lignes de code.

La dernière mise à jour de Qodana introduit des améliorations majeures pour vous aider à assurer la qualité de votre code. Cette version 2023.1 améliore considérablement la flexibilité de l’étape d’analyse statique de votre pipeline de CI. Elle permet par ailleurs la configuration intelligente des vérifications pour l’analyse de vos projets et introduit un moyen simple d’ajouter des plugins au moteur d’analyse statique Qodana. 

Poursuivez votre lecture pour en découvrir les principales nouveautés ou consultez directement les informations sur les améliorations spécifiques au linter. 

Essayer Qodana gratuitement

Principales nouveautés 

Configuration de profils flexible grâce au nouveau format YAML

Les profils d’inspection ont un rôle essentiel dans la configuration de Qodana. Ils définissent un ensemble d’inspections que Qodana applique ensuite à votre code lors de son analyse.

La version 2023.1 de Qodana fournit des capacités de configuration de profil flexibles dans un format YAML lisible par l’homme, afin de faciliter la personnalisation de votre profil d’inspection et son ajustement au fur et à mesure de l’avancement de votre projet. Voici les possibilités dont vous disposer pour affiner votre analyse :

  • [NOUVEAU] Regrouper des inspections et gérer ces groupes. 
  • [NOUVEAU] Inclure les profils existants et en configurer de nouveaux. 
  • Activer et désactiver les inspections.
  • Configurer les paramètres des inspections. 
  • Configurer la portée des inspections. 

Vous pouvez par exemple exclure l’inspection PhpDeprecationInspection du linter Qodana for PHP et utiliser la catégorie d’inspection PHP/General.

name: "PHP/General without PhpDeprecationInspection"
inspections:
  - group: "category:PHP/General"
    enabled: true # Enable the 'PHP/General' category
  - inspection: PhpDeprecationInspection
    enabled: false # Disable the PhpDeprecationInspection inspection

Consultez la documentation pour en savoir plus sur les profils personnalisés. 

Refactorisation majeure des profils par défaut

Qodana propose deux types de profils par défaut : qodana.starter, idéal pour l’analyse initiale du projet, n’est utilisé que pour les vérifications vitales, et qodana.recommended permet d’effectuer une série d’inspections présélectionnées largement adaptées à la plupart des projets.

Nous avons réécrit les deux profils pour les aligner sur le profil par défaut fourni dans nos IDE. Cela donne une meilleure vue d’ensemble des inspections fournies par les profils et vous assure que les inspections effectuées par Qodana et votre IDE sont en grande partie les mêmes, ce qui favorise une approche plus cohérente de la qualité du code. 

Le profil qodana.recommended actualisé est disponible sur GitHub. Ce profil correspond au profil par défaut de l’IDE, à quelques exceptions près :

  • Pour une analyse plus légère, toutes les inspections globales sont désactivées, car elles peuvent prendre beaucoup de temps.  
  • Certains répertoires de projet, comme les répertoires de build et les sources de test, sont exclus de l’analyse par défaut.

Le profil qodana.starter actualisé est aussi disponible sur GitHub. Ce profil est dérivé du profil qodana.recommended et n’effectue que les vérifications essentielles. Voici les principales modifications que nous y avons apportées :

  • Les inspections avec la sémantique codestyle and code conventions sont désactivées. 
  • Les inspections sont désactivées pour les parties non exécutables de la base de code (par exemple les commentaires Javadocs).

Possibilité d’ajouter facilement des plugins à Qodana

Si vous souhaitez étendre les capacités de Qodana en utilisant des plugins d’inspection de JetBrains Marketplace, il vous suffit d’ajouter leurs identifiants à votre fichier qodana.yaml

Grâce aux récentes mises à jour de la Marketplace, vous pouvez désormais copier l’identifiant d’un plugin directement à partir de sa page. 

Il y a deux moyens d’installer les logiciels tiers requis pour vos plugins :

  • Utiliser l’option bootstrap.
  • Développer un Dockerfile personnalisé qui commence par FROM jetbrains/qodana… Vous pouvez utiliser les exemples de Dockerfile Qodana disponibles sur GitHub.

Voici une quelques-uns des plugins les plus populaires susceptibles de vous intéresser :

  • Grazie Professional offre une assistance avancée pour l’écriture en langage naturel, avec la correction de l’orthographe et de la grammaire, la saisie semi-automatique en langage naturel, et d’autres outils pour la rédaction et l’édition de textes. 
  • CheckStyle permet de vérifier les fichiers Java en temps réel ou à la demande depuis IntelliJ IDEA.
  • Zero Width Characters Locator ajoute une inspection qui permt d’éviter certains bugs difficiles à trouver en lien avec les caractères d’espacement invisibles dans le code source et les ressources. 

Vous pouvez trouver d’autres plugins en utilisant la fonction de recherche sur la Marketplace JetBrains. 

Veuillez noter que Qodana ne prend pas en charge les plugins payants et qu’il est possible que certains plugins ne soient pas compatibles avec la version actuelle. Nous travaillons à l’introduction de vérifications de compatibilité appropriées pour les plugins Qodana sur la Marketplace.

Mises à jour spécifiques au linter

Nouvelles inspections JVM dans Qodana 

Inspections pour le compilateur Kotlin / JS IR

L’équipe Kotlin a inauguré un nouveau compilateur IR qui prend en charge la migration de code source Kotlin vers JavaScript. Pour faciliter le processus de migration et détecter les erreurs potentielles, Qodana prend désormais en charge les inspections suivantes :

NonExternalClassifierExtendingStateOrProps

L’utilisation d’interfaces et de classes Kotlin (y compris les classes de données) dérivées de classes JS pures, telles que State et Props de React, peut entraîner des ClassCastExceptions. Ces exceptions sont dues au fait que le compilateur essaye de traiter les instances de ces classes comme s’il s’agissait d’objets Kotlin, alors qu’elles proviennent de JS.

La solution est de convertir toutes les classes et interfaces dérivées de classes JS pures en interfaces externes. Qodana signalera les utilisations d’extensions de classificateurs non externes de State ou Props

NonVarPropertyInExternalInterface

Les interfaces externes dans le code Kotlin / JS ne peuvent pas avoir de propriétés en lecture seule (val) car leurs valeurs ne peuvent être attribuées qu’après la création des objets avec js() ou jso(). La solution consiste à convertir toutes les propriétés des interfaces externes en var.

Qodana mettra en évidence toutes les propriétés autres que var afin que vous puissiez les convertir.

SpringTransactionalMethodCallsInspection

Le framework Spring vous permet de gérer les transactions d’une application un utilisant les annotations de code. Seuls les appels externes d’une méthode marquée par `@Transaction` s’exécutent sous une transaction. Les auto-invocations ne démarrent pas une nouvelle transaction. Avec cette nouvelle inspection, Qodana met en évidence ces cas qui peuvent générer des erreurs dans la gestion des transactions.

JUnitMixedFramework

L’utilisation de plusieurs versions de JUnit dans un projet peut entraîner des erreurs si les développeurs mélangent accidentellement plusieurs versions dans un même scénario de test. Voici un exemple avec le code suivant :

Le test est exécuté avec JUnit4, donc l’annotation BeforeEach de JUnit5 ne sera pas traitée, et le test échouera avec une NullPointerException. 

Par défaut, Qodana ne vérifie pas les sources de tests. Pour inclure cette inspection, il faut ajouter la configuration suivante à qodana.yaml :

include:
  - name: JUnitMixedFramework
    paths:
    - <path-to-tests-directory>

MathRoundingWithIntArgument

Cette inspection signale les appels aux méthodes round(), ceil(), floor() et rint() pour Math et StrictMath. L’appel de ces méthodes sur un entier est redondant et indique qu’une erreur s’est produite commise, par exemple la division accidentelle d’un entier.

Essayer Qodana pour la JVM

Audit de licences tierces pour Go

Si vous utilisez des composants open source, externalisez le développement ou réutilisez du code provenant de services tels que GitHub, vous devez vous assurer d’utiliser les licences appropriées. Il peut arriver d’importer une bibliothèque avec une licence restrictive dans la base de code d’un logiciel ou d’oublier de mettre à jour une licence expirée. Dans un tel cas, l’organisation s’expose à des risques juridiques et sa réputation peut s’en trouver affectée. 

Pour réduire ces risques, nous avons introduit l’année dernière une fonctionnalité d’audit de licences pour Java, Kotlin, PHP et JavaScript, et cette version ajoute la prise en charge de Go. Qodana répertorie les licences des dépendances dans un référentiel analysé et vous avertit en cas de problème concernant leur compatibilité avec les licences du projet, comme dans l’exemple ci-dessous :

Voici à quoi ressemble la liste des licences des dépendances :

Essayer Qodana pour Go

Mises à jour pour .NET

Le profil d’inspection respecte désormais les paramètres du référentiel

Auparavant, les paramètres du niveau de gravité des inspections dans le profil d’inspection pour le linter .NET étaient basées sur les valeurs par défaut provenant de ReSharper. Cette approche entraînait la duplication de paramètres lorsqu’un projet utilisait déjà des couches de configuration de solution et de projet de ReSharper et de Rider ainsi que des fichiers .editorconfig stockés dans le référentiel. Si on apportait des modifications à l’une de ces couches, il fallait les répercuter dans le profil YAML de Qodana. 

Désormais, le profil d’inspection hérite automatiquement des paramètres de ReSharper et du fichier .editorconfig s’ils sont fournis dans le référentiel. Plus besoin de travail manuel ! 

La section des paramètres de configuration YAML de Qodana a été renommée

Le fichier de configuration qodana.yaml contenait auparavant une section dot-net dans laquelle on pouvait spécifier les solutions ou les projets à ouvrir, ainsi que les options de configuration et de plateforme. Cette section a été renommée dotnet et l’appellation dot-net sera supprimé dans la version 2023.2 de Qodana.

Essayer Qodana pour .NET

Comment passer à Qodana 2023.1

Si vous exécutez Qodana avec la balise Docker latest, vous n’avez aucun changement à faire. Si ce n’est pas le cas, vous devez effecter la mise à jour vers la version 2023.1 dans le workflow de CI pour lequel vous utilisez Qodana. Pour en savoir plus sur les intégrations de CI existantes, consultez la documentation.   

Les inspections ne sont pas toutes activées automatiquement. Pour exclure ou inclure certaines inspections de votre analyse, vous pouvez personnaliser votre profil d’inspection. 

 

Voilà pour les principales nouveautés de Qodana 2023.1 ! Pour plus de détails, consultez les notes de publication. Nous espérons que vous apprécierez cette nouvelle version. Si vous avez des suggestions pour de futurs sujets d’articles ou souhaitez en savoir plus sur la façon dont Qodana peut vous aider, laissez un commentaire ci-dessous, taguez-nous sur Twitter ou écrivez-nous à qodana-support@jetbrains.com.

Bon développement et veillez à maintenir votre code propre !

L’Équipe Qodana

Écrivez du code dont vous pouvez être fier

Article original en anglais de :

Delphine Massenhove

Valerie Kuzmina

image description

Discover more