{"id":463242,"date":"2024-04-08T06:35:56","date_gmt":"2024-04-08T05:35:56","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=blog&#038;p=463242"},"modified":"2024-04-08T21:20:43","modified_gmt":"2024-04-08T20:20:43","slug":"finalizacion-de-codigo-de-linea-completa-en-los-jetbrains-ides-todo-lo-que-necesita-saber","status":"publish","type":"blog","link":"https:\/\/blog.jetbrains.com\/es\/blog\/2024\/04\/08\/finalizacion-de-codigo-de-linea-completa-en-los-jetbrains-ides-todo-lo-que-necesita-saber\/","title":{"rendered":"Finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa en los JetBrains IDEs: todo lo que necesita saber"},"content":{"rendered":"\n<p>La programaci\u00f3n con IA sigue siendo un tema muy controvertido, pero no se puede negar que cada vez m\u00e1s desarrolladores est\u00e1n empezando a incorporar la IA en sus flujos de trabajo diarios. Tanto si ya ha elegido su bando en el debate como si a\u00fan no tiene una opini\u00f3n clara, tenemos una nueva funcionalidad en la versi\u00f3n 2024.1 de los <a href=\"https:\/\/www.jetbrains.com\/ides\/\" target=\"_blank\" rel=\"noopener\">JetBrains IDEs<\/a> que podr\u00eda despertar su inter\u00e9s: la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa. Est\u00e1 <strong>basada en la IA<\/strong> y se ejecuta <strong>localmente sin enviar ning\u00fan dato<\/strong> a trav\u00e9s de Internet.<\/p>\n\n\n\n<p>En este art\u00edculo del blog, le explicaremos qu\u00e9 es la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa, c\u00f3mo funciona, qu\u00e9 lenguajes son compatibles y c\u00f3mo puede hacernos llegar sus comentarios al respecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa en los JetBrains IDEs?<\/h2>\n\n\n\n<p>Este nuevo tipo de finalizaci\u00f3n de c\u00f3digo se a\u00f1adi\u00f3 a los JetBrains IDEs en la \u00faltima actualizaci\u00f3n 2024.1. Como puede ver a continuaci\u00f3n, adopta la forma de sugerencias de una sola l\u00ednea en tonos grises que completan las l\u00edneas bas\u00e1ndose en el contexto del archivo actual:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/FLCC-in-action.png\" alt=\"\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/FLCC-in-action.gif\" \/><\/figure>\n\n\n\n<p>Estas sugerencias se basan en modelos ling\u00fc\u00edsticos especializados que hemos entrenado espec\u00edficamente para diferentes lenguajes y marcos de trabajo. Los modelos se ejecutan localmente sin enviar c\u00f3digo a trav\u00e9s de Internet.<\/p>\n\n\n\n<p>La finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa est\u00e1 <strong>disponible actualmente para Java<\/strong>, <strong>Kotlin<\/strong>, <strong>Python<\/strong>, <strong>JavaScript<\/strong>, <strong>TypeScript<\/strong>, <strong>CSS<\/strong>, <strong>PHP<\/strong>, <strong>Go<\/strong> y<strong>Ruby<\/strong> dentro de los JetBrains IDEs correspondientes: IntelliJ IDEA Ultimate, PyCharm Professional, WebStorm, PhpStorm, GoLand y RubyMine. A lo largo de los pr\u00f3ximos meses, tenemos previsto ampliar la funcionalidad a C#, Rust y C++, por lo que tambi\u00e9n llegar\u00e1 a Rider, RustRover y CLion.<\/p>\n\n\n\n<p>Tenga en cuenta que la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa se incluye con su suscripci\u00f3n activa a los JetBrains IDEs sin coste adicional; solo debe asegurarse de que tiene la versi\u00f3n 2024.1 o posterior. Si a\u00fan no dispone de una suscripci\u00f3n, tambi\u00e9n puede utilizar esta funcionalidad durante los 30 d\u00edas de prueba gratuita.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo funciona la finalizaci\u00f3n de l\u00ednea completa?<\/h2>\n\n\n\n<p>Con la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa, ten\u00edamos en mente dos objetivos principales. La primera es obvia: ayudarle a ahorrar tiempo y aumentar su velocidad de codificaci\u00f3n. Pero m\u00e1s all\u00e1 de eso, tambi\u00e9n quer\u00edamos ofrecer una soluci\u00f3n que abordara las limitaciones que tienen ciertas organizaciones cuando se trata de utilizar soluciones de IA conectadas a la nube.<\/p>\n\n\n\n<p>He aqu\u00ed un resumen de c\u00f3mo la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa ayuda a cumplir estos dos objetivos:<\/p>\n\n\n\n<ul>\n<li><strong>Funciona de forma local y est\u00e1 disponible sin conexi\u00f3n<\/strong>. Esto significa que puede aprovechar la funcionalidad aunque no tenga conexi\u00f3n a Internet.<\/li>\n\n\n\n<li><strong>No env\u00eda ning\u00fan dato de su m\u00e1quina a trav\u00e9s de Internet<\/strong>. Los modelos ling\u00fc\u00edsticos en los que se basa la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa se ejecutan localmente, lo que es estupendo por dos razones. En primer lugar, su c\u00f3digo permanece seguro, ya que nunca sale de su m\u00e1quina. En segundo lugar, no hay gastos adicionales relacionados con la nube, por eso esta funci\u00f3n no tiene ning\u00fan coste adicional.<\/li>\n\n\n\n<li><strong>Est\u00e1 profundamente integrado en los JetBrains IDEs<\/strong>. Todas las sugerencias tendr\u00e1n el formato adecuado, y el IDE comprobar\u00e1 que los par\u00e9ntesis y las comillas est\u00e9n equilibrados. Adem\u00e1s, utilizamos la potencia del an\u00e1lisis est\u00e1tico y nuestra comprensi\u00f3n del c\u00f3digo para filtrar las sugerencias incorrectas. Para cada lenguaje compatible se sugiere su propio conjunto de comprobaciones de correcci\u00f3n del c\u00f3digo. Las m\u00e1s b\u00e1sicas, como la comprobaci\u00f3n de referencias no resueltas, se implementan en la mayor\u00eda de los lenguajes para garantizar que el IDE no sugiera variables y m\u00e9todos que no existan. Tambi\u00e9n se admite la funci\u00f3n de importaci\u00f3n autom\u00e1tica.<\/li>\n\n\n\n<li><strong>Se ha dise\u00f1ado para que su flujo de trabajo sea lo m\u00e1s fluido posible<\/strong>. Utilizamos un filtrado inteligente para evitar mostrar sugerencias que tienden a ser canceladas expl\u00edcitamente o borradas justo despu\u00e9s de haber sido a\u00f1adidas.<\/li>\n<\/ul>\n\n\n\n<p>Para obtener m\u00e1s detalles t\u00e9cnicos, consulte <a href=\"https:\/\/blog.jetbrains.com\/blog\/2024\/04\/04\/full-line-code-completion-in-jetbrains-ides-all-you-need-to-know\/#under-the-hood\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/blog\/2024\/04\/04\/full-line-code-completion-in-jetbrains-ides-all-you-need-to-know\/#under-the-hood\">esta secci\u00f3n<\/a> a continuaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa vs. AI Assistant<\/h2>\n\n\n\n<p>Hay dos formas de sacar partido de la funcionalidad de la IA en los JetBrains IDE: la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa y <a href=\"https:\/\/www.jetbrains.com\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a>. Somos conscientes de que esto puede resultar confuso, as\u00ed que veamos m\u00e1s de cerca qu\u00e9 tienen en com\u00fan y en qu\u00e9 se diferencian.<\/p>\n\n\n\n<p>Tanto la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa como JetBrains AI Assistant tienen como objetivo ayudarle a trabajar m\u00e1s r\u00e1pido. Ambos van tambi\u00e9n m\u00e1s all\u00e1 de la finalizaci\u00f3n est\u00e1ndar que ya est\u00e1 disponible en los JetBrains IDE desde hace alg\u00fan tiempo. Sin embargo, JetBrains AI Assistant ofrece un conjunto de funciones m\u00e1s completo, que incluye un chat inteligente contextual y la capacidad de generar pruebas o escribir documentaci\u00f3n.<\/p>\n\n\n\n<p>Consulte la tabla siguiente para comparar las dos funcionalidades de la IA:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1700\" height=\"992\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/FLCC-2024-1-infographic.png\" alt=\"\" class=\"wp-image-460021\"\/><\/figure>\n\n\n\n<p>Tenga la seguridad de que <strong>nunca entrenamos ninguna de nuestras funcionalidades de IA con el c\u00f3digo de los clientes<\/strong>. Si su empresa tiene una normativa estricta en materia de privacidad de datos, pero aun as\u00ed desea acelerar sus flujos de trabajo con la IA, la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa puede ser una mejor opci\u00f3n para usted.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entre bastidores<\/h2>\n\n\n\n<p>La columna vertebral de la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa es un modelo de lenguaje espec\u00edfico del lenguaje de programaci\u00f3n, que se entrena internamente utilizando un conjunto de datos de c\u00f3digo fuente abierto con licencias permisivas. En el modelo ling\u00fc\u00edstico se introduce el c\u00f3digo que precede al signo de intercalaci\u00f3n, aunque para algunos lenguajes tambi\u00e9n a\u00f1adimos contenido de archivos relacionados. El resultado es la continuaci\u00f3n de la l\u00ednea actual sugerida por el modelo, que se muestra en gris.<\/p>\n\n\n\n<p>La inferencia del modelo ling\u00fc\u00edstico se ejecuta en su m\u00e1quina local. Para garantizar la generaci\u00f3n m\u00e1s eficiente, la inferencia del modelo se ejecuta en un proceso por separado y est\u00e1 muy optimizada para la arquitectura de la m\u00e1quina de destino. Por ejemplo, si utiliza la arquitectura x86-64, el modelo se ejecutar\u00e1 en la CPU, mientras que si utiliza la arquitectura ARM64, el modelo utilizar\u00e1 la potencia de la GPU de su ordenador.<\/p>\n\n\n\n<p>Una vez generada la sugerencia, se aplica una serie de pasos de postprocesamiento. En primer lugar, comprobamos si esta sugerencia es sint\u00e1ctica y sem\u00e1nticamente correcta y, a continuaci\u00f3n, realizamos un filtrado inteligente, formateo, equilibrado de par\u00e9ntesis y otras manipulaciones diversas. El postprocesamiento es crucial para la experiencia del usuario, por lo que hacemos todo lo posible para mostrar solo sugerencias valiosas que no perturben su flujo de trabajo.<\/p>\n\n\n\n<p>Por \u00faltimo, puede que tambi\u00e9n se pregunte <strong>por qu\u00e9 nos hemos decidido por las sugerencias de una sola l\u00ednea<\/strong>. La longitud de las sugerencias de finalizaci\u00f3n de la IA es un compromiso. Aunque las sugerencias m\u00e1s largas tienden a reducir el n\u00famero de teclas que pulsar, lo cual es bueno, tambi\u00e9n aumentan el n\u00famero de revisiones necesarias por su parte. Teniendo en cuenta lo anterior, decidimos que completar una sola l\u00ednea de c\u00f3digo ser\u00eda un compromiso justo.<\/p>\n\n\n\n<p>Esta decisi\u00f3n nos permiti\u00f3 reducir el tama\u00f1o del modelo sin que disminuyera significativamente la calidad de la sugerencia. En la versi\u00f3n 2024.1 de los JetBrains IDEs, utilizamos un modelo de lenguaje que tiene 100 millones de par\u00e1metros, con un tama\u00f1o de contexto m\u00e1ximo de 1536 tokens, lo que equivale aproximadamente a 170 l\u00edneas de c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo adaptar la funcionalidad<\/h2>\n\n\n\n<p>Puede configurar la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa en <em>Settings | Editor | General | Code Completion <\/em>; todos los ajustes se encuentran ah\u00ed, en la secci\u00f3n <em>Machine Learning-Assisted Completion<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/FLCC-settings-in-WebStorm.png\" alt=\"\" class=\"wp-image-459965\"\/><\/figure>\n\n\n\n<p>Si desea desactivar la funcionalidad, puede hacerlo desmarcando la casilla <em>Enable Full Line suggestions<\/em>. Alternativamente, puede desactivar el complemento que posibilita esta funcionalidad. Para ello, vaya a <em>Settings | Plugins<\/em>, cambie a la pesta\u00f1a <em>Installed<\/em> y busque <em>Full line code completion<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo transmitirnos su opini\u00f3n<\/h2>\n\n\n\n<p>La finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa sigue en desarrollo activo, por lo que le animamos a que comparta su opini\u00f3n con nosotros. Puede hacerlo dejando un comentario en este art\u00edculo del blog. Tambi\u00e9n puede votar las incidencias existentes <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/IDEA?q=Subsystem:%7BEditor.%20Code%20Completion.%20Full%20Line%7D\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a> o crear una nueva iniciando sesi\u00f3n y pulsando el bot\u00f3n <em>New Issue<\/em> en la esquina superior derecha.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/03\/FLCC-reporting-issues.png\" alt=\"\" class=\"wp-image-459976\"\/><\/figure>\n\n\n\n<p>Eso es todo por hoy. <strong>Pruebe la finalizaci\u00f3n de c\u00f3digo de l\u00ednea completa<\/strong> y d\u00edganos qu\u00e9 le parece. Seguiremos mejorando esta funcionalidad, siendo por ahora nuestras principales prioridades la compatibilidad con C#, Rust y C++, as\u00ed como una mejor integraci\u00f3n con la finalizaci\u00f3n de c\u00f3digo multil\u00ednea de AI Assistant. \u00a1Mant\u00e9ngase al d\u00eda de las \u00faltimas noticias!<\/p>\n\n\n\n<p><em>Art\u00edculo original en ingl\u00e9s de:<\/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":1086,"featured_media":459993,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[6847],"cross-post-tag":[6632,6284,6637,6419,6640,6645],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/463242"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"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=463242"}],"version-history":[{"count":7,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/463242\/revisions"}],"predecessor-version":[{"id":463856,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/blog\/463242\/revisions\/463856"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/459993"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=463242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=463242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=463242"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=463242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}