{"id":279644,"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-18T10:59:14","modified_gmt":"2025-09-18T09:59:14","slug":"qodana-2022-2","status":"publish","type":"qodana","link":"https:\/\/blog.jetbrains.com\/pt-br\/qodana\/2022\/08\/qodana-2022-2\/","title":{"rendered":"O Qodana 2022.2 j\u00e1 est\u00e1 dispon\u00edvel &#8211; CircleCI Orb e mais de 50 novas inspe\u00e7\u00f5es"},"content":{"rendered":"\n<p>O Qodana 2022.2 j\u00e1 est\u00e1 dispon\u00edvel! Adicionamos o <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana?version=2022.2.1\" target=\"_blank\" rel=\"noreferrer noopener\">CircleCI Orb<\/a> ao toolset de integra\u00e7\u00e3o do Qodana e trouxemos inspe\u00e7\u00f5es de c\u00f3digo in\u00e9ditas e aprimoradas para Java, Kotlin, Android, PHP, JavaScript e 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=\"INTRODU\u00c7\u00c3O AO 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>INTRODU\u00c7\u00c3O AO QODANA<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mais CIs com os quais executar o Qodana<\/h2>\n\n\n\n<p>O Qodana j\u00e1 tem plug-ins para <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-azure-pipelines.html\" target=\"_blank\" rel=\"noreferrer noopener\">Pipelines do Azure<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-github-action.html\" target=\"_blank\" rel=\"noreferrer noopener\">A\u00e7\u00f5es do GitHub<\/a> e <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/teamcity.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity<\/a>. Come\u00e7ando na vers\u00e3o 2022.2, preparamos um <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana\" target=\"_blank\" rel=\"noreferrer noopener\">CircleCI Qodana Orb<\/a> que permite configurar inspe\u00e7\u00f5es de c\u00f3digo de maneira r\u00e1pida e f\u00e1cil com seus projetos 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.png\" style=\"width: 2560px;\"><\/p>\n\n\n\n<p>Al\u00e9m disso, \u00e9 f\u00e1cil configurar o Qodana no <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 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/getting-started.html#docker-image-tab\" target=\"_blank\" rel=\"noreferrer noopener\">qualquer outro CI que ofere\u00e7a suporte \u00e0 execu\u00e7\u00e3o de imagens do Docker<\/a>.<\/p>\n\n\n\n<p>Para incluir ou excluir determinadas inspe\u00e7\u00f5es da sua an\u00e1lise, voc\u00ea pode personalizar seu perfil de inspe\u00e7\u00e3o padr\u00e3o ou criar um novo. Voc\u00ea tamb\u00e9m pode querer impor inspe\u00e7\u00f5es importantes para suas diretrizes de programa\u00e7\u00e3o ou pr\u00e1ticas recomendadas. Confira nossa <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-yaml.html#Include+an+inspection+into+the+analysis+scope\" target=\"_blank\" rel=\"noreferrer noopener\">Documenta\u00e7\u00e3o do Qodana<\/a> para obter mais informa\u00e7\u00f5es.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Novas inspe\u00e7\u00f5es<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Express\u00f5es regulares<\/h3>\n\n\n\n<p>Express\u00f5es regulares s\u00e3o amplamente conhecidas por sua complexidade, sintaxe intrincada e, \u00e0s vezes, verbosidade. Para facilitar a vida, adicionamos novas inspe\u00e7\u00f5es nessa \u00e1rea. Anteriormente, essas inspe\u00e7\u00f5es estavam dispon\u00edveis apenas para Java, mas agora as disponibilizamos para todas as linguagens.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Express\u00f5es regulares simplificadas<\/h4>\n\n\n\n<p>Uma express\u00e3o regular como <code>[wa-zd]<\/code> pode ser simplificada para apenas <code>w<\/code>, pois <code>w<\/code> j\u00e1 inclui <code>a-z<\/code> e os d\u00edgitos.&nbsp; Isto ajuda a melhorar a legibilidade geral do c\u00f3digo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Refer\u00eancias retrospectivas suspeitas&nbsp;<\/h4>\n\n\n\n<p>Uma express\u00e3o regular como <code>1(abc)<\/code> n\u00e3o pode corresponder a nada. Isto porque <code>1<\/code> faz refer\u00eancia a <code>abc<\/code>, que ainda n\u00e3o est\u00e1 definido quando o <code>1<\/code> \u00e9 avaliado. Essa inspe\u00e7\u00e3o evita erros de digita\u00e7\u00e3o simples em express\u00f5es regulares e acelera a experi\u00eancia de edi\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Elementos de classe <code>d<\/code>, <code>[:digit:]<\/code> ou <code>D<\/code> redundantes<\/h4>\n\n\n\n<p>A express\u00e3o regular <code>[w+d]<\/code> pode ser escrita como <code>[w+]<\/code>, pois <code>w<\/code> j\u00e1 inclui <code>d<\/code>. Isto ajuda a melhorar a legibilidade geral do c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Suporte para Markdown<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Itens de lista numerados incorretamente<\/h4>\n\n\n\n<p>Itens de listas ordenadas como <code>1.2.4.<\/code> s\u00e3o marcados como tendo sido numerados de forma inconsistente. No Markdown renderizado, a lista ainda \u00e9 exibida como <code>1.2.3.<\/code>, mas a inconsist\u00eancia dificulta a edi\u00e7\u00e3o do c\u00f3digo-fonte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspe\u00e7\u00f5es Java, Kotlin e Android<\/h3>\n\n\n\n<p>Adicionamos e reorganizamos inspe\u00e7\u00f5es nas categorias: Javadoc, DevKit, Markdown, linguagem Kotlin, estilo, padr\u00f5es de arquitetura, desempenho e suporte para JUnit. Aqui est\u00e3o alguns exemplos do conjunto JUnit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">JUnit: declara\u00e7\u00e3o malformada<\/h4>\n\n\n\n<p>Relata as declara\u00e7\u00f5es de membros de teste JUnit que est\u00e3o malformadas e provavelmente n\u00e3o ser\u00e3o reconhecidas pelo framework de testes JUnit. Declara\u00e7\u00f5es como essas podem resultar em testes ou m\u00e9todos de ciclo de vida n\u00e3o executados.<\/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: TestCase n\u00e3o constru\u00edvel<\/h4>\n\n\n\n<p>Relata casos de teste JUnit que n\u00e3o podem ser constru\u00eddos porque possuem um construtor inv\u00e1lido. Casos de teste como esses n\u00e3o ser\u00e3o identificados pelo executor de testes JUnit e, portanto, n\u00e3o ser\u00e3o executados.<\/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>Esses exemplos voc\u00ea pode ver ao vivo na <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\">nossa inst\u00e2ncia p\u00fablica do TeamCity<\/a>. Use o login de convidado para entrar. Outras inspe\u00e7\u00f5es est\u00e3o descritas na <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/2022.2\/new-in-2022-2.html\" target=\"_blank\" rel=\"noreferrer noopener\">nossa documenta\u00e7\u00e3o<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspe\u00e7\u00f5es PHP<\/h3>\n\n\n\n<p>Adicionamos inspe\u00e7\u00f5es nas categorias Bugs prov\u00e1veis, Documenta\u00e7\u00e3o, Estilo, Testes e Laravel, por exemplo:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Bug prov\u00e1vel: incompatibilidade de intervalos de n\u00fameros<\/h4>\n\n\n\n<p>Em uma fun\u00e7\u00e3o declarada com <code>returns int&lt;0,10&gt;<\/code>, marca instru\u00e7\u00f5es return que retornam um n\u00famero fora desse intervalo. Opera de maneira semelhante para campos, construtores de campo e chamadas de fun\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Documenta\u00e7\u00e3o: Tag de tipo sem nome de vari\u00e1vel<\/h4>\n\n\n\n<p>O snippet PHPDoc <code>@param string<\/code> \u00e9 redundante, pois n\u00e3o diz <em>o que<\/em> \u00e9 uma string. Ele deve ser removido ou substitu\u00eddo por <code>@param string $argument<\/code>, indicando que <em>argument<\/em> \u00e9 uma string.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Blade: Erro de an\u00e1lise devido a par\u00eanteses n\u00e3o pareados em literais de string<\/h4>\n\n\n\n<p>Detec\u00e7\u00e3o precoce de par\u00eanteses n\u00e3o pareados em literais de string que s\u00e3o posteriormente analisados pelo Blade, um processador de modelos.<\/p>\n\n\n\n<p>Se voc\u00ea tiver alguma sugest\u00e3o para futuros temas de blog ou se quiser saber mais sobre como o Qodana pode ajudar voc\u00ea e a sua empresa, poste um coment\u00e1rio aqui, marque-nos no <a href=\"https:\/\/twitter.com\/Qodana\" target=\"_blank\" rel=\"noopener\">Twitter<\/a> ou entre em contato conosco em <em>qodana-support@jetbrains.com<\/em>.<\/p>\n\n\n\n<p><em>A equipe do Qodana<\/em><\/p>\n\n\n\n<p><em>Artigo original em ingl\u00eas por:<\/em><br><\/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":1086,"featured_media":272416,"comment_status":"closed","ping_status":"closed","template":"","categories":[896,5108,907],"tags":[7076],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/qodana\/279644"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/qodana"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/qodana"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=279644"}],"version-history":[{"count":8,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/qodana\/279644\/revisions"}],"predecessor-version":[{"id":629388,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/qodana\/279644\/revisions\/629388"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/272416"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=279644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=279644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=279644"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=279644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}