Qodana est donc une plateforme de contrôle de la qualité du code qui identifie et suggère des correctifs pour les bogues, les vulnérabilités de sécurité, les duplications et les imperfections directement dans votre système d’intégration et livraison continues.
Qodana se compose de deux parties principales : un moteur IntelliJ IDEA sans interface graphique, conçu pour être utilisé dans un pipeline CI comme un outil de «linter» typique, et une interface utilisateur de reporting Web interactive. Qodana est conçu pour faciliter la mise en place de flux de travail pour obtenir une vue d'ensemble de la qualité du projet, définir des objectifs de qualité et suivre l'avancement de ceux-ci. Il est possible d'ajuster la liste des vérifications appliquées au projet et inclure ou supprimer des répertoires de l'analyse.
Qodana prend en charge GitHub Actions, GitHub App, GitLab CI/CD, TeamCity et Jenkins mais aussi une extension pour Azure Pipelines afin de garantir la meilleure qualité de code au sein du système de CI/CD que vous utilisez.
Qodana 2022.1
JetBrains a annoncé la disponibilité d'une mise à jour majeure de sa plateforme de contrôle de la qualité du code : Qodana 2022.1. License audit était un linter supplémentaire qui devait être configuré séparément des linters principaux. Avec cette mise à jour, il est désormais fourni directement avec Qodana. JetBrains a également ajouté plusieurs nouvelles inspections pour les linters PHP et JVM.
Audit de licences
Les pénalités légales et de conformité relatives aux licences non valides ou utilisées de manière inappropriée dans votre code peuvent être extrêmement coûteuses. Qodana permet d’analyser les dépendances dans votre référentiel de code pour vérifier les licences et identifier les sources de problèmes potentiels.
Cette nouvelle version de Qodana simplifie l’audit de licences de vos projets et l’intègre dans votre pipeline de CI/CD. La nouvelle fonctionnalité License audit est disponible pour tous les linters, notamment pour Python, Java, Kotlin, PHP et JavaScript.
Pour activer License audit, ajoutez les lignes suivantes dans le fichier qodana.yaml à la racine de votre projet :
Code : | Sélectionner tout |
1 2 | include: - name: CheckDependencyLicenses |
Code : | Sélectionner tout |
1 2 | dependencyIgnores: - name: "dependency/name" |
Cette version de Qodana inclut toutes les nouvelles inspections de PhpStorm 2022.1 et les ajoute à votre pipeline avec les linters PHP de JetBrains. PhpStorm est fourni avec Qodana, par conséquent, lorsque Qodana vous signale un problème dans votre code, vous pouvez ouvrir la notification directement dans votre EDI et examiner le code concerné.
Duplicate array key
Le comportement de array_merge() et la fusion avec l’opérateur + fonctionnent différemment en PHP. L’opérateur ne remplace pas la valeur si la clé est dupliquée. Comme cela peut être source de confusion et de bugs, Qodana for PHP met désormais ce type de cas en évidence.
Utilisation de count($array) as array index
Lors de l’ajout d’un élément à un tableau, il n’est pas nécessaire de spécifier explicitement l’index. Qodana for PHP peut vous prévenir en cas d’appel count() redondant.
Replace pow() call with **
PHP dispose d’un opérateur d’exponentiation ** depuis la version 5.6. Qodana for PHP suggèrera un correctif rapide directement dans PhpStorm (Alt+Entrée) afin de remplacer les anciens appels pow() par l’opérateur **.
Propriétés read-only
Les propriétés privées avec accès en lecture seule dans une classe peuvent être déclarées avec l’indicateur readonly. Qodana for PHP suggérera de mettre à jour la déclaration de propriété.
Constantes de classe Final
Depuis PHP 8.1, il est possible de déclarer les constantes de classes comme finales. C’est pourquoi Qodana for PHP vous avertit des constantes qui ne sont pas héritées et vous suggère de leur ajouter un modificateur final. Avec l’intégration de PhpStorm, vous pouvez basculer rapidement vers l’IDE pour corriger le problème.
Arguments de fonction rand en ordre inversé
Cette inspection met en évidence les appels de fonction appartenant à la famille rand pour lesquels l’argument max peut être inférieur à l’argument min. Par exemple, appeler rand(10, 1) équivaut à appeler rand(1, 10), mais mt_rand() est strict sur l’ordre de ses arguments.
Cible factice non valide avec PHPUnit
Qodana for PHP vous avertira si vous essayez d’accéder à une méthode privée ou finale sur un objet factice.
Redundant modifier
Cette nouvelle inspection signale les modificateurs qui sont utilisés dans les modèles d’expressions régulières mais n’affectent pas la correspondance :
- /i (insensibilité à la casse) dans les modèles qui ne contiennent pas de lettres.
- /D (PCRE_DOLLAR_ENDONLY) dans les modèles qui ne contiennent pas de signe dollar ou qui contiennent le modificateur \m (PCRE_MULTILINE).
- /s (point correspond aux sauts de ligne) dans les modèles qui ne contiennent pas de points.
Unsupported modifier
Cette inspection signale les utilisations du modificateur /e, qui est obsolète dans les versions PHP 7.0 et plus récentes.
Inspections Java et Kotlin
Cette version ajoute également de nouvelles inspections provenant d’IntelliJ IDEA 2022.1 dans Qodana for JVM. L’intégration avec IntelliJ IDEA permet d’ouvrir le code erroné directement dans l’EDI pour apporter un correctif rapide.
Voyons les inspections les plus significatives.
Suspicious back reference
Qodana for JVM trouve les références qui ne peuvent pas être résolues lors de l’exécution. L’inspection Suspicious back reference vous avertit si la référence arrière ne correspond à aucun texte. Une référence arrière ne peut pas être résolue si le groupe est défini après la référence arrière ou dans une branche différente d’une alternance.
“InputStream” and “OutputStream” can be constructed using ‘Files’ methods
Cette inspection signale les constructeurs FileInputStream et FileOutputStream lorsqu’ils peuvent être remplacés par Files.newInputStream() et Files.newOutputStream(), respectivement. Les flux (streams) créés avec les méthodes Files sont généralement plus efficaces que ceux qui sont créés par les constructeurs de flux.
Bulk ‘Files.readAttributes’ calls can be used instead of multiple file attribute calls
Cette inspection trouve les emplacements où plusieurs vérifications d’attributs java.io.File, telles que isDirectory, isFile, lastModified ou length, sont utilisées à la suite. Ces appels peuvent être remplacés par un appel groupé Files.readAttributes. La méthode groupée est généralement plus performante que les vérifications d’attributs multiples .
Loop can be replaced with ‘List.replaceAll()’
Cette inspection signale les boucles qui peuvent être réduites à un simple appel List.replaceAll().
Number of placeholders does not match the number of arguments in logging call
Qodana for JVM signale les appels de journalisation (logging) SLF4J ou Log4j 2, tels que logger.info(\"{}: {}\", key), dans lesquels le nombre de placeholders {} dans le message du logger ne correspond pas au nombre d’autres arguments dans l’appel de journalisation.
Regular expressions can be simplified
Cette inspection détecte les expressions régulières qui peuvent être simplifiées.
Pour exclure certaines inspections de votre analyse, vous pouvez personnaliser votre profil d’inspection par défaut ou en créer un nouveau. Vous pouvez aussi vouloir appliquer les inspections importantes selon vos directives de codage ou les bonnes pratiques.
Commencer avec Qodana