Trabalhar com bases de código grandes introduz um novo conjunto de desafios em comparação ao trabalho em projetos menores. Com base tanto em nossa experiência escalando a própria base de código do Cursor quanto em insights de clientes gerenciando bases de código massivas, descobrimos alguns padrões úteis para lidar com o aumento da complexidade. Neste guia, vamos percorrer algumas dessas técnicas que consideramos úteis para bases de código grandes.

Use o Chat para rapidamente se familiarizar com código desconhecido

Navegar por uma base de código grande, especialmente se ela for nova para você, pode ser desafiador. Você frequentemente usa grep, pesquisa e clica por aí para encontrar as partes específicas da base de código que está procurando. Com o Chat, você pode começar a fazer perguntas para encontrar o que está procurando e obter uma explicação detalhada de como funciona. Aqui estamos obtendo ajuda para encontrar detalhes de implementação da indexação de base de código no Cursor, e até mesmo pedindo alguns exemplos para facilitar o entendimento.
Para dar ao Cursor um entendimento aprimorado da estrutura da sua base de código, certifique-se de habilitar Include Project Structure em Settings para melhor desempenho.

Escreva regras para conhecimento específico do domínio

Se você estivesse integrando um novo colaborador ao seu código, que contexto você daria a ele para garantir que possa começar a fazer contribuições significativas? Sua resposta a essa pergunta provavelmente é uma informação valiosa para o Cursor entender também. Para cada organização ou projeto, há conhecimento latente que pode não estar totalmente capturado em sua documentação. Usar regras de forma eficaz é a melhor maneira de garantir que o Cursor esteja obtendo o quadro completo. Por exemplo, se você está escrevendo instruções sobre como implementar uma nova funcionalidade ou serviço, considere escrever uma regra curta para documentá-la para a posteridade.
Boilerplate
---
description: Adicionar um novo serviço frontend do VSCode
---

1. **Definição da Interface:**
   - Defina uma nova interface de serviço usando `createDecorator` e certifique-se de que `_serviceBrand` esteja incluído para evitar erros.

2. **Implementação do Serviço:**
   - Implemente o serviço em um novo arquivo TypeScript, estendendo `Disposable`, e registre-o como singleton com `registerSingleton`.

3. **Contribuição do Serviço:**
   - Crie um arquivo de contribuição para importar e carregar o serviço, e registre-o no ponto de entrada principal.

4. **Integração de Contexto:**
   - Atualize o contexto para incluir o novo serviço, permitindo acesso em toda a aplicação.
Se há padrões de formatação comuns que você quer garantir que o Cursor siga, considere anexar automaticamente regras baseadas em padrões glob.
Formatting
---
globs: *.ts
---
- Use bun como gerenciador de pacotes. Veja [package.json](mdc:backend/reddit-eval-tool/package.json) para scripts
- Use kebab-case para nomes de arquivos
- Use camelCase para nomes de funções e variáveis
- Use UPPERCASE_SNAKE_CASE para constantes hardcoded
- Prefira `function foo()` ao invés de `const foo = () =>`
- Use `Array<T>` ao invés de `T[]`
- Use exportações nomeadas ao invés de exportações padrão, ex: (`export const variable ...`, `export function `)

Mantenha-se próximo ao processo de criação de planos

Para mudanças maiores, dedicar uma quantidade acima da média de reflexão para criar um plano preciso e bem delimitado pode melhorar significativamente a saída do Cursor. Se você descobrir que não está obtendo o resultado desejado após algumas variações diferentes do mesmo prompt, considere dar um passo atrás e criar um plano mais detalhado do zero, como se estivesse criando um PRD para um colega de trabalho. Frequentemente a parte difícil é descobrir qual mudança deve ser feita, uma tarefa adequada para humanos. Com as instruções certas, podemos delegar algumas partes da implementação para o Cursor. Uma maneira de usar IA para aprimorar o processo de criação de planos é usar o modo Ask. Para criar um plano, ative o modo Ask no Cursor e despeje qualquer contexto que você tenha de seus sistemas de gerenciamento de projetos, documentos internos ou pensamentos soltos. Pense sobre quais arquivos e dependências você tem na base de código que já sabe que quer incluir. Isso pode ser um arquivo que inclui pedaços de código com os quais você quer integrar, ou talvez uma pasta inteira. Aqui está um exemplo de prompt:
Planning prompt
- create a plan for how we shoud create a new feature (just like @existingfeature.ts)
- ask me questions (max 3) if anything is unclear
- make sure to search the codebase

@Past Chats (my earlier exploration prompts)

here's some more context from [project management tool]:
[pasted ticket description]
Estamos pedindo ao modelo para criar um plano e reunir contexto fazendo perguntas ao humano, referenciando quaisquer prompts de exploração anteriores e também as descrições dos tickets. Usar um modelo de pensamento como claude-3.7-sonnet, gemini-2.5-pro, ou o3 é recomendado, pois eles podem entender a intenção da mudança e sintetizar melhor um plano. A partir disso, você pode formular iterativamente o plano com a ajuda do Cursor antes de começar a implementação.

Escolha a ferramenta certa para o trabalho

Uma das habilidades mais importantes para usar o Cursor efetivamente é escolher a ferramenta certa para o trabalho. Pense sobre o que você está tentando realizar e escolha a abordagem que manterá você no fluxo.
FerramentaCaso de usoForçaLimitação
TabMudanças rápidas e manuaisControle total, rápidoArquivo único
Inline EditMudanças específicas em um arquivoEdições focadasArquivo único
ChatMudanças maiores e multi-arquivoColeta contexto automaticamente, edições profundasMais lento, pesado em contexto
Cada ferramenta tem seu ponto ideal:
  • Tab é sua escolha para edições rápidas onde você quer estar no controle
  • Inline Edit brilha quando você precisa fazer mudanças focadas em uma seção específica do código
  • Chat é perfeito para aquelas mudanças maiores onde você precisa que o Cursor entenda o contexto mais amplo
Quando você estiver usando o modo Chat (que pode parecer um pouco mais lento, mas é incrivelmente poderoso), ajude-o a te ajudar fornecendo bom contexto. Use @files para apontar para código similar que você quer emular, ou @folder para dar a ele uma melhor compreensão da estrutura do seu projeto. E não tenha medo de quebrar mudanças maiores em pedaços menores - começar chats novos ajuda a manter as coisas focadas e eficientes.

Principais Aprendizados

  • Delimite o escopo das mudanças e não tente fazer muito de uma vez
  • Inclua contexto relevante quando possível
  • Use Chat, Inline Edit e Tab para aquilo em que são melhores
  • Crie novos chats com frequência
  • Planeje com modo Ask, implemente com modo Agent