Qodana
The code quality platform for teams
Le programme d’accès anticipé de Qodana 2022.3 est disponible : Qodana pour .NET et Go et plus de 100 nouvelles inspections
Nous avons le plaisir d’annoncer l’ouverture du programme d’accès anticipé de Qodana 2022.3 EAP. Cette version de la plateforme apporte la prise en charge de .NET et de Go. Nous avons également ajouté 100 nouvelles inspections pour les langages qui étaient déjà pris en charge. Veuillez toutefois noter que les images Docker sont plus stables dans Qodana 2022.2 pour le moment.
Poursuivez votre lecture pour en savoir plus et essayez les nouvelles fonctionnalités !
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/Featured_image_1280x600_Qodana.png)
Nos tout nouveaux linters apportent toute l’intelligence de Rider et de GoLand pour vous permettre de détecter les anomalies dans le code et les bugs potentiels, d’éliminer le code mort, d’améliorer la structure globale du code et d’appliquer les meilleures pratiques à l’ensemble de vos projets .NET et Go !
Qodana pour .NET
Qodana prend en charge la quasi-totalité des inspections .NET fournies par Rider. La liste de ces inspections étant assez longue, nous vous invitons à consulter la documentation de Rider pour plus d’informations. En attendant, vous trouverez c-dessous quelques exemples d’inspections .NET que Qodana peut exécuter.
Inconsistent lock ordering
L’un des principaux problèmes lors de l’utilisation de verrous pour sécuriser des threads est d’éviter les blocages, par exemple lorsque les threads se bloquent mutuellement et empêchent l’exécution de progresser. Avec cette nouvelle inspection, Qodana met en évidence les cycles susceptibles de créer des problèmes lors de l’exécution.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/1-NET-order-of-locks.png)
Access to modified captured variable
Qodana pour .NET détecte l’accès à la variable capturée par une méthode anonyme lorsque cette variable est modifiée de façon externe.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/2-NET-access-to-modified.png)
Avoid using ‘async’ lambda when delegate type returns ‘void’
Cette inspection détecte l’utilisation d’expressions lambda « async » : les exceptions non gérées par la lambda n’affecteront jamais le thread appelant et ne seront pas interceptées par la clause catch.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/3-NET-Avoid-async-lambda.png)
Type check and casts can be merged
L’opérateur de test de type is
dans sa forme classique (Expression is Type)
, renvoie true
uniquement lorsque le type d’exécution de Expression
est compatible avec Type
et si le résultat de Expression
n’est pas null
.
Lorsque nous utilisons is
pour vérifier la compatibilité avant le cast, comme dans l’exemple ci-dessous, nous rencontrons au moins deux problèmes :
- Nous effectuons la vérification de type deux fois sans raison, ce qui peut nuire à la performance si cela se produit dans une boucle.
- Le fait que l’exécution du programme n’active pas l’instruction
if
siobj
estnull
n’est pas immédiatement clair pour les personnes qui lisent ce code.
Qodana identifie ce type de problème et vous suggère de le corriger dans Rider.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/4-NET-Merge-cast.png)
L’expression lambda/la méthode anonyme ne doit pas avoir de captures du contexte d’invocation
L’expression lambda/la méthode anonyme transférée à un paramètre annoté par l’attribut « [RequireStaticDelegate] » ne doit pas avoir de captures du contexte qu’elle contient (variables locales, fonctions locales, référence « this ») pour éviter les allocations de pile.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/5-NET-Lambda.png)
Pour configurer le linter pour .NET et exécuter l’analyse, consultez la documentation de Qodana.
Qodana pour Go
Qodana 2022.3 est conçu pour prendre en charge toutes les inspections fournies par GoLand. Pour voir la liste complète, consultez la documentation de GoLand. Vous trouverez ci-dessous des exemples d’inspections Go que Qodana prend désormais en charge.
Placeholder argument ‘d.DeletedCount’ has the wrong type ‘int64’ (%s)
Cette inspection signale les utilisations incorrectes de fmt.Printf
et fmt.Println
et d’autres fonctions de formatage et d’impression similaires.
Dans leurs chaînes de format, les fonctions de formatage utilisent des verbes de formatage comme %s
, %d
et %v
, entre autres.
Si les verbes de mise en forme ne sont pas utilisés correctement, le résultat de la fonction de mise en forme contient une erreur.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/6-Go-placeholder.png)
Unhandled error
Cette inspection signale les appels aux fonctions et méthodes qui ne gèrent pas le résultat d’appel du type error
.
Une API de ces fonctions implique que leur exécution peut échouer et renvoyer une erreur. Les appels qui ne gèrent pas les résultats contenant des erreurs peuvent indiquer une mauvaise utilisation de l’API.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/7-Go-Unhandled.png)
Unused dependency
Cette inspection signale les dépendances non utilisées dans votre projet. La bonne pratique consiste à rechercher les dépendances non utilisées de façon régulière car cela réduit la taille de la bibliothèque de votre projet et améliore la capacité de maintenance.
![](https://blog.jetbrains.com/wp-content/uploads/2022/11/8-Go-unused.png)
Pour voir Qodana en action et expérimenter ces nouvelles inspections, consultez notre documentation et découvrez comment configurer les linters pour Go.
Nouvelles inspections
Outre l’ajout de nouveaux linters pour .NET et Go, Qodana 2022.3 apporte plus de 100 nouvelles inspections pour les linters existants. Nous allons examiner les exemples les plus représentatifs des inspections pour Java, Kotlin et Python.
Inspections Java et Kotlin
Nous avons ajouté Qodana plus de 40 nouvelles inspections pour JVM Community et Qodana for JVM.
DataFlowIssue
Cette inspection signale les constructions de code qui enfreignent systématiquement les contrats de nullabilité, risquent de renvoyer des exceptions ou sont redondants, sur la base d’une analyse du flux de données.
EscapedSpace
Java 15 a introduit la séquence d’échappement de chaîne s pour rendre visible l’espace blanc à la fin des blocs de texte. Dans la plupart des autres contextes, notamment dans les expressions régulières, cette séquence d’échappement peut facilement être confondue avec la notation s
d’une expression régulière indiquant un espace blanc. Dans les littéraux de chaînes Java, il faut utiliser \s
à la place.
MismatchedJavadocCode
Cette inspection signale les cas dans lesquels le Javadoc d’une méthode contredit manifestement la signature de la méthode, comme un commentaire disant « returns true » alors que la méthode renvoie une chaîne.
Destructure
Cette inspection signale les déclarations en Kotlin qui peuvent être déstructurées.
UnresolvedRestParam
Désormais, Qodana peut détecter les déclarations de méthodes incohérentes dans les services REST (par exemple des paramètres @PathParam
ne correspondant pas à un emplacement provenant de l’annotation @Get
) car ces déclarations lèveraient des exceptions lors de l’exécution.
ReactiveStreamsThrowInOperator
Cette nouvelle inspection identifie les déclarations throw
dans le code de l’opérateur Reactor/RxJava au lieu de renvoyer les valeurs d’erreurs désignées, ce qui empêche le traitement ultérieur des erreurs. Par exemple, elle les ignore ou les remplace par une valeur de repli.
Cette version de Qodana apporte également toutes les nouvelles inspections pour Android d’IntelliJ IDEA 2022.3 et d’Android Studio – Electric Eel | 2022.1.1.
Inspections Python
Nous avons également ajouté à Qodana for Python des inspections pour Google App Engine qui mettent en évidence les problèmes avant qu’ils ne provoquent des défaillances dans les environnements de production. Par exemple, vous pouvez désormais repérer :
- les requêtes GQL qui ne se conforment pas aux restrictions pour les requêtes autorisées sur le serveur de Google App Engine.
- les requêtes GQL sans index.
- les utilisations de fonctionnalités Python qui sont limitées par la sandbox de Google App Engine.
- les cas dans lesquels threadsafe n’est pas activé avec le gestionnaire CGI.
Pour exclure certaines inspections de votre analyse, vous pouvez personnaliser votre profil d’inspection par défaut ou en créer un nouveau. Vous avez aussi la possibilité de mettre en œuvre les inspections requises par vos directives de codage. Consultez la documentation de Qodana pour plus d’informations.
Voilà, vous savez tout sur programme d’accès anticipé de Qodana 2022.3 ! 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 continuez à veiller à la propreté de votre code !
L’Équipe Qodana
Auteur de l’article original en anglais :