GitHub Copilot no VS Code com Formatação ao Salvar Ativada: Resolução de Conflitos
🔍 WiseChecker

GitHub Copilot no VS Code com Formatação ao Salvar Ativada: Resolução de Conflitos

Quando você ativa a formatação ao salvar no VS Code, as sugestões do GitHub Copilot podem entrar em conflito com o formatador automático. O editor reformata seu código no momento em que você salva, o que frequentemente sobrescreve as alterações geradas pelo Copilot ou causa indentação e posicionamento de colchetes inesperados. Esse conflito ocorre porque ambos os recursos tentam modificar o mesmo buffer de texto ao mesmo tempo. Este artigo explica por que o conflito ocorre e fornece etapas concretas para resolvê-lo sem desabilitar nenhum dos recursos.

Principais Conclusões: Resolvendo Conflitos entre Formatação ao Salvar e Copilot no VS Code

  • VS Code settings.json > editor.formatOnSave: Defina como true para ativar a formatação automática ao salvar o arquivo.
  • VS Code settings.json > editor.codeActionsOnSave: Desabilite source.organizeImports ou source.fixAll se eles interferirem nas conclusões do Copilot.
  • Configurações da extensão GitHub Copilot > Editor > Inline Suggest: Enable: Mantenha como true para permitir que o Copilot forneça sugestões antes da formatação ao salvar ser executada.

ADVERTISEMENT

Por que a Formatação ao Salvar e o Copilot Entram em Conflito no VS Code

O conflito decorre da ordem em que o VS Code aplica as alterações quando você salva um arquivo. Quando a formatação ao salvar está ativada, o VS Code executa o formatador imediatamente após o comando de salvar. Ao mesmo tempo, o Copilot pode ainda estar fornecendo sugestões inline ou completando um trecho de várias linhas. O formatador então reformata o arquivo inteiro, o que pode remover o código inserido pelo Copilot, alterar a indentação ou adicionar importações ausentes que o Copilot já havia colocado. Essa condição de corrida produz dois sintomas comuns: o código gerado pelo Copilot desaparece após salvar, ou o formatador e o Copilot disputam a colocação de colchetes, criando erros de sintaxe.

O Papel do Language Server do VS Code

O VS Code usa um language server para fornecer inteligência de código e formatação. O language server para cada linguagem, como TypeScript ou Python, tem suas próprias regras de formatação. Quando a formatação ao salvar é acionada, o language server envia uma solicitação de formatação ao editor. O Copilot, executando como uma extensão separada, também envia edições de texto para o buffer. Se ambas as solicitações chegarem quase ao mesmo tempo, o editor as mescla de forma imprevisível. Isso não é um bug em nenhuma das extensões, mas uma limitação de design de como o VS Code lida com edições de texto concorrentes.

Formatadores Comuns que Causam Conflitos

Nem todos os formatadores se comportam da mesma forma. O Prettier, por exemplo, reformata o arquivo inteiro e é agressivo ao remover vírgulas finais ou ajustar quebras de linha. O ESLint com --fix aplica apenas alterações específicas de regras. O conflito é mais pronunciado com o Prettier porque ele reescreve grandes seções de código. Formatadores Python como o Black também reformatam o arquivo inteiro, causando problemas semelhantes.

Etapas para Resolver o Conflito entre Formatação ao Salvar e Copilot

