Команда SourceCraft (платформа Яндекса для полного цикла разработки) раскрыла подробности реализации одной из самых сложных функций для современных IDE и веб-интерфейсов — полнотекстового поиска по коду относительно произвольного коммита.
Владимир Бобров, разработчик Yandex Infrastructure, объяснил, почему стандартные подходы к индексации в Git-репозиториях не работают в масштабах больших проектов и как это влияет на опыт вайбкодеров.
Почему «просто проиндексировать всё» — не вариант
Для вайбкодера, работающего в связке с AI-агентами, критически важна точность контекста. В SourceCraft навигация (Go to declaration, Find usages) и поиск должны работать не только в мастере, но и:
- Внутри Pull Request-ов (для каждой итерации правка);
- Для устаревших состояний веток, которые пользователь еще не обновил в браузере;
- Мгновенно, чтобы навигация не «тормозила» при чтении кода.
Проблема в том, что история Git — это граф (DAG). Если индексировать каждый коммит отдельно, объем данных вырастет экспоненциально. Если индексировать только HEAD, поиск в PR станет невозможным или крайне медленным.
Технические вызовы
Поиск в SourceCraft тесно связан с навигацией. Чтобы функции find usages работали отзывчиво, системе требуется сверхбыстрый текстовый движок, способный понимать, в каком именно состоянии репозитория находится пользователь.
Основные сложности, которые выделила команда:
- Множественность состояний: Нужно отвечать на запросы для тысяч различных коммитов одновременно.
- Связь с навигацией: Без быстрого текстового поиска невозможно построить качественную семантическую навигацию.
- Актуальность: Индекс должен обновляться быстрее, чем разработчик успевает переключить вкладку.
Что это значит для вайбкодинга?
Когда мы используем AI-инструменты вроде Cursor или Windsurf, мы часто прыгаем между ветками и состояниями кода. Разработки SourceCraft в области поиска по произвольным коммитам закладывают фундамент для «бесшовного» код-ревью. Это позволит AI-агентам будущего анализировать код в динамике PR, не теряя контекст из-за того, что индекс «отстал» от текущего состояния коммита.
Статья подтверждает тренд на создание глубоко интегрированных инструментов, где поиск — это не просто grep, а сложная распределенная система, понимающая структуру Git-графа.