Quando você usa GitHub Copilot e Prettier juntos no VS Code, pode notar que o código gerado pelo Copilot às vezes fica mal formatado ou com indentação incorreta. Isso acontece porque ambas as extensões tentam modificar o documento ao mesmo tempo. Uma extensão escreve o código enquanto a outra o reformata, causando edições sobrepostas que corrompem o arquivo. Este artigo explica por que a condição de corrida ocorre e fornece uma correção confiável para evitá-la.
Principais Conclusões: Resolvendo a Condição de Corrida entre Copilot e Prettier
- Configurações do VS Code > editor.formatOnSave: Defina como true e desative formatOnPaste para separar a formatação das sugestões inline.
- Configurações do VS Code > editor.codeActionsOnSave: Adicione “source.organizeImports”: true para executar o Prettier somente após o Copilot terminar de digitar.
- Configurações do VS Code > editor.formatOnType: Defina como false para impedir que o Prettier reformate durante a sugestão.
Por que a Condição de Corrida Acontece
O GitHub Copilot e o Prettier respondem às alterações no documento no VS Code. O Copilot insere código enquanto você digita ou aceita uma sugestão inline. O Prettier observa essas mesmas alterações e reformata o documento imediatamente. Quando ambas as extensões agem no mesmo evento de edição, suas modificações colidem. Uma extensão pode escrever um colchete de fechamento enquanto a outra o remove, deixando o arquivo em um estado inconsistente. Isso é uma condição de corrida clássica, onde a ordem de execução não é garantida. O resultado geralmente é sintaxe quebrada, espaços extras ou caracteres ausentes que exigem correção manual.
A causa raiz é que o VS Code aciona a formatação no mesmo evento que o Copilot usa para inserir código. Por padrão, o Prettier pode ser configurado para formatar ao salvar, ao digitar ou ao colar. Se qualquer um desses gatilhos disparar enquanto o Copilot está no meio da geração de uma sugestão, as duas extensões competem pelo buffer do documento. O problema é mais comum em arquivos grandes ou com sintaxe complexa, onde a operação de formatação leva mais tempo.
Passos para Prevenir a Condição de Corrida
A correção envolve configurar o VS Code para que o Prettier formate o documento somente após o Copilot terminar seu trabalho. Use os seguintes passos para ajustar suas configurações de usuário ou do workspace.
- Abra as Configurações do VS Code
Clique no ícone de engrenagem no canto inferior esquerdo e selecione Configurações. Alternativamente, pressione Ctrl+, no Windows ou Cmd+, no Mac. - Pesquise por formatar ao salvar
Na barra de pesquisa no topo, digite “formatar ao salvar”. Localize a configuração Editor: Formatar ao Salvar e marque a caixa para ativá-la. - Desative formatar ao digitar
Pesquise por “formatar ao digitar”. Desmarque a configuração Editor: Formatar ao Digitar. Isso impede que o Prettier reformate o documento enquanto você digita ou enquanto o Copilot gera uma sugestão inline. - Desative formatar ao colar
Pesquise por “formatar ao colar”. Desmarque a configuração Editor: Formatar ao Colar. Isso evita reformatação quando o Copilot cola um bloco de código no documento. - Configure ações de código ao salvar
Pesquise por “ações de código ao salvar”. Clique em Editar no settings.json. Adicione ou modifique a seguinte entrada:"editor.codeActionsOnSave": {
"source.organizeImports": true
}
Isso garante que o Prettier seja executado como uma ação de código após o evento de salvar, não durante o evento de edição. - Defina o Prettier como formatador padrão
Pesquise por “formatador padrão”. Selecione Prettier no menu suspenso para a configuração Editor: Formatador Padrão. Isso garante que apenas o Prettier lide com a formatação, não o formatador integrado ou outras extensões. - Reinicie o VS Code
Feche e reabra o VS Code para aplicar todas as alterações de configuração. Teste aceitando uma sugestão do Copilot e salvando o arquivo. A formatação deve ser aplicada sem corrupção.
Se a Condição de Corrida Ainda Ocorrer
Sugestões do Copilot ainda mal formatadas após a correção
Se o problema persistir, verifique se outra extensão também está formatando o documento. Extensões como ESLint, Stylelint ou editorconfig podem acionar eventos de formatação adicionais. Desative temporariamente todas as extensões não essenciais. Se o problema parar, reative as extensões uma a uma para identificar a conflitante.
Prettier não executa ao salvar
Se a formatação não for aplicada ao salvar, verifique se o Prettier está instalado e habilitado. Abra o painel de Extensões, pesquise por Prettier e certifique-se de que não está desabilitado. Confirme também se o arquivo de configurações do workspace não substitui as configurações do usuário. Abra .vscode/settings.json no seu projeto e verifique se há valores conflitantes.
Copilot para de sugerir código
Se desativar formatar ao digitar fizer o Copilot parar de fornecer sugestões, isso não é um efeito colateral direto. O Copilot não depende de formatar ao digitar. No entanto, se você desativou as sugestões inline acidentalmente, verifique as configurações da extensão do Copilot. Abra o painel de Extensões, clique em Copilot e certifique-se de que Habilitar Sugestões Inline está marcado.
Sugestões Inline do Copilot vs Formatar ao Salvar do Prettier: Comparação
| Item | Sugestões Inline do Copilot (padrão) | Formatar ao Salvar do Prettier (recomendado) |
|---|---|---|
| Evento de gatilho | Pressionar tecla ou pausa após digitar | Salvar arquivo (Ctrl+S) |
| Risco de conflito | Alto quando combinado com formatar ao digitar ou formatar ao colar | Baixo porque a formatação ocorre após o Copilot terminar de escrever |
| Experiência do usuário | O código aparece instantaneamente, mas pode exigir limpeza manual | O código é formatado consistentemente após salvar |
| Recomendado ou não | Use como está | Ative para formatação estável |
Ao desativar formatar ao digitar e formatar ao colar, você impede que o Prettier reaja ao mesmo evento de edição que o Copilot usa. Formatar ao salvar executa após o documento estar estável. Essa separação elimina completamente a condição de corrida. Se você preferir formatação em tempo real, pode ativar formatar ao digitar e aceitar correções manuais ocasionais. Mas para a maioria dos usuários, a abordagem baseada em salvar fornece um fluxo de trabalho confiável sem código corrompido.