As etapas a seguir permitem manter tanto a formatação ao salvar quanto o Copilot ativos, minimizando conflitos. Aplique-as na ordem listada.

  1. Abra as Configurações do VS Code
    Pressione Ctrl+, para abrir o editor de Configurações. Clique no ícone Abrir Configurações no canto superior direito para alternar para a visualização do arquivo JSON. Isso dá a você controle total sobre configurações avançadas.
  2. Defina editor.formatOnSave como true
    Adicione ou modifique esta linha em settings.json: "editor.formatOnSave": true. Isso ativa a formatação automática toda vez que você salva um arquivo.
  3. Desabilite codeActionsOnSave que modificam importações
    Adicione este bloco em settings.json: "editor.codeActionsOnSave": {"source.organizeImports": false, "source.fixAll": false}. Essas ações frequentemente entram em conflito com o Copilot porque reorganizam as importações imediatamente após o formatador ser executado.
  4. Ative as sugestões inline do Copilot
    Abra a visualização de Extensões, encontre GitHub Copilot e clique no ícone de engrenagem. Selecione Configurações da Extensão. Certifique-se de que Editor > Inline Suggest: Enable esteja marcado. Isso mantém o Copilot ativo mesmo quando a formatação ao salvar está ativada.
  5. Defina um atraso para a formatação ao salvar
    Adicione "editor.formatOnSaveTimeout": 2000 em settings.json. Isso dá ao VS Code 2 segundos para concluir as sugestões do Copilot antes que o formatador seja executado. Ajuste o valor para cima se os conflitos persistirem.
  6. Reinicie o VS Code
    Feche e reabra o VS Code para aplicar todas as alterações. Teste digitando uma linha de código e pressionando Ctrl+S. O formatador deve ser executado após o Copilot ter concluído sua sugestão.

Método Alternativo: Use um Atalho de Teclado em Vez da Formatação Automática

Se o método de atraso não resolver o conflito, desabilite completamente a formatação ao salvar e use um atalho manual. Defina "editor.formatOnSave": false e pressione Shift+Alt+F para formatar apenas quando você escolher. Isso dá ao Copilot controle total sobre o buffer até que você decida formatar.

ADVERTISEMENT

Se o Copilot Ainda Tiver Problemas Após a Correção Principal

Mesmo após aplicar as etapas acima, alguns usuários experimentam conflitos residuais. Aqui estão os padrões mais comuns e suas correções específicas.

Sugestões do Copilot Desaparecem Após Salvar

Isso acontece quando o formatador é executado antes que o Copilot termine de escrever no buffer. Aumente o valor de editor.formatOnSaveTimeout para 3000 ou 5000 milissegundos. Se o problema persistir, verifique se outra extensão como ESLint ou Stylelint também é executada ao salvar. Desabilite essas extensões temporariamente para isolar a causa.

Formatação ao Salvar Adiciona Linhas em Branco Extras Após Conclusões do Copilot

Alguns formatadores, especialmente o Prettier, inserem linhas em branco após certas construções, como declarações de função. Isso é uma regra do formatador, não um problema do Copilot. Ajuste a configuração do formatador. Para o Prettier, adicione um arquivo .prettierrc com "insertFinalNewline": false ou modifique a configuração printWidth para reduzir a quebra de linha.

Copilot Para de Fornecer Sugestões Após a Formatação ao Salvar Ser Executada

Isso pode ocorrer se o language server travar após uma solicitação de formatação. Abra as Ferramentas do Desenvolvedor do VS Code com Ajuda > Alternar Ferramentas do Desenvolvedor. Procure por mensagens de erro na guia Console relacionadas ao language server. Reinicie o language server executando o comando Desenvolvedor: Recarregar Janela com Extensões Desabilitadas e depois reabilite as extensões uma por uma para encontrar a culpada.

Atraso na Formatação ao Salvar vs Formatação Manual: Principais Diferenças

Item Formatação ao Salvar com Atraso Formatação Manual (Shift+Alt+F)
Automação Totalmente automática ao salvar Requer acionamento manual
Risco de conflito com Copilot Baixo com timeout definido para 2000ms ou mais Nenhum, porque a formatação é executada após o Copilot terminar
Impacto no fluxo de trabalho Perfeito, nenhuma ação extra necessária Adiciona um pressionamento de tecla extra por salvamento de arquivo
Melhor para Equipes que exigem formatação consistente em cada commit Desenvolvedores que desejam controle total sobre quando a formatação é aplicada

O conflito entre GitHub Copilot e formatação ao salvar no VS Code é gerenciável com as configurações corretas. Use o método de atraso para manter ambos os recursos ativos, ou mude para formatação manual se os conflitos persistirem. Após aplicar as configurações, teste com um pequeno trecho de código para confirmar que as sugestões do Copilot permanecem intactas após salvar. Para controle avançado, considere adicionar substituições específicas de linguagem em settings.json para que a formatação ao salvar se aplique apenas a certos tipos de arquivo, como JavaScript ou Python.

ADVERTISEMENT