Учебник

Cursor и кодовая база: индексация, @-ссылки и работа с большими проектами

Как Cursor индексирует кодовую базу, как правильно использовать @codebase и @docs для точных ответов на вопросы про большой проект.

Макс Космов··7 мин чтения

Cursor автоматически индексирует весь ваш репозиторий, создавая быстрый поиск по файлам, функциям и переменным, а @‑ссылки позволяют мгновенно переходить к нужным участкам кода. Благодаря этой системе вы получаете мгновенный доступ к любой части большой кодовой базы без необходимости вручную открывать файлы. Это делает работу с масштабными проектами в Cursor быстрой и удобной.

до про · Cursor

Как Cursor индексирует проект и строит векторный поиск

Cursor начинает работу с глубокого анализа структуры репозитория. Процесс индексации запускается автоматически при открытии папки и работает в фоновом режиме. Система сканирует файловую систему, пропуская директории, указанные в .cursorignore, чтобы исключить лишний шум вроде node_modules или артефактов сборки. Для каждого файла инструментарий строит абстрактное синтаксическое дерево, выделяя определения функций, классов, импорты и переменные. Это позволяет понять не просто текст, а семантику кода и связи между модулями.

Основу интеллектуального поиска составляет векторизация. После форсинга код разбивается на логические фрагменты или санки. Размер и границы Чанков критически важны: они должны содержать законченный смысл, например, тело одной функции или описание конфигурации. Каждый фрагмент прогоняется через эмбеддинг-модель и превращается в многомерный вектор. В этом числовом пространстве код с похожей логикой или назначением оказывается близко друг к другу. Например, векторы для "валидации email" и "проверки формата телефона" будут соседними, хотя слова различаются.

Когда вы используете @Codebase или задаете вопрос, требующий контекста, ваш запрос также преобразуется в вектор. Cursor ищет в индексе ближайшие по косинусном расстоянию векторы кода. Это семантический поиск, который работает на уровне смысла, а не символов. Если вы попросите "найти место, где мы отправляем аналитику", система найдет вызов API, даже если функция называется trackEvent или logData.

Найденные фрагменты собираются в контекстное окно нейросети, позволяя ей отвечать на вопросы, опираясь на конкретные части проекта. Для эффективности Cursor применяет гибридный подход, совмещая векторный поиск с классическим полнотекстовым поиском и анализом графа зависимостей. Это позволяет учитывать как семантическую близость, так и точные совпадения имен. Индекс обновляется инкрементною при сохранении файлов, поэтому контекст всегда остается актуальным без задержек. Правильная настройка индексации через файлы исключения напрямую влияет на скорость и точность ответов, так как модель не тратит ресурсы на обработку мусорных данных.

@codebase: задаём вопросы по всему репозиторию

Cursor предоставляет возможность задавать вопросы по всему репозиторию с помощью функции @codebase. Эта функция позволяет искать и анализировать код в масштабах всего проекта, что особенно полезно при работе с большими и сложными кодовыми базами.

При использовании @codebase вы можете задавать вопросы о структуре кода, именах переменных, функциях и классах, а также о связях между ними. Например, вы можете спросить о всех местах, где используется определенная функция или класс, или найти все файлы, которые импортируют определенный модуль.

Для начала работы с @codebase необходимо открыть Cursor и перейти в репозиторий, который вы хотите проанализировать. Затем вы можете начать задавать вопросы, используя специальный синтаксис. Например, чтобы найти все места, где используется функция my_function, вы можете задать вопрос @codebase: где используется my_function?.

Cursor также поддерживает более сложные запросы, такие как поиск всех классов, которые наследуются от определенного базового класса, или поиск всех функций, которые принимают определенный тип аргумента. Для этого вы можете использовать специальные ключевые слова и операторы, такие как extends, implements и throws.

Одной из наиболее полезных возможностей @codebase является возможность анализировать связи между разными частями кода. Например, вы можете спросить о всех зависимостях между модулями или найти все места, где используется определенная библиотека. Это может помочь вам лучше понять структуру вашего проекта и выявить потенциальные проблемы или узкие места.

В целом, @codebase является мощным инструментом для анализа и понимания кодовых баз. С его помощью вы можете быстро и легко найти ответы на вопросы о структуре и поведении вашего кода, что может сэкономить вам много времени и усилий при работе с большими проектами.

@file и @folder: точечный контекст для конкретного места

Управление вниманием ИИ критически важно при работе с объемными репозиториями. Глобальный индекс полезен для обзора, но для точечных правок лучше ограничивать область видимости. Ссылки @file и @folder позволяют передать в чат строго определенный набор данных, исключая лишний шум и снижая вероятность галлюцинаций.

Команда @file подключает к диалогу содержимое конкретного документа. Это необходимо, когда требуется глубокий анализ одной единицы кода. Например, нужно переписать сложную функцию внутри utils.js или найти причину ошибки в конкретном компоненте React. Введите @ в строке ввода, выберите файл через поиск, и Cursor загрузит его текст в контекст. ИИ получит полное представление о структуре файла, импортах и зависимостях внутри него. Это работает эффективнее, чем простое копирование кода, так как модель понимает путь к файлу и его роль в проекте. Если вы выделите код в редакторе и нажмете Cmd+K, контекст будет ограничен выделением, но @file гарантирует, что модель видит файл целиком, что важно для учета побочных эффектов и глобальных переменных.

Для задач, затрагивающих несколько связанных файлов, используйте @folder. Это позволяет захватить целую директорию, например, модуль авторизации или набор API-маршрутов. Указав папку, вы даете ИИ понимание локальной архитектуры: он видит, как файлы внутри этой папки импортируют друг друга. Это идеально подходит для рефакторинга, где изменения в одном файле должны отразиться в соседнем, или для написания тестов на целый модуль. Модель анализирует структуру директории и строит логическую цепочку между файлами.

Старайтесь не указывать корневые каталоги с тысячами файлов или папки вроде node_modules, так как это быстро исчерпает лимит контекста и замедлит генерацию. Выбирайте минимально необходимый объем данных. Комбинируйте ссылки с естественным языком для максимальной точности. Запрос "Перепиши логику в @folder/controllers на использование async/await" даст гораздо более качественный результат, чем общая формулировка, так как модель точно знает границы применения изменений. Использование этих ссылок делает общение с ИИ предсказуемым и результативным.

@docs: подключение документации библиотеки

Функция @docs позволяет внедрять внешнюю документацию прямо в контекст диалога с ИИ, превращая Cursor из универсального помощника в эксперта по конкретному инструменту. Это критически важно, когда встроенная база знаний модели устарела или не содержит информации о дешёвых библиотеках. Вместо того чтобы полагаться на вероятностные догадки, вы предоставляете ИИ «источник истины» в виде официальной спецификации.

Активация происходит через команду @docs в строке ввода чата. Система предлагает два основных сценария: вставка ссылки (URL) или загрузка локального файла. Работа с URL удобна для онлайн-ресурсов. Cursor переходит по ссылке, парсит содержимое страницы и индексирует его. Это позволяет использовать актуальные версии документации, которые могли выйти вчера. Модель анализирует структуру, описания классов и примеры кода, ориентируясь именно на них при формировании ответов.

Загрузка локальных файлов поддерживает форматы PDF, Markdown и обычный текст. Это решение для закрытых корпоративных стандартов, PDF-мануалов или черновиков спецификаций, которые еще не опубликованы. После загрузки файл становится частью текущего контекста, и ИИ может цитировать его или переписывать код с учетом требований из документа.

Ключевое преимущество подхода - устранение галлюцинаций. При работе с новыми API или сложными фреймворками модели часто придумывают несуществующие методы или аргументы. @docs жестко ограничивает область генерации предоставленным текстом. Если метода нет в прикрепленной документации, ИИ не будет предлагать его использование.

Эффективность работы зависит от качества исходного материала. Лучше всего предоставлять ссылки на конкретные разделы, а не на оглавление всего сайта, чтобы сэкономить токены и сосредоточить внимание модели. Например, для настройки авторизации в OAuth 2.0 стоит прикрепить страницу с описанием эндпоинтов токена, а не всю документацию протокола. Это повышает точность ответов и ускоряет обработку запроса.

Используйте @docs для интеграций с платежными системами, работе с проприетарным SDK или изучении новых библиотек, где синтаксис играет решающую роль. Это снижает необходимость переключаться между браузером и редактором для сверки параметров функций.

@web: поиск в интернете прямо из чата

Функция @web превращает чат в окно браузера, но с аналитическими возможностями ИИ. Вместо переключения контекста и ручного чтения документации, вы делегируете рутину нейросети. Это критично при работе с быстро меняющимися технологиями или свежими библиотеками, где статическая база знаний модели уже устарела.

Для активации достаточно набрать @web в строке ввода. Система выполнит поиск, проанализирует несколько релевантных источников и синтезирует ответ, опираясь на актуальные данные. Главное преимущество - концептуализация. Cursor не просто выдает ссылку, а применяет найденную информацию к вашему текущему проекту, адаптируя примеры под ваш стек.

Рассмотрим сценарий отладки. Вы столкнулись с неочевидной ошибкой. Вместо копирования текста исключения в Google, напишите: @web как исправить ошибку [текст] в контексте NestJS. ИИ найдет обсуждения на StackOverflow, GitHub Issues или блогах, отфильтрует устаревшие решения и предложит патч, учитывая структуру вашего файла. Это экономит время, так как не нужно перелистывать десятки страниц форумов.

Эффективно использовать @web для изучения новых API. Документация часто бывает перегружена. Попросите Cursor найти конкретный параметр или пример: @web найди в официальной документации Tailwind CSS пример конфигурации для кастомных цветов. Модель извлечет нужный фрагмент и сразу покажет, как интегрировать его в ваш конфиг.

Комбинируйте @web с локальными файлами. Если вы мигрируете проект на новую версию фреймворка, добавьте @web к запросу вместе с @Codebase. Это позволит сравнить ваше текущее решение с новыми рекомендациями. Например: @Codebase @web обнови этот компонент согласно лучшим практикам React 19. ИИ проверит актуальные гайдлайны и перепишет код, соблюдая современные стандарты.

Важно помнить о верификации. Хотя @web повышает точность, всегда проверяйте ключевые утверждения по предоставленным ссылкам. Иногда модель может неверно интерпретировать технические нюансы. Используйте эту функцию как умного ассистента для первичного анализа, но финальный контроль остается за разработчиком. Это позволяет ускорить рутинные операции, не жертвуя качеством кода.

Исключение файлов из индекса: .cursorignore

Файл .cursorignore является основным инструментом управления видимостью кодовой базы для искусственного интеллекта. Он напрямую влияет на качество подсказок и скорость работы редактора, особенно в масштабных