Работа с большими кодовыми базами представляет новый набор вызовов по сравнению с работой над небольшими проектами. Опираясь на наш опыт масштабирования собственной кодовой базы Cursor и понимание, полученное от клиентов, управляющих массивными кодовыми базами, мы обнаружили несколько полезных паттернов для работы с возросшей сложностью. В этом руководстве мы рассмотрим некоторые из этих техник, которые оказались полезными для больших кодовых баз.

Используйте Chat для быстрого изучения незнакомого кода

Навигация по большой кодовой базе, особенно если она новая для вас, может быть сложной задачей. Вы часто используете grep, поиск и переходите по ссылкам, чтобы найти конкретные части кодовой базы, которые вас интересуют. С помощью Chat вы можете начать задавать вопросы, чтобы найти то, что ищете, и получить подробное объяснение того, как это работает. Здесь мы получаем помощь в поиске деталей реализации индексации кодовой базы в Cursor и даже просим примеры, чтобы было легче понять.
Чтобы дать Cursor более глубокое понимание структуры вашей кодовой базы, обязательно включите Include Project Structure в Settings для улучшения производительности.

Написание правил для предметно-ориентированных знаний

Если бы вы вводили нового сотрудника в вашу кодовую базу, какой контекст вы бы предоставили ему, чтобы убедиться, что он может начать делать значимый вклад? Ваш ответ на этот вопрос, вероятно, является ценной информацией и для понимания Cursor. Для каждой организации или проекта существуют скрытые знания, которые могут быть не полностью отражены в вашей документации. Эффективное использование правил — это лучший способ убедиться, что Cursor получает полную картину. Например, если вы пишете инструкции о том, как реализовать новую функцию или сервис, рассмотрите возможность написания короткого правила для документирования этого на будущее.
Boilerplate
---
description: Add a new VSCode frontend service
---

1. **Interface Definition:**
   - Define a new service interface using `createDecorator` and ensure `_serviceBrand` is included to avoid errors.

2. **Service Implementation:**
   - Implement the service in a new TypeScript file, extending `Disposable`, and register it as a singleton with `registerSingleton`.

3. **Service Contribution:**
   - Create a contribution file to import and load the service, and register it in the main entrypoint.

4. **Context Integration:**
   - Update the context to include the new service, allowing access throughout the application.
Если есть общие шаблоны форматирования, которых вы хотите, чтобы Cursor придерживался, рассмотрите возможность автоматического прикрепления правил на основе glob-шаблонов.
Formatting
---
globs: *.ts
---
- Use bun as package manager. See [package.json](mdc:backend/reddit-eval-tool/package.json) for scripts
- Use kebab-case for file names
- Use camelCase for function and variable names
- Use UPPERCASE_SNAKE_CASE for hardcoded constants
- Prefer `function foo()` over `const foo = () =>`
- Use `Array<T>` instead of `T[]`
- Use named exports over default exports, e.g (`export const variable ...`, `export function `)

Оставайтесь близко к процессу создания плана

Для более крупных изменений потратить больше времени на создание точного, хорошо определенного плана может значительно улучшить результат работы Cursor. Если вы обнаружите, что не получаете желаемый результат после нескольких различных вариаций одного и того же запроса, рассмотрите возможность отступить назад и создать более детальный план с нуля, как если бы вы создавали PRD для коллеги. Часто сложная часть заключается в том, чтобы понять, какое изменение следует внести — задача, хорошо подходящая для людей. С правильными инструкциями мы можем делегировать некоторые части реализации Cursor. Один из способов использовать ИИ для улучшения процесса создания плана — это использовать режим Ask. Чтобы создать план, включите режим Ask в Cursor и загрузите любой контекст, который у вас есть из ваших систем управления проектами, внутренней документации или разрозненных мыслей. Подумайте о том, какие файлы и зависимости у вас есть в кодовой базе, которые вы уже знаете, что хотите включить. Это может быть файл, который содержит фрагменты кода, с которыми вы хотите интегрироваться, или, возможно, целая папка. Вот пример запроса:
Planning prompt
- создать план того, как мы должны создать новую функцию (точно так же, как @existingfeature.ts)
- задать мне вопросы (максимум 3), если что-то неясно
- обязательно найти в кодовой базе

@Past Chats (мои предыдущие исследовательские запросы)

вот еще немного контекста из [инструмента управления проектами]:
[вставленное описание задачи]
Мы просим модель создать план и собрать контекст, задавая человеку вопросы, ссылаясь на любые предыдущие исследовательские запросы, а также описания задач. Рекомендуется использовать мыслящую модель, такую как claude-3.7-sonnet, gemini-2.5-pro или o3, поскольку они могут понять намерение изменения и лучше синтезировать план. Исходя из этого, вы можете итеративно формулировать план с помощью Cursor перед началом реализации.

Выберите правильный инструмент для задачи

Один из самых важных навыков эффективного использования Cursor — это выбор правильного инструмента для задачи. Подумайте о том, чего вы пытаетесь достичь, и выберите подход, который поможет вам оставаться в потоке.
ИнструментСлучай использованияПреимуществоОграничение
TabБыстрые, ручные измененияПолный контроль, быстроОдин файл
Inline EditЛокальные изменения в одном файлеСфокусированные правкиОдин файл
ChatКрупные, многофайловые измененияАвтосбор контекста, глубокие правкиМедленнее, требует много контекста
У каждого инструмента есть своя область применения:
  • Tab — ваш основной выбор для быстрых правок, где вы хотите полностью контролировать процесс
  • Inline Edit отлично подходит, когда нужно внести сфокусированные изменения в конкретный участок кода
  • Chat идеален для более крупных изменений, где нужно, чтобы Cursor понимал более широкий контекст
Когда вы используете режим Chat (который может показаться немного медленнее, но невероятно мощный), помогите ему помочь вам, предоставляя хороший контекст. Используйте @files, чтобы указать на похожий код, который вы хотите эмулировать, или @folder, чтобы дать ему лучшее понимание структуры вашего проекта. И не бойтесь разбивать большие изменения на более мелкие части — начало новых чатов помогает сохранять фокус и эффективность.

Выводы

  • Ограничивайте область изменений и не пытайтесь сделать слишком много за раз
  • Включайте релевантный контекст, когда это возможно
  • Используйте Chat, Inline Edit и Tab для того, для чего они лучше всего подходят
  • Часто создавайте новые чаты
  • Планируйте с режимом Ask, реализуйте с режимом Agent