{"id":279652,"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:58:14","modified_gmt":"2025-09-18T09:58:14","slug":"qodana-2022-2","status":"publish","type":"qodana","link":"https:\/\/blog.jetbrains.com\/es\/qodana\/2022\/08\/qodana-2022-2\/","title":{"rendered":"Qodana 2022.2 ya est\u00e1 disponible: CircleCI Orb y m\u00e1s de 50 nuevas inspecciones"},"content":{"rendered":"\n<p>\u00a1Qodana 2022.2 ya est\u00e1 aqu\u00ed! Hemos a\u00f1adido <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana?version=2022.2.1\" target=\"_blank\" rel=\"noreferrer noopener\">CircleCI Orb<\/a> al conjunto de herramientas de integraci\u00f3n de Qodana, y hemos incorporado nuevas y mejoradas inspecciones de c\u00f3digo para Java, Kotlin, Android, PHP, JavaScript y 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=\"COMIENCE A USAR 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>COMIENCE A USAR QODANA<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e1s inspecciones de c\u00f3digo con las que ejecutar Qodana<\/h2>\n\n\n\n<p>Qodana ya cuenta con complementos para <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> y <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/teamcity.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity<\/a>. A partir de la versi\u00f3n 2022.2, hemos preparado un <a href=\"https:\/\/circleci.com\/developer\/orbs\/orb\/jetbrains\/qodana\" target=\"_blank\" rel=\"noreferrer noopener\">CircleCI Qodana Orb<\/a> que le permite configurar las inspecciones de c\u00f3digo de forma r\u00e1pida y sencilla con sus proyectos 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>Adem\u00e1s, es f\u00e1cil configurar Qodana en <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> o <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/getting-started.html#docker-image-tab\" target=\"_blank\" rel=\"noreferrer noopener\">cualquier otra IC que admita la ejecuci\u00f3n de im\u00e1genes Docker<\/a>.<\/p>\n\n\n\n<p>Para incluir o excluir ciertas inspecciones de su an\u00e1lisis, puede personalizar su perfil de inspecci\u00f3n por defecto o crear uno nuevo. Quiz\u00e1 tambi\u00e9n desee hacer cumplir las inspecciones que son importantes para sus directrices de codificaci\u00f3n o las mejores pr\u00e1cticas. Consulte nuestra <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-yaml.html#Include+an+inspection+into+the+analysis+scope\" target=\"_blank\" rel=\"noreferrer noopener\">documentaci\u00f3n sobre Qodana<\/a> para obtener m\u00e1s informaci\u00f3n.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nuevas inspecciones<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Expresiones regulares<\/h3>\n\n\n\n<p>Las expresiones regulares son muy conocidas por su complejidad, su intrincada sintaxis y, en ocasiones, su verborrea. Para facilitarle las cosas, hemos a\u00f1adido nuevas inspecciones en esta \u00e1rea. Anteriormente, estas inspecciones solo estaban disponibles para Java, pero ahora las hemos puesto a disposici\u00f3n de todos los idiomas.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Expresiones regulares simplificadas<\/h4>\n\n\n\n<p>Una expresi\u00f3n regular como <code>[wa-zd]<\/code> puede simplificarse a solo <code>w<\/code>, ya que <code>w<\/code> ya incluye <code>a-z<\/code> adem\u00e1s de los d\u00edgitos. Esto ayuda a mejorar la legibilidad general del c\u00f3digo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Referencias de retorno sospechosas<\/h4>\n\n\n\n<p>Una expresi\u00f3n regular como <code>1(abc)<\/code> no puede coincidir con nada. Esto se debe a que el <code>1<\/code> se refiere al <code>abc<\/code>, que a\u00fan no est\u00e1 definido al evaluar el <code>1<\/code>. Esta inspecci\u00f3n evita los errores tipogr\u00e1ficos simples en las expresiones regulares y acelera la edici\u00f3n.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Elementos redundantes de clase <code>d<\/code>, <code>[:digit:]<\/code>, o <code>D<\/code><\/h4>\n\n\n\n<p>La expresi\u00f3n regular <code>[w+d]<\/code> puede escribirse como <code>[w+]<\/code>, ya que la <code>w<\/code> ya incluye la <code>d<\/code>. Ayuda a mejorar la legibilidad general del c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compatibilidad con Markdown<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Elementos de la lista mal numerados<\/h4>\n\n\n\n<p>Los elementos de una lista ordenada, como <code>1. 2. 4.<\/code>, se marcan como numerados de modo incoherente. En el Markdown renderizado, la lista sigue apareciendo como <code>1.2.3.<\/code>, pero la incoherencia dificulta la edici\u00f3n del c\u00f3digo fuente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspecciones de Java, Kotlin y Android<\/h3>\n\n\n\n<p>Hemos a\u00f1adido y reorganizado las inspecciones en las categor\u00edas: Javadoc, DevKit, Markdown, lenguaje Kotlin, estilo, patrones arquitect\u00f3nicos, rendimiento y compatibilidad con JUnit. Estos son un par de ejemplos del conjunto JUnit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">JUnit: Declaraci\u00f3n mal formada<\/h4>\n\n\n\n<p>Informa de las declaraciones de miembros de prueba de JUnit que est\u00e1n mal formadas y que probablemente no sean reconocidas por el marco de pruebas de JUnit. Declaraciones como estas podr\u00edan dar lugar a pruebas o m\u00e9todos del ciclo de vida no ejecutados.<\/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 no construible<\/h4>\n\n\n\n<p>Informa de los casos de prueba JUnit que no se pueden construir porque tienen un constructor no v\u00e1lido. Los casos de prueba como estos no ser\u00e1n recogidos por el ejecutor de pruebas de JUnit y, por lo tanto, no se ejecutar\u00e1n.<\/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>Estos ejemplos se pueden ver en vivo en <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\">nuestra instancia p\u00fablica de TeamCity<\/a>. Por favor, utilice el inicio de sesi\u00f3n de invitado para entrar. En <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/2022.2\/new-in-2022-2.html\" target=\"_blank\" rel=\"noreferrer noopener\">nuestra documentaci\u00f3n<\/a> se describen otras inspecciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inspecciones PHP<\/h3>\n\n\n\n<p>Hemos a\u00f1adido inspecciones en las categor\u00edas de errores probables, documentaci\u00f3n, estilo, pruebas y Laravel, por ejemplo:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Error probable: Desajuste de los rangos de n\u00fameros<\/h4>\n\n\n\n<p>En una funci\u00f3n declarada con <code>return int&lt;0,10&gt;<\/code>, marca las declaraciones return que devuelven un n\u00famero fuera de este rango. Lo mismo ocurre con los campos, los constructores de campos y las llamadas a funciones.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Documentaci\u00f3n: Etiqueta de tipo sin nombre de variable<\/h4>\n\n\n\n<p>El fragmento de PHPDoc <code>@param string<\/code> es redundante ya que no dice <em>qu\u00e9<\/em> es una cadena. Deber\u00eda eliminarse o sustituirse por <code>@param string $argument<\/code>, para indicar que <em>argument<\/em> es una cadena.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Blade: Error de an\u00e1lisis debido a par\u00e9ntesis no emparejados en literales de cadena<\/h4>\n\n\n\n<p>Detecci\u00f3n temprana de par\u00e9ntesis no emparejados en literales de cadena que posteriormente son analizados por Blade, un motor de plantillas.<\/p>\n\n\n\n<p>Si tiene alguna sugerencia para futuros temas del blog o si desea saber m\u00e1s sobre c\u00f3mo Qodana puede ayudarle a usted y a su negocio, publique un comentario aqu\u00ed, etiqu\u00e9tenos en <a href=\"https:\/\/twitter.com\/Qodana\" target=\"_blank\" rel=\"noopener\">Twitter<\/a> o p\u00f3ngase en contacto con nosotros en <em>qodana-support@jetbrains.com.<\/em><\/p>\n\n\n\n<p><em>El equipo de Qodana<\/em><\/p>\n\n\n\n<p><em>Art\u00edculo original en ingl\u00e9s de:<\/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":272418,"comment_status":"closed","ping_status":"closed","template":"","categories":[896,5108,907],"tags":[7076],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/qodana\/279652"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/qodana"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/qodana"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=279652"}],"version-history":[{"count":7,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/qodana\/279652\/revisions"}],"predecessor-version":[{"id":629386,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/qodana\/279652\/revisions\/629386"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/272418"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=279652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=279652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=279652"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=279652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}