Qodana 2023.1 disponible : la plateforme de contrôle de la qualité de code de JetBrains
vient avec une configuration de profil plus flexible et plus de 30 nouvelles inspections

Actuellement en préversion, Qodana est une plateforme de contrôle de qualité de code intelligente développée par JetBrains. Ce puissant moteur d'analyse statique apporte les inspections des EDI JetBrains à n'importe quel pipeline CI, exécute des vérifications gourmandes en ressources sur le serveur CI et vous fait gagner du temps et des ressources informatiques.

Une nouvelle version de Qodana est disponible avec des améliorations majeures pour vous aider à vous assurer que votre code est de la plus haute qualité. La version 2023.1 apporte beaucoup plus de flexibilité à l'étape d'analyse statique de votre pipeline CI. JetBrains a introduit un moyen intelligent de configurer les vérifications pour analyser vos projets, et a mis en place peut-être le moyen le plus simple d'ajouter des plugins à votre moteur d'analyse statique Qodana.

Mises à jour majeures

Configuration de profil flexible avec le nouveau format YAML

Les profils d'inspection sont un élément clé de votre configuration Qodana. Ils définissent un ensemble d'inspections que Qodana appliquera à votre code lors de l'exécution de son analyse.

À partir de la version 2023.1, Qodana fournit des capacités de configuration de profil flexibles au format YAML, ce qui facilite encore plus la personnalisation de votre profil d'inspection et son ajustement au fur et à mesure de l'avancement de votre projet. Voici les options pour affiner votre analyse :

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

Par exemple, vous pouvez exclure l'inspection PhpDeprecationInspection du linter Qodana pour PHP tout en inspectant votre code en utilisant la catégorie PHP/General.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
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

Refactorisation majeure des profils par défaut

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

JetBrains a réécrit les deux profils, en les alignant sur le profil par défaut fourni dans ses EDI. Ce changement offre plus de transparence et vous permet de vous assurer que les inspections effectuées par Qodana et votre EDI sont pour la plupart les mêmes, facilitant une approche plus cohérente de la qualité du code.

Le profil qodana.recommended mis à jour est disponible sur GitHub. Ce profil correspond au profil EDI par défaut à 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 build et les sources de test, sont exclus de l'analyse par défaut.

Le profil qodana.starter mis à jour est également disponible sur GitHub. Ce profil est dérivé du profil qodana.recommended et n'effectue que des vérifications vitales. Voici les principaux changements apportés :

  • Les inspections avec la sémantique du style de code et des conventions de code sont désactivées.
  • Les inspections sont désactivées pour les parties non exécutables de la base de code (par exemple, Javadocs).

Un moyen facile d'ajouter des plugins à Qodana

Si vous souhaitez étendre Qodana et utiliser les plugins d'inspection de JetBrains Marketplace, il vous suffit d'ajouter leurs ID à votre fichier qodana.yaml. Grâce aux récentes mises à jour de Marketplace, vous pouvez désormais copier l'ID d'un plugin directement depuis sa page.


Voici quelques plugins notables et populaires que vous voudrez peut-être essayer :

  • Grazie Professional, qui offre une assistance avancée à l'écriture en langage naturel, comprenant une vérification orthographique, une correction grammaticale, une complétion en langage naturel et d'autres outils utiles pour l'écriture et l'édition de texte.
  • CheckStyle, qui fournit à la fois une analyse en temps réel et à la demande des fichiers Java avec CheckStyle depuis IntelliJ IDEA.
  • Zero Width Characters Locator, qui ajoute une inspection qui empêche certains bogues difficiles à trouver liés aux caractères invisibles de largeur nulle dans le code source et les ressources.

Vous pouvez trouver plus de plugins sur JetBrains Marketplace.

Notons que Qodana ne prend actuellement pas en charge les plugins payants, et il peut encore y avoir des plugins qui ne sont pas compatibles avec la version actuelle. JetBrains travaille pour introduire des contrôles de compatibilité appropriés pour les plugins Qodana sur sa marketplace cette année.

Mises à jour spécifiques au linter

Nouvelles inspections JVM dans Qodana

Inspections pour le compilateur IR Kotlin/JS

L'équipe Kotlin a introduit un nouveau compilateur IR qui prend en charge la migration de votre code source Kotlin vers JavaScript. Pour faciliter le processus de migration et repérer 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) qui dérivent de classes JS pures, telles que State et Props de React, peut provoquer des ClassCastExceptions. De telles exceptions se produisent parce que le compilateur tente de travailler avec des instances de ces classes comme s'il s'agissait d'objets Kotlin, bien qu'ils proviennent en réalité de JS.

    La solution consiste à convertir toutes les classes et interfaces qui dérivent de classes JS pures en interfaces externes. Qodana signalera les utilisations non externes d'extension de classificateur de State ou Props.


  • NonVarPropertyInExternalInterface : les propriétés des interfaces externes dans le code Kotlin/JS ne peuvent pas être des 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 qui ne sont pas var afin que vous puissiez les convertir.


SpringTransactionalMethodCallsInspection

Le framework Spring vous permet de gérer les transactions d'application à l'aide d'annotations de code. Seuls les appels externes d'une méthode marquée par '@Transaction' sont exécutés sous la transaction, ce qui signifie que l'auto-invocation ne démarre pas une nouvelle transaction. Avec cette nouvelle inspection, Qodana met en évidence de tels cas, car ils peuvent entraîner des erreurs dans la gestion des transactions.


JUnitMixedFramework

Avoir plusieurs versions de JUnit dans un projet peut entraîner des erreurs dues au fait que les développeurs mélangent par inadvertance différentes versions dans un cas de test. Par exemple, considérez 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 NullPointerException.

Par défaut, Qodana ne vérifie pas les sources de test, donc pour inclure cette inspection, vous devez ajouter la configuration suivante à qodana.yaml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
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 a été commise, comme une division entière accidentelle.


Audit de licence tierce pour Go

Si vous comptez sur des composants open source, externalisez le développement ou réutilisez le code de services tels que GitHub, vous devez vous assurer que vous utilisez les licences appropriées. Vous pouvez accidentellement importer une bibliothèque avec une licence restrictive dans une base de code logicielle ou oublier de mettre à jour une licence expirée. Si vous le faites, votre organisation peut être sujette à des risques juridiques et de réputation.

Pour minimiser ces risques, JetBrains a introduit l'année dernière une fonctionnalité d'audit de licence pour Java, Kotlin, PHP et JavaScript. Dans cette version, l'éditeur de logiciels pour développeurs a ajouté la prise en charge de Go. Qodana listera les licences de dépendances dans un référentiel analysé et vous avertira de tout problème concernant leur compatibilité avec les licences du projet, comme dans l'exemple ci-dessous :


Voici à quoi ressemble la liste des licences de dépendance :


Mises à jour pour .NET

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

Auparavant, les paramètres de sévérité de l'inspection dans le profil d'inspection pour le linter .NET étaient basés sur les valeurs par défaut obtenues à partir de ReSharper. Cependant, cette approche a conduit à la duplication des paramètres lorsqu'un projet utilisait déjà les couches de configuration de solution et de projet de ReShaper et Rider avec les fichiers .editorconfig stockés dans le référentiel. Cela signifiait que si vous apportiez des modifications à l'une de ces couches, vous deviez apporter la même modification au profil Qodana YAML.

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

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

Le fichier de configuration qodana.yaml contenait auparavant une section dot-net, qui permettait de spécifier les solutions ou projets à ouvrir, ainsi que les options de configuration et de plateforme. Cette section a été renommée dotnet et la notation dot-net sera obsolète à partir de la version 2023.2 de Qodana.

Comment passer à Qodana 2023.1

Si vous exécutez Qodana avec la balise Docker latest, aucune modification n'est nécessaire. Si ce n'est pas le cas, faites la mise à jour vers la version 2023.1 dans le flux de travail CI pour lequel vous utilisez Qodana. Vous pouvez en savoir plus sur les intégrations CI existantes dans la documentation de JetBrains.

Précisons avant de terminer que toutes les inspections ne sont pas automatiquement activées. Pour exclure ou inclure certaines inspections dans votre analyse, vous devrez peut-être personnaliser votre profil d'inspection.

Voici présentées les principales nouveautés et améliorations de Qodana 2023.1. Vous trouverez plus de détails dans les notes de version.

Découvrez et téléchargez Qodana (pour JVM, PHP, Python, JS, GO, .NET)