Você precisa que o GitHub Copilot entenda seu monorepo que contém JavaScript, Python, Go e Dockerfiles. Um monorepo com várias linguagens frequentemente cria um contexto ambíguo para o Copilot, gerando sugestões que não correspondem à linguagem do arquivo atual ou às convenções do projeto. Este artigo explica como configurar as opções do Copilot, usar arquivos de configuração do editor e definir substituições específicas por linguagem para que o Copilot gere código preciso para cada parte do seu monorepo.
Principais conclusões: Configurando o GitHub Copilot para um Monorepo com Várias Linguagens
- VS Code Settings > GitHub Copilot > Languages Disabled: Desabilite o Copilot para linguagens que você não usa no monorepo para reduzir ruído.
- Arquivo .vscode/settings.json: Defina configurações do Copilot por workspace que substituem os padrões globais para a pasta do monorepo.
- Copilot > Editor Configurations > Inline Suggestions: Defina gatilhos de sugestão por linguagem para evitar conclusões irrelevantes.
Por que o Copilot tem dificuldades em um Monorepo com Várias Linguagens
O GitHub Copilot usa a extensão do arquivo atualmente aberto e o contexto para determinar qual modelo de linguagem usar. Em um monorepo, você pode ter um arquivo main.py aberto enquanto o Copilot vê um package.json próximo em sua janela de contexto. Essa mistura pode confundir o modelo, fazendo com que ele gere código Python que referencia dependências JavaScript ou vice-versa.
O Copilot também lê comentários, importações e chamadas de função de outros arquivos no mesmo workspace. Se a raiz do workspace contém muitas linguagens, o modelo pode puxar padrões irrelevantes. Por exemplo, um arquivo server.go pode receber sugestões influenciadas por padrões de client.js vistos anteriormente na sessão.
A causa raiz é a falta de limites explícitos de linguagem. O Copilot não sabe automaticamente que /src/frontend/ é JavaScript e /src/backend/ é Python. Você deve fornecer esses limites por meio de arquivos de configuração do editor e configurações do Copilot.
Passos para Configurar o Copilot para um Monorepo com Várias Linguagens
- Abra o arquivo de configurações do workspace
No VS Code, vá em File > Open Folder e selecione a raiz do monorepo. Em seguida, pressione Ctrl+Shift+P no Windows ou Cmd+Shift+P no macOS, digite “Preferences: Open Workspace Settings (JSON)” e pressione Enter. Isso abre o arquivo.vscode/settings.jsondo workspace. - Desabilite o Copilot para linguagens que você não usa
Adicione o seguinte ao JSON de configurações para desabilitar o Copilot para linguagens não presentes no seu monorepo. Isso impede que o modelo gere sugestões nessas linguagens quando você acidentalmente abrir um arquivo com essa extensão."github.copilot.enable": { "": true, "plaintext": false, "yaml": false, "markdown": false }Substitua
plaintext,yamlemarkdownpor quaisquer linguagens que você queira excluir. - Defina gatilhos de sugestão por linguagem
No mesmosettings.json, adicione a configuraçãogithub.copilot.editor.enableAutoCompletionspor linguagem. Por exemplo, para habilitar sugestões inline apenas para Python e JavaScript:"[python]": { "github.copilot.editor.enableAutoCompletions": true }, "[javascript]": { "github.copilot.editor.enableAutoCompletions": true }, "[go]": { "github.copilot.editor.enableAutoCompletions": true }Para linguagens que você raramente usa, defina o valor como
falsepara reduzir a poluição. - Use arquivos .copilotignore para exclusão
Crie um arquivo.copilotignorena raiz do monorepo. Este arquivo usa a mesma sintaxe do.gitignore. Adicione caminhos para pastas que o Copilot não deve analisar, comonode_modules,distouvendor. Exemplo de conteúdo:node_modules/ dist/ vendor/ min.js mapO Copilot ignorará esses diretórios ao gerar sugestões, reduzindo o ruído de código de terceiros.
- Adicione marcadores de contexto específicos de linguagem
No topo de cada arquivo, adicione um comentário que declare explicitamente a linguagem e o propósito. O Copilot lê esses comentários e os usa como contexto. Por exemplo:// Python backend service for user authentication # Go module for database connection // JavaScript frontend utility functionsIsso ajuda o Copilot a ancorar o modelo de linguagem correto mesmo se a extensão do arquivo for ambígua.
- Teste o Copilot com um novo arquivo em cada linguagem
Crie um novo arquivo em cada diretório de linguagem, digite alguns caracteres e observe as sugestões. Se você vir código irrelevante, volte às configurações do workspace e ajuste as configurações específicas de linguagem. Por exemplo, se o Copilot sugerir código JavaScript em um arquivo Python, verifique se"[python]": {"github.copilot.editor.enableAutoCompletions": true}está definido e se nenhuma outra configuração de linguagem o substitui.
Problemas Comuns e Suas Correções
Copilot sugere código da linguagem errada
Isso acontece quando o modelo capta contexto de um arquivo aberto recentemente em uma linguagem diferente. Feche todas as abas exceto o arquivo atual. Em seguida, pressione Ctrl+Shift+I no Windows ou Cmd+Shift+I no macOS para abrir o painel de conclusões do Copilot. Clique no ícone de engrenagem e selecione “Reset Context”. Isso limpa a memória de curto prazo do modelo.
Copilot não sugere nada para uma linguagem específica
Verifique se a linguagem não está desabilitada nas configurações do workspace. Abra .vscode/settings.json e confira o objeto github.copilot.enable. Se a linguagem estiver faltando, adicione-a com o valor true. Confirme também se a extensão do arquivo corresponde a uma linguagem que o Copilot suporta. Por exemplo, .tsx é TypeScript React, não TypeScript puro. O Copilot suporta .tsx, mas você deve garantir que o identificador de linguagem esteja configurado corretamente na barra de status do VS Code.
Copilot inclui importações irrelevantes de outras linguagens
Use um arquivo .copilotignore para excluir diretórios que contenham código de outras linguagens. Por exemplo, se seu backend Python está em /backend/python/ e seu frontend JavaScript está em /frontend/js/, adicione o caminho do frontend ao .copilotignore ao trabalhar no backend Python. Você pode criar vários arquivos .copilotignore em subdiretórios para definir exclusões por pasta.
Configurações de Workspace do Copilot vs Configurações Globais: Principais Diferenças
| Item | Configurações do Workspace (.vscode/settings.json) | Configurações Globais (User settings.json) |
|---|---|---|
| Escopo | Aplica-se apenas à pasta do workspace aberto | Aplica-se a todos os workspaces e pastas |
| Localização | .vscode/settings.json dentro da raiz do workspace |
%APPDATA%/Code/User/settings.json no Windows ou ~/.config/Code/User/settings.json no macOS/Linux |
| Comportamento de substituição | Substitui as configurações globais para o workspace | Configurações padrão; podem ser substituídas pelas configurações do workspace |
| Caso de uso | Definir regras do Copilot por linguagem para um monorepo | Definir preferências globais do Copilot, como atraso de sugestão |
Use as configurações do workspace para configurações específicas de linguagem e as configurações globais para preferências universais, como atraso de sugestão ou atalhos de teclado.
Conclusão
Agora você pode configurar o GitHub Copilot para funcionar de forma eficaz em um monorepo com várias linguagens. Comece criando um arquivo de configurações do workspace em .vscode/settings.json e desabilite linguagens que você não precisa. Adicione um arquivo .copilotignore para excluir diretórios irrelevantes. Use comentários de contexto específicos de linguagem no topo de cada arquivo para ancorar o modelo. Se ainda assim vir sugestões entre linguagens, redefina o contexto do Copilot usando o ícone de engrenagem no painel de conclusões. Como próximo passo, explore a configuração github.copilot.chat.localeOverride para forçar o Copilot Chat a responder em um idioma específico para a documentação do seu monorepo.