{"id":463240,"date":"2024-04-08T06:34:34","date_gmt":"2024-04-08T05:34:34","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=blog&#038;p=463240"},"modified":"2024-04-08T21:06:57","modified_gmt":"2024-04-08T20:06:57","slug":"complementacao-de-codigo-de-linha-completa-em-jetbrains-ides-tudo-o-que-voce-precisa-saber","status":"publish","type":"blog","link":"https:\/\/blog.jetbrains.com\/pt-br\/blog\/2024\/04\/08\/complementacao-de-codigo-de-linha-completa-em-jetbrains-ides-tudo-o-que-voce-precisa-saber\/","title":{"rendered":"Complementa\u00e7\u00e3o de c\u00f3digo de linha completa em JetBrains IDEs: tudo o que voc\u00ea precisa saber"},"content":{"rendered":"\n<p>A programa\u00e7\u00e3o com IA ainda \u00e9 um tema altamente controverso, mas n\u00e3o h\u00e1 como negar que cada vez mais desenvolvedores est\u00e3o come\u00e7ando a incorporar a IA em seus workflows di\u00e1rios. N\u00e3o importa se voc\u00ea j\u00e1 escolheu seu lado no debate ou ainda n\u00e3o se decidiu, temos um novo recurso na v2024.1 dos <a href=\"https:\/\/www.jetbrains.com\/ides\/\" target=\"_blank\" rel=\"noopener\">JetBrains IDEs<\/a> que pode despertar seu interesse: complementa\u00e7\u00e3o de c\u00f3digo de linha completa. Ele \u00e9 <strong>alimentado por IA<\/strong> e funciona <strong>localmente sem enviar dados<\/strong> pela Internet.<\/p>\n\n\n\n<p>Nesta postagem do nosso blog, falaremos mais sobre o que \u00e9 o recurso de complementa\u00e7\u00e3o de c\u00f3digo de linha completa, como ele funciona, quais linguagens s\u00e3o compat\u00edveis e como voc\u00ea pode nos enviar feedback sobre ele.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 a complementa\u00e7\u00e3o de c\u00f3digo de linha completa nos JetBrains IDEs?<\/h2>\n\n\n\n<p>Esse novo tipo de complementa\u00e7\u00e3o de c\u00f3digo foi adicionado aos JetBrains IDEs com a atualiza\u00e7\u00e3o 2024.1 mais recente. Como voc\u00ea pode ver abaixo, ele assume a forma de sugest\u00f5es de linha \u00fanica em tons de cinza que complementam as linhas com base no contexto do arquivo atual:<\/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>Essas sugest\u00f5es s\u00e3o alimentadas por modelos de linguagem especializados que n\u00f3s treinamos especificamente para diferentes linguagens e frameworks. Os modelos s\u00e3o executados localmente sem enviar c\u00f3digo pela Internet.<\/p>\n\n\n\n<p>A complementa\u00e7\u00e3o de c\u00f3digo de linha completa est\u00e1 <strong>dispon\u00edvel atualmente para Java<\/strong>, <strong>Kotlin<\/strong>, <strong>Python<\/strong>, <strong>JavaScript<\/strong>, <strong>TypeScript<\/strong>, <strong>CSS<\/strong>, <strong>PHP<\/strong>, <strong>Go<\/strong> e <strong>Ruby<\/strong> nos JetBrains IDEs correspondentes: IntelliJ IDEA Ultimate, PyCharm Professional, WebStorm, PhpStorm, GoLand e RubyMine. Nos pr\u00f3ximos meses, planejamos estender a funcionalidade para C#, Rust e C++, para que ela tamb\u00e9m chegue ao Rider, RustRover e CLion.<\/p>\n\n\n\n<p>Observe que a complementa\u00e7\u00e3o de c\u00f3digo de linha completa est\u00e1 inclu\u00edda na sua assinatura ativa do JetBrains IDE sem custo adicional: apenas certifique-se de estar na vers\u00e3o 2024.1 ou posterior. Se voc\u00ea ainda n\u00e3o tem uma assinatura, tamb\u00e9m pode usar esse recurso durante a avalia\u00e7\u00e3o gratuita de 30 dias.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como funciona a complementa\u00e7\u00e3o de c\u00f3digo de linha completa?<\/h2>\n\n\n\n<p>Com a complementa\u00e7\u00e3o de c\u00f3digo de linha completa, t\u00ednhamos dois objetivos principais em mente. O primeiro \u00e9 \u00f3bvio: ajudar voc\u00ea a poupar tempo e aumentar sua velocidade de programa\u00e7\u00e3o. Mas, al\u00e9m disso, tamb\u00e9m quer\u00edamos fornecer uma solu\u00e7\u00e3o que abordasse as restri\u00e7\u00f5es que certas organiza\u00e7\u00f5es enfrentam quando se trata de usar solu\u00e7\u00f5es de IA conectadas \u00e0 nuvem.<\/p>\n\n\n\n<p>Aqui est\u00e1 um resumo de como a complementa\u00e7\u00e3o de c\u00f3digo de linha completa ajuda a atingir esses dois objetivos:<\/p>\n\n\n\n<ul>\n<li><strong>Funciona localmente e est\u00e1 dispon\u00edvel offline<\/strong>. Isso significa que voc\u00ea pode aproveitar as vantagens do recurso mesmo se n\u00e3o estiver conectado \u00e0 Internet.<\/li>\n\n\n\n<li><strong>Ele n\u00e3o envia dados da sua m\u00e1quina pela Internet<\/strong>. Os modelos de linguagem que possibilitam a complementa\u00e7\u00e3o de c\u00f3digo de linha completa s\u00e3o executados localmente, o que \u00e9 \u00f3timo por dois motivos. Em primeiro lugar, seu c\u00f3digo permanece seguro, pois nunca sai da sua m\u00e1quina. Em segundo lugar, n\u00e3o h\u00e1 despesas adicionais relacionadas \u00e0 nuvem, e \u00e9 por isso que esse recurso n\u00e3o tem custo adicional.<\/li>\n\n\n\n<li><strong>Est\u00e1 profundamente integrado aos JetBrains IDEs<\/strong>. Todas as sugest\u00f5es ser\u00e3o formatadas adequadamente, com o IDE verificando o equil\u00edbrio das aspas e colchetes. Al\u00e9m disso, usamos o poder da an\u00e1lise est\u00e1tica e nossa compreens\u00e3o do c\u00f3digo para filtrar sugest\u00f5es incorretas. Cada linguagem suportada tem seu pr\u00f3prio conjunto de verifica\u00e7\u00f5es sugeridas de corre\u00e7\u00e3o de c\u00f3digo. As mais b\u00e1sicas, como verifica\u00e7\u00f5es de refer\u00eancias n\u00e3o resolvidas, s\u00e3o implementadas na maioria das linguagens para garantir que o IDE n\u00e3o sugira vari\u00e1veis e m\u00e9todos inexistentes. Tamb\u00e9m h\u00e1 suporte para o recurso de importa\u00e7\u00e3o autom\u00e1tica.<\/li>\n\n\n\n<li><strong>Ele foi projetado para manter seu fluxo de trabalho o mais tranquilo poss\u00edvel<\/strong>. Usamos filtragem inteligente para evitar a exibi\u00e7\u00e3o de sugest\u00f5es que tendem a ser canceladas explicitamente ou exclu\u00eddas logo ap\u00f3s serem adicionadas.<\/li>\n<\/ul>\n\n\n\n<p>Para alguns detalhes t\u00e9cnicos adicionais, 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 se\u00e7\u00e3o<\/a> abaixo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Complementa\u00e7\u00e3o de c\u00f3digo de linha completa vs. AI Assistant<\/h2>\n\n\n\n<p>H\u00e1 duas maneiras de se beneficiar da funcionalidade da IA nos JetBrains IDEs: complementa\u00e7\u00e3o de c\u00f3digo de linha completa e <a href=\"https:\/\/www.jetbrains.com\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a>. Sabemos que isso pode ser confuso, ent\u00e3o vamos examinar mais de perto o que eles t\u00eam em comum e como diferem.<\/p>\n\n\n\n<p>Tanto a complementa\u00e7\u00e3o de c\u00f3digo de linha completa quanto o JetBrains AI Assistant visam ajudar voc\u00ea a trabalhar com mais rapidez. Ambos tamb\u00e9m v\u00e3o al\u00e9m da complementa\u00e7\u00e3o padr\u00e3o que j\u00e1 est\u00e1 dispon\u00edvel nos JetBrains IDEs h\u00e1 algum tempo. No entanto, o <strong>JetBrains AI Assistant oferece um conjunto de recursos mais abrangente<\/strong>, incluindo chat inteligente com reconhecimento de contexto e a capacidade de gerar testes ou escrever documenta\u00e7\u00e3o.<\/p>\n\n\n\n<p>Consulte a tabela abaixo para uma compara\u00e7\u00e3o das duas funcionalidades de 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>Garantimos que <strong>nunca treinamos nossos recursos de IA com o c\u00f3digo dos nossos clientes<\/strong>. Se a sua empresa tem regulamenta\u00e7\u00f5es rigorosas de privacidade de dados, mas voc\u00ea ainda deseja acelerar seus workflows com a IA, a complementa\u00e7\u00e3o de c\u00f3digo de linha completa pode ser uma escolha melhor para voc\u00ea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nos bastidores<\/h2>\n\n\n\n<p>A espinha dorsal da complementa\u00e7\u00e3o de c\u00f3digo de linha completa \u00e9 um modelo de linguagem espec\u00edfico para cada linguagem de programa\u00e7\u00e3o, que \u00e9 treinado internamente usando um conjunto de dados de c\u00f3digo open source com licen\u00e7as permissivas. A entrada do modelo de linguagem \u00e9 o c\u00f3digo antes do cursor, embora, para algumas linguagens, tamb\u00e9m adicionemos conte\u00fado de arquivos relacionados. A sa\u00edda \u00e9 a continua\u00e7\u00e3o sugerida pelo modelo da linha atual, que \u00e9 mostrada em cinza.<\/p>\n\n\n\n<p>A infer\u00eancia do modelo de linguagem \u00e9 executada na sua m\u00e1quina local. Para garantir a gera\u00e7\u00e3o mais eficiente, a infer\u00eancia do modelo \u00e9 executada em um processo separado e \u00e9 altamente otimizada para a arquitetura da m\u00e1quina alvo. Por exemplo, se voc\u00ea estiver usando a arquitetura x86-64, o modelo ser\u00e1 executado na CPU e, se estiver usando a arquitetura ARM64, o modelo usar\u00e1 a pot\u00eancia da GPU do seu computador.<\/p>\n\n\n\n<p>Depois que a sugest\u00e3o \u00e9 gerada, uma s\u00e9rie de etapas de p\u00f3s-processamento s\u00e3o aplicadas. Primeiro, verificamos se essa sugest\u00e3o est\u00e1 sintaticamente e semanticamente correta e, em seguida, realizamos filtragem inteligente, formata\u00e7\u00e3o, equil\u00edbrio de par\u00eanteses e v\u00e1rias outras manipula\u00e7\u00f5es. O p\u00f3s-processamento \u00e9 crucial para a experi\u00eancia dos usu\u00e1rios e, por isso, fazemos o poss\u00edvel para mostrar apenas sugest\u00f5es valiosas que n\u00e3o atrapalham seu fluxo de trabalho.<\/p>\n\n\n\n<p>Por \u00faltimo, voc\u00ea tamb\u00e9m pode estar se perguntando <strong>por que decidimos optar por sugest\u00f5es de linha \u00fanica<\/strong>. A extens\u00e3o das sugest\u00f5es de complementa\u00e7\u00e3o da IA \u00e9 um dilema. Embora sugest\u00f5es mais longas tendam a reduzir o n\u00famero de pressionamentos de tecla que voc\u00ea precisa fazer, o que \u00e9 bom, elas tamb\u00e9m aumentam o n\u00famero de revis\u00f5es necess\u00e1rias da sua parte. Levando isso em considera\u00e7\u00e3o, decidimos que complementar uma \u00fanica linha de c\u00f3digo seria um compromisso justo.<\/p>\n\n\n\n<p>Essa decis\u00e3o nos permitiu reduzir o tamanho do modelo sem qualquer decl\u00ednio significativo na qualidade das sugest\u00f5es. Na vers\u00e3o 2024.1 dos JetBrains IDEs, usamos um modelo de linguagem que possui 100 milh\u00f5es de par\u00e2metros, com um tamanho m\u00e1ximo de contexto de 1.536 tokens, o que equivale a aproximadamente 170 linhas de c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como adaptar o recurso<\/h2>\n\n\n\n<p>Voc\u00ea pode configurar a complementa\u00e7\u00e3o de c\u00f3digo de linha completa em <em>Settings | Editor | General | Code Completion <\/em>: todas as configura\u00e7\u00f5es podem ser encontradas l\u00e1, na se\u00e7\u00e3o <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>Se quiser desativar o recurso, desmarque a caixa de sele\u00e7\u00e3o <em>Enable Full Line suggestions<\/em>. Como alternativa, voc\u00ea pode desabilitar o plug-in que alimenta esse recurso. Para fazer isso, acesse <em>Settings | Plugins<\/em>, alterne para a guia <em>Installed<\/em> e procure <em>Full line code completion<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como fornecer feedback<\/h2>\n\n\n\n<p>A complementa\u00e7\u00e3o de c\u00f3digo de linha completa ainda est\u00e1 em desenvolvimento ativo e, por isso, incentivamos voc\u00ea a compartilhar seus coment\u00e1rios conosco. Voc\u00ea pode fazer isso deixando um coment\u00e1rio nesta postagem do blog. Voc\u00ea tamb\u00e9m pode votar a favor de issues existentes <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/IDEA?q=Subsystem:%7BEditor.%20Code%20Completion.%20Full%20Line%7D\" target=\"_blank\" rel=\"noopener\">aqui<\/a> ou criar um novo fazendo login e clicando no bot\u00e3o <em>New Issue<\/em> no canto superior direito.<\/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>\u00c9 isso por hoje. <strong>Experimente a complementa\u00e7\u00e3o de c\u00f3digo de linha completa<\/strong> e conte-nos o que achou. Continuaremos melhorando ainda mais essa funcionalidade, com o suporte para C#, Rust e C++, bem como a melhor integra\u00e7\u00e3o com a complementa\u00e7\u00e3o de c\u00f3digo de v\u00e1rias linhas do AI Assistant, sendo nossas principais prioridades por enquanto. Fique ligado nas atualiza\u00e7\u00f5es!<\/p>\n\n\n\n<p><em>Artigo original em ingl\u00eas por:<\/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\/pt-br\/wp-json\/wp\/v2\/blog\/463240"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/blog"}],"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=463240"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog\/463240\/revisions"}],"predecessor-version":[{"id":463854,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/blog\/463240\/revisions\/463854"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/459993"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=463240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=463240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=463240"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=463240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}