{"id":299282,"date":"2022-11-21T10:24:15","date_gmt":"2022-11-21T09:24:15","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=qodana&#038;p=299282"},"modified":"2022-11-21T11:06:21","modified_gmt":"2022-11-21T10:06:21","slug":"le-programme-d-acces-anticipe-de-qodana-2022-3-est-disponible-qodana-pour-net-et-go-et-plus-de-100-nouvelles-inspections","status":"publish","type":"qodana","link":"https:\/\/blog.jetbrains.com\/fr\/qodana\/2022\/11\/le-programme-d-acces-anticipe-de-qodana-2022-3-est-disponible-qodana-pour-net-et-go-et-plus-de-100-nouvelles-inspections\/","title":{"rendered":"Le programme d&#8217;acc\u00e8s anticip\u00e9 de Qodana 2022.3 est disponible\u00a0: Qodana pour .NET et Go et plus de 100\u00a0nouvelles inspections"},"content":{"rendered":"<p>Nous avons le plaisir d&#8217;annoncer l&#8217;ouverture du programme d&#8217;acc\u00e8s anticip\u00e9 de Qodana 2022.3 EAP. Cette version de la plateforme apporte la prise en charge de <strong>.NET<\/strong> et de <strong>Go<\/strong>. Nous avons \u00e9galement ajout\u00e9 100\u00a0nouvelles inspections pour les langages qui \u00e9taient d\u00e9j\u00e0 pris en charge. Veuillez toutefois noter que les images Docker sont plus stables dans Qodana 2022.2 pour le moment.<\/p>\n<p>Poursuivez votre lecture pour en savoir plus et essayez les nouvelles fonctionnalit\u00e9s\u00a0!<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-292996\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/Featured_image_1280x600_Qodana.png\" alt=\"\" width=\"2560\" height=\"1200\" \/><\/figure>\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/fr-fr\/qodana\/\" target=\"_blank\" rel=\"noopener\"><br \/>COMMENCER AVEC QODANA<br \/><\/a><\/p>\n<p>Nos tout nouveaux linters apportent toute l&#8217;intelligence de <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/rider\/\" target=\"_blank\" rel=\"noreferrer noopener\">Rider<\/a> et de <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/go\/\" target=\"_blank\" rel=\"noreferrer noopener\">GoLand<\/a> pour vous permettre de d\u00e9tecter les anomalies dans le code et les bugs potentiels, d&#8217;\u00e9liminer le code mort, d&#8217;am\u00e9liorer la structure globale du code et d&#8217;appliquer les meilleures pratiques \u00e0 l&#8217;ensemble de vos projets .NET et Go !<\/p>\n<h2>Qodana pour .NET<\/h2>\n<p>Qodana prend en charge la quasi-totalit\u00e9 des inspections .NET fournies par Rider. La liste de ces inspections \u00e9tant assez longue, nous vous invitons \u00e0 consulter la <a href=\"https:\/\/www.jetbrains.com\/help\/rider\/Code_Analysis__Code_Inspections.html\" target=\"_blank\" rel=\"noreferrer noopener\">documentation de Rider<\/a> pour plus d&#8217;informations. En attendant, vous trouverez c-dessous quelques exemples d&#8217;inspections .NET que Qodana peut ex\u00e9cuter.<\/p>\n<p><strong>Inconsistent lock ordering<\/strong><\/p>\n<p>L&#8217;un des principaux probl\u00e8mes lors de l&#8217;utilisation de verrous pour s\u00e9curiser des threads est d&#8217;\u00e9viter les blocages, par exemple lorsque les threads se bloquent mutuellement et emp\u00eachent l&#8217;ex\u00e9cution de progresser. Avec cette nouvelle inspection, Qodana met en \u00e9vidence les cycles susceptibles de cr\u00e9er des probl\u00e8mes lors de l&#8217;ex\u00e9cution.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293018\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/1-NET-order-of-locks.png\" alt=\"\" width=\"1776\" height=\"804\" \/><\/figure>\n<p><strong>Access to modified captured variable<\/strong><\/p>\n<p>Qodana pour .NET d\u00e9tecte l&#8217;acc\u00e8s \u00e0 la variable captur\u00e9e par une m\u00e9thode anonyme lorsque cette variable est modifi\u00e9e de fa\u00e7on externe.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293029\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/2-NET-access-to-modified.png\" alt=\"\" width=\"1772\" height=\"570\" \/><\/figure>\n<p><strong>Avoid using \u2018async\u2019 lambda when delegate type returns \u2018void\u2019<\/strong><\/p>\n<p>Cette inspection d\u00e9tecte l&#8217;utilisation d&#8217;expressions lambda \u00ab\u00a0async\u00a0\u00bb\u00a0: les exceptions non g\u00e9r\u00e9es par la lambda n&#8217;affecteront jamais le thread appelant et ne seront pas intercept\u00e9es par la clause catch.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293040\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/3-NET-Avoid-async-lambda.png\" alt=\"\" width=\"1766\" height=\"650\" \/><\/figure>\n<p><strong>Type check and casts can be merged<\/strong><\/p>\n<p>L&#8217;op\u00e9rateur de test de type <code>is<\/code> dans sa forme classique <code>(Expression is Type)<\/code>, renvoie <code>true<\/code> uniquement lorsque le type d&#8217;ex\u00e9cution de <code>Expression <\/code> est compatible avec <code>Type<\/code> et si le r\u00e9sultat de <code>Expression<\/code> n&#8217;est pas <code>null<\/code>.<\/p>\n<p>Lorsque nous utilisons <code>is<\/code> pour v\u00e9rifier la compatibilit\u00e9 avant le cast, comme dans l&#8217;exemple ci-dessous, nous rencontrons au moins deux probl\u00e8mes\u00a0:<\/p>\n<ul>\n<li>Nous effectuons la v\u00e9rification de type deux fois sans raison, ce qui peut nuire \u00e0 la performance si cela se produit dans une boucle.<\/li>\n<li>Le fait que l&#8217;ex\u00e9cution du programme n&#8217;active pas l&#8217;instruction <code>if<\/code> si <code>obj<\/code> est <code>null<\/code> n&#8217;est pas imm\u00e9diatement clair pour les personnes qui lisent ce code.<\/li>\n<\/ul>\n<p>Qodana identifie ce type de probl\u00e8me et vous sugg\u00e8re de le corriger dans Rider.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293051\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/4-NET-Merge-cast.png\" alt=\"\" width=\"1748\" height=\"510\" \/><\/figure>\n<p><strong>L&#8217;expression lambda\/la m\u00e9thode anonyme ne doit pas avoir de captures du contexte d&#8217;invocation<\/strong><\/p>\n<p>L&#8217;expression lambda\/la m\u00e9thode anonyme transf\u00e9r\u00e9e \u00e0 un param\u00e8tre annot\u00e9 par l&#8217;attribut \u00ab\u00a0[RequireStaticDelegate]\u00a0\u00bb ne doit pas avoir de captures du contexte qu&#8217;elle contient (variables locales, fonctions locales, r\u00e9f\u00e9rence \u00ab\u00a0this\u00a0\u00bb) pour \u00e9viter les allocations de pile.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293062\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/5-NET-Lambda.png\" alt=\"\" width=\"1768\" height=\"676\" \/><\/figure>\n<p>Pour configurer le linter pour .NET et ex\u00e9cuter l&#8217;analyse, consultez la <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/2022.3\/qodana-dotnet-docker-readme.html\" target=\"_blank\" rel=\"noreferrer noopener\">documentation de Qodana<\/a>.<\/p>\n<h2>Qodana pour Go<\/h2>\n<p>Qodana 2022.3 est con\u00e7u pour prendre en charge toutes les inspections fournies par GoLand. Pour voir la liste compl\u00e8te, consultez la <a href=\"https:\/\/www.jetbrains.com\/help\/go\/code-inspections-in-go.html\" target=\"_blank\" rel=\"noreferrer noopener\">documentation de GoLand<\/a>. Vous trouverez ci-dessous des exemples d&#8217;inspections Go que Qodana prend d\u00e9sormais en charge.<\/p>\n<p><strong>Placeholder argument \u2018d.DeletedCount\u2019 has the wrong type \u2018int64\u2019 (%s)<\/strong><\/p>\n<p>Cette inspection signale les utilisations incorrectes de <code>fmt.Printf<\/code> et <code>fmt.Println<\/code> et d&#8217;autres fonctions de formatage et d&#8217;impression similaires.<\/p>\n<p>Dans leurs cha\u00eenes de format, les fonctions de formatage utilisent des verbes de formatage comme <code>%s<\/code>, <code>%d<\/code> et <code>%v<\/code>, entre autres.<\/p>\n<p>Si les verbes de mise en forme ne sont pas utilis\u00e9s correctement, le r\u00e9sultat de la fonction de mise en forme contient une erreur.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293073\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/6-Go-placeholder.png\" alt=\"\" width=\"1718\" height=\"548\" \/><\/figure>\n<p><strong>Unhandled error<\/strong><\/p>\n<p>Cette inspection signale les appels aux fonctions et m\u00e9thodes qui ne g\u00e8rent pas le r\u00e9sultat d&#8217;appel du type <code>error<\/code>.<\/p>\n<p>Une API de ces fonctions implique que leur ex\u00e9cution peut \u00e9chouer et renvoyer une erreur. Les appels qui ne g\u00e8rent pas les r\u00e9sultats contenant des erreurs peuvent indiquer une mauvaise utilisation de l&#8217;API.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293084\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/7-Go-Unhandled.png\" alt=\"\" width=\"1718\" height=\"464\" \/><\/figure>\n<p><strong>Unused dependency<\/strong><\/p>\n<p>Cette inspection signale les d\u00e9pendances non utilis\u00e9es dans votre projet. La bonne pratique consiste \u00e0 rechercher les d\u00e9pendances non utilis\u00e9es de fa\u00e7on r\u00e9guli\u00e8re car cela r\u00e9duit la taille de la biblioth\u00e8que de votre projet et am\u00e9liore la capacit\u00e9 de maintenance.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-293095\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/8-Go-unused.png\" alt=\"\" width=\"1594\" height=\"484\" \/><\/figure>\n<p>Pour voir Qodana en action et exp\u00e9rimenter ces nouvelles inspections, consultez notre documentation et d\u00e9couvrez comment configurer les linters pour <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/2022.3\/qodana-go-docker-readme.html\" target=\"_blank\" rel=\"noreferrer noopener\">Go<\/a>.<\/p>\n<h2>Nouvelles inspections<\/h2>\n<p>Outre l&#8217;ajout de nouveaux linters pour .NET et Go, Qodana 2022.3 apporte plus de 100\u00a0nouvelles inspections pour les linters existants. Nous allons examiner les exemples les plus repr\u00e9sentatifs des inspections pour Java, Kotlin et Python.<\/p>\n<h3>Inspections Java et Kotlin<\/h3>\n<p>Nous avons ajout\u00e9 Qodana plus de 40\u00a0nouvelles inspections pour JVM Community et Qodana for JVM.<\/p>\n<p><strong>DataFlowIssue<\/strong><\/p>\n<p>Cette inspection signale les constructions de code qui enfreignent syst\u00e9matiquement les contrats de nullabilit\u00e9, risquent de renvoyer des exceptions ou sont redondants, sur la base d&#8217;une analyse du flux de donn\u00e9es.<\/p>\n<p><strong>EscapedSpace<\/strong><\/p>\n<p>Java 15 a introduit la s\u00e9quence d&#8217;\u00e9chappement de cha\u00eene s pour rendre visible l&#8217;espace blanc \u00e0 la fin des blocs de texte. Dans la plupart des autres contextes, notamment dans les expressions r\u00e9guli\u00e8res, cette s\u00e9quence d&#8217;\u00e9chappement peut facilement \u00eatre confondue avec la notation <code>s<\/code> d&#8217;une expression r\u00e9guli\u00e8re indiquant un espace blanc. Dans les litt\u00e9raux de cha\u00eenes Java, il faut utiliser <code>\\s<\/code> \u00e0 la place.<\/p>\n<p><strong>MismatchedJavadocCode<\/strong><\/p>\n<p>Cette inspection signale les cas dans lesquels le Javadoc d&#8217;une m\u00e9thode contredit manifestement la signature de la m\u00e9thode, comme un commentaire disant \u00ab\u00a0returns true\u00a0\u00bb alors que la m\u00e9thode renvoie une cha\u00eene.<\/p>\n<p><strong>Destructure<\/strong><\/p>\n<p>Cette inspection signale les d\u00e9clarations en Kotlin qui peuvent \u00eatre d\u00e9structur\u00e9es.<\/p>\n<p><strong>UnresolvedRestParam<\/strong><\/p>\n<p>D\u00e9sormais, Qodana peut d\u00e9tecter les d\u00e9clarations de m\u00e9thodes incoh\u00e9rentes dans les services REST (par exemple des param\u00e8tres <code>@PathParam<\/code> ne correspondant pas \u00e0 un emplacement provenant de l&#8217;annotation <code>@Get <\/code>) car ces d\u00e9clarations l\u00e8veraient des exceptions lors de l&#8217;ex\u00e9cution.\u00a0<\/p>\n<p><strong>ReactiveStreamsThrowInOperator<\/strong><\/p>\n<p>Cette nouvelle inspection identifie les d\u00e9clarations <code>throw<\/code> dans le code de l&#8217;op\u00e9rateur Reactor\/RxJava au lieu de renvoyer les valeurs d&#8217;erreurs d\u00e9sign\u00e9es, ce qui emp\u00eache le traitement ult\u00e9rieur des erreurs. Par exemple, elle les ignore ou les remplace par une valeur de repli.<\/p>\n<p>Cette version de Qodana apporte \u00e9galement toutes les nouvelles inspections pour Android d&#8217;IntelliJ IDEA 2022.3 et d&#8217;Android Studio \u2013 Electric Eel | 2022.1.1.<\/p>\n<h3>Inspections Python<\/h3>\n<p>Nous avons \u00e9galement ajout\u00e9 \u00e0 Qodana for Python des inspections pour Google App Engine qui mettent en \u00e9vidence les probl\u00e8mes avant qu&#8217;ils ne provoquent des d\u00e9faillances dans les environnements de production. Par exemple, vous pouvez d\u00e9sormais rep\u00e9rer\u00a0:<\/p>\n<ul>\n<li>les requ\u00eates GQL qui ne se conforment pas aux restrictions pour les requ\u00eates autoris\u00e9es sur le serveur de Google App Engine.<\/li>\n<li>les requ\u00eates GQL sans index.<\/li>\n<li>les utilisations de fonctionnalit\u00e9s Python qui sont limit\u00e9es par la sandbox de Google App Engine.<\/li>\n<li>les cas dans lesquels threadsafe n&#8217;est pas activ\u00e9 avec le gestionnaire CGI.<\/li>\n<\/ul>\n<p>Pour exclure certaines inspections de votre analyse, vous pouvez personnaliser votre profil d&#8217;inspection par d\u00e9faut ou en cr\u00e9er un nouveau. Vous avez aussi la possibilit\u00e9 de mettre en \u0153uvre les inspections requises par vos directives de codage. Consultez la <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-yaml.html#Include+an+inspection+into+the+analysis+scope\" target=\"_blank\" rel=\"noreferrer noopener\">documentation de Qodana<\/a> pour plus d&#8217;informations.<\/p>\n<p>Voil\u00e0, vous savez tout sur programme d&#8217;acc\u00e8s anticip\u00e9 de Qodana 2022.3\u00a0! Nous esp\u00e9rons que vous appr\u00e9cierez cette nouvelle version. Si vous avez des suggestions pour de futurs sujets d&#8217;articles ou souhaitez en savoir plus sur la fa\u00e7on dont Qodana peut vous aider, laissez un commentaire ci-dessous, taguez-nous sur <a href=\"https:\/\/twitter.com\/Qodana\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a> ou \u00e9crivez-nous \u00e0 <a href=\"mailto:qodana-support@jetbrains.com\">qodana-support@jetbrains.com<\/a>.<\/p>\n<p>Bon d\u00e9veloppement et continuez \u00e0 veiller \u00e0 la propret\u00e9 de votre code !<\/p>\n<p><em>L&#8217;\u00c9quipe Qodana<\/em><\/p>\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":293124,"comment_status":"closed","ping_status":"closed","template":"","categories":[5088,4113,89,907],"tags":[477],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/299282"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/qodana"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=299282"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/299282\/revisions"}],"predecessor-version":[{"id":299319,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/299282\/revisions\/299319"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/293124"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=299282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=299282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=299282"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=299282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}