{"id":273661,"date":"2022-08-05T16:12:57","date_gmt":"2022-08-05T15:12:57","guid":{"rendered":"https:\/\/blog.jetbrains.com\/qodana\/2022\/08\/qodana-2022-2\/"},"modified":"2025-09-18T11:32:39","modified_gmt":"2025-09-18T10:32:39","slug":"qodana-2022-2","status":"publish","type":"qodana","link":"https:\/\/blog.jetbrains.com\/fr\/qodana\/2022\/08\/qodana-2022-2\/","title":{"rendered":"Qodana 2022.2 est disponible : Orbe CircleCI et plus de 50\u00a0nouvelles inspections"},"content":{"rendered":"\n<p>Qodana 2022.2 est disponible&nbsp;! Cette version ajoute un <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana?version=2022.2.1\" target=\"_blank\" rel=\"noreferrer noopener\">orbe CircleCI<\/a> \u00e0 l&#8217;ensemble d&#8217;outils d&#8217;int\u00e9gration de Qodana et de nouvelles inspections du code et apporte des am\u00e9liorations pour Java, Kotlin, Android, PHP, JavaScript et Python.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1200\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/08\/Release_social_media_share_1280x600_Qodana-2x-1.png\" alt=\"\" class=\"wp-image-272424\"\/><\/figure>\n\n\n\n<p align=\"center\"><a class=\"jb-download-button\" title=\"COMMENCER AVEC QODANA\" href=\"https:\/\/www.jetbrains.com\/qodana\" target=\"_blank\" rel=\"noopener noreferrer\" data-mce-href=\"https:\/\/www.jetbrains.com\/qodana\" data-mce-selected=\"inline-boundary\" data-mce-><i class=\"download-icon\"><\/i>COMMENCER AVEC QODANA<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Davantage d&#8217;outils de CI \u00e0 utiliser avec Qodana<\/h2>\n\n\n\n<p>Qodana dispose d\u00e9j\u00e0 de plugins pour <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-azure-pipelines.html\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Pipelines<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-github-action.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Actions<\/a> et <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/teamcity.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity<\/a>. Pour cette version 2022.2, nous avons pr\u00e9par\u00e9 un <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana\" target=\"_blank\" rel=\"noreferrer noopener\">orbe Qodana CircleCI<\/a> qui vous permet de mettre facilement et rapidement en place des inspections de code avec vos projets CircleCI.&nbsp;&nbsp;<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/D-yaEpuhrBZkxU2Kv3C9DNKH4ctdoPi3uPKbcsuxH9I5M5lPw-QrUho3h2mLdEsnJ-Na1P9TaD0ySxDtLP8vUxJyhVmOBSBrs0Q1KVQSWat_c54vEDlqRALOhPcUjChzm0mmESAFGlI4kbvGxh1NGiM-2.png\" style=\"width: 2560px;\"><\/p>\n\n\n\n<p>Il est \u00e9galement facile de configurer Qodana dans <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/gitlab.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitLab<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/jenkins.html\" target=\"_blank\" rel=\"noreferrer noopener\">Jenkins<\/a> ou dans <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/getting-started.html#docker-image-tab\" target=\"_blank\" rel=\"noreferrer noopener\">tout autre outil de CI prenant en charge l&#8217;ex\u00e9cution d&#8217;images Docker<\/a>.<\/p>\n\n\n\n<p>Pour inclure ou exclure certaines inspections de votre analyse, vous pouvez personnaliser votre profil d&#8217;inspection par d\u00e9faut ou en cr\u00e9er un nouveau. Il est aussi possible de mettre en \u0153uvre les inspections requises par vos directives de codage ou recommand\u00e9es par les bonnes pratiques. 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.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nouvelles inspections<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Expressions r\u00e9guli\u00e8res<\/h3>\n\n\n\n<p>Les expressions r\u00e9guli\u00e8res sont connues pour leur complexit\u00e9, leur syntaxe \u00e9labor\u00e9e, et parfois leur verbosit\u00e9. Nous avons ajout\u00e9 plusieurs nouvelles inspections pour vous simplifier la t\u00e2che. Auparavant seulement disponibles pour Java, elles le sont maintenant pour tous les langages.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Expressions r\u00e9guli\u00e8res simplifi\u00e9es<\/h4>\n\n\n\n<p>Une expression r\u00e9guli\u00e8re comme <code>[wa-zd]<\/code> peut \u00eatre simplifi\u00e9e pour devenir simplement <code>w<\/code> puisque <code>w<\/code> inclut d\u00e9j\u00e0 <code>a-z<\/code> ainsi que les chiffres.&nbsp; Cela permet d&#8217;am\u00e9liorer la lisibilit\u00e9 globale du code.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">R\u00e9f\u00e9rences arri\u00e8re suspectes&nbsp;<\/h4>\n\n\n\n<p>Une expression r\u00e9guli\u00e8re comme <code>1(abc)<\/code> ne peut pas avoir de correspondance car <code>1<\/code> fait r\u00e9f\u00e9rence \u00e0 l&#8217;ensemble de caract\u00e8res <code>abc<\/code> qui n&#8217;est pas encore d\u00e9fini lors de l&#8217;\u00e9valuation de <code>1<\/code>. Cette inspection permet d&#8217;\u00e9viter les fautes de frappe simples dans les expressions r\u00e9guli\u00e8res et d&#8217;acc\u00e9l\u00e9rer le processus de modification.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9l\u00e9ments de classe redondants <code>d<\/code>, <code>[:digit:]<\/code> ou <code>D<\/code><\/h4>\n\n\n\n<p>L&#8217;expression r\u00e9guli\u00e8re <code>[w+d]<\/code> peut \u00eatre \u00e9crite comme <code>[w+]<\/code>, car <code>w<\/code> inclut d\u00e9j\u00e0 <code>d<\/code>. Cela permet d&#8217;am\u00e9liorer la lisibilit\u00e9 globale du code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prise en charge du format Markdown<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c9l\u00e9ments de liste num\u00e9rot\u00e9s de fa\u00e7on incorrecte<\/h4>\n\n\n\n<p>Les \u00e9l\u00e9ments d&#8217;une liste class\u00e9s avec une num\u00e9rotation de type <code>1. 2. 4. <\/code> sont indiqu\u00e9s comme \u00e9tant num\u00e9rot\u00e9s de fa\u00e7on incoh\u00e9rente. Avec Markdown, la liste est toujours affich\u00e9e avec une num\u00e9rotation <code>1. 2. 3.<\/code>, mais l&#8217;incoh\u00e9rence rend la modification du code source plus compliqu\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspections Java, Kotlin et Android<\/h3>\n\n\n\n<p>Nous avons ajout\u00e9 et r\u00e9organis\u00e9 les inspections dans les cat\u00e9gories suivantes&nbsp;: Javadoc, DevKit, Markdown, langage Kotlin, style, mod\u00e8les architecturaux, performance et prise en charge de JUnit. Voici quelques exemples de l&#8217;ensemble JUnit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">JUnit&nbsp;: D\u00e9claration malform\u00e9e<\/h4>\n\n\n\n<p>Signale les d\u00e9clarations de membres de tests JUnit qui ne sont pas correctement form\u00e9es et pourraient ne pas \u00eatre reconnues par le framework de tests JUnit. De telles d\u00e9clarations pourraient avoir pour cons\u00e9quence la non-ex\u00e9cution des tests ou des m\u00e9thodes de cycle de vie d&#8217;un composant.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1768\" height=\"552\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/08\/CleanShot-2022-08-05-at-11.45.47-2x.png\" alt=\"\" class=\"wp-image-272283\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1770\" height=\"548\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/08\/CleanShot-2022-08-05-at-11.44.59-2x.png\" alt=\"\" class=\"wp-image-272272\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">JUnit&nbsp;: TestCase non constructible<\/h4>\n\n\n\n<p>Signale les cas de test JUnit qui ne peuvent pas \u00eatre construits en raison d&#8217;un constructeur non valide. De tels cas de test ne seront pas pris en compte par l&#8217;ex\u00e9cuteur de tests de JUnit et ne seront donc pas ex\u00e9cut\u00e9s.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1782\" height=\"554\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/08\/CleanShot-2022-08-05-at-11.47.05-2x.png\" alt=\"\" class=\"wp-image-272294\"\/><\/figure>\n\n\n\n<p>Vous pouvez voir ces exemples en direct sur <a href=\"https:\/\/qodana.teamcity.com\/buildConfiguration\/Hosted_Root_Java_Build\/61718?buildTab=Qodana&amp;genericFilters=N4IgLg9hA2IFwG0QGEIBMCmACAkgOwGcAHDAYzAEsI8QBdAGhAIwDcMAnCsAT3iQAkKAcwAWdRqQCGYDEIjteiEABUMBMFgBm7SQFsMAd3kBrAnQC%2BQA&amp;locationFilters=NoXSA&amp;orderedLevels=NoIgLg9hA2IDQgM4FMBuyBOBLMBPeIAxgIZjIDmEG%2BCeADsiALpA&amp;showingBaseline=GYQwNgzgpkA\" target=\"_blank\" rel=\"noopener\">notre instance publique TeamCity<\/a>. Veuillez utiliser la connexion Guest pour y acc\u00e9der. Les autres inspections sont d\u00e9crites dans <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/2022.2\/new-in-2022-2.html\" target=\"_blank\" rel=\"noreferrer noopener\">notre documentation<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspections PHP<\/h3>\n\n\n\n<p>Nous avons ajout\u00e9 des inspections dans les cat\u00e9gories suivantes&nbsp;: bugs probables, documentation, style, tests et Laravel. Par exemple&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Bug probable&nbsp;: incoh\u00e9rence des plages de nombres<\/h4>\n\n\n\n<p>Dans une fonction qui est d\u00e9clar\u00e9e avec <code>returns int&lt;0,10&gt;<\/code>, cette inspection indique les d\u00e9clarations de retour qui renvoient un nombre en dehors de cette plage. Elle s&#8217;applique aussi aux champs, aux constructeurs de champs et aux appels de fonctions.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Documentation&nbsp;: balise de type sans nom de variable<\/h4>\n\n\n\n<p>L&#8217;extrait PHPDoc <code>@param string<\/code> est redondant car il ne donne pas d&#8217;informations sur<em>ce qui<\/em> est une cha\u00eene de caract\u00e8res. Il devrait \u00eatre supprim\u00e9 ou remplac\u00e9 par <code>@param string $argument<\/code>, pr\u00e9cisant que <em>argument<\/em> est une cha\u00eene de caract\u00e8res.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Blade&nbsp;: erreur d&#8217;analyse due \u00e0 des parenth\u00e8ses non appari\u00e9es dans des litt\u00e9raux de cha\u00eenes<\/h4>\n\n\n\n<p>D\u00e9tection pr\u00e9coce des parenth\u00e8ses non appari\u00e9es dans les litt\u00e9raux de cha\u00eenes, qui sont ensuite analys\u00e9s par Blade, un moteur de mod\u00e8les.<\/p>\n\n\n\n<p>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=\"noopener\">Twitter<\/a> ou \u00e9crivez-nous \u00e0 <em>qodana-support@jetbrains.com<\/em>.<\/p>\n\n\n\n<p><em>L&#8217;\u00c9quipe Qodana<\/em><\/p>\n\n\n\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\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":272412,"comment_status":"closed","ping_status":"closed","template":"","categories":[896,5108,907],"tags":[7076],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/273661"}],"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=273661"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/273661\/revisions"}],"predecessor-version":[{"id":629625,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/qodana\/273661\/revisions\/629625"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/272412"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=273661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=273661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=273661"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=273661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}