
Разработчики «Яндекса» выложили в открытый доступ первое решение на базе LLM для автоматизации миграции iOS‑проектов с Objective‑C на Swift — современный язык Apple. Оно решает проблему длительной миграции в крупных проектах, накопивших сотни тысяч строк устаревшего кода, ускоряя процесс в 2,5 раза и позволяя разработчикам переключиться с монотонной рутины на проверку качества, рассказали Хабру в пресс‑службе компании.
Решение разработали при миграции кодовой базы «Яндекс Браузера». Команда столкнулась с проблемой переписывания кода: огромные затраты времени и ресурсов, неизбежные при ручной работе ошибки, а также необходимость параллельно развивать проект.
Внедрение нового подхода на базе LLM не только ускорило миграцию, но и позволило сместить фокус разработчиков с монотонного переписывания кода на валидацию корректности миграции и выполнение сложного рефакторинга. За два месяца команда интегрировала 106 pull requests, переписав около 97,5 тыс. строк устаревшего кода и более 2 тыс. файлов — объём, который при ручной работе занял бы больше года.
В отличие от существующих инструментов‑конвертеров, не учитывающих контекст проекта, разработанная система использует LLM, способную понимать не только грамматику языка, но и архитектуру конкретного проекта. В основе подхода — система из четырёх специализированных промптов, каждый из которых отвечает за определённый этап. Первый определяет оптимальный порядок миграции файлов, переписывает код и проверяет результат через компиляцию и тесты. Второй адаптирует полученный код под лучшие практики Swift. Третий проводит автоматическую проверку по чек‑листу: заголовки файлов, корректность замены типов, соответствие стандартам. Четвёртый очищает код от устаревших аннотаций, когда необходимость в них отпадает.
Для проверки универсальности подхода команда применила его к стороннему проекту — приложению Wikipedia для iOS. Был успешно мигрирован один из пакетов, отвечающий за форматирование wiki‑разметки, и открыт pull request в репозиторий проекта. Эксперимент показал, что подход не привязан к специфике монорепозитория «Яндекса». Чтобы внедрить подобное решение в своём проекте, достаточно заполнить конфигурационный шаблон, который также выложили в открытый доступ. В него нужно внести архитектуру проекта, систему сборки, стандарты кода, структуру тестов, а также словарь типов и паттернов для замены. Далее важно определить правильный порядок миграции: начинать с компонентов, которые не зависят от старого кода — так называемых «листьев» графа зависимостей. Это позволит писать чистый Swift без промежуточных слоёв совместимости.
Для сохранения качества кода в процессе миграции можно использовать дополнительный промпт для генерации интеграционных тестов. Готовые промпты автоматически подгружаются в контекст диалога в большинстве современных агентских IDE, поэтому решение совместимо с популярными инструментами для работы с кодом.
Все промпты, скрипты и шаблоны доступны на GitHub и SoucreCraft, подробнее об ИИ‑решении можно узнать в статье.
ссылка на оригинал статьи https://habr.com/ru/articles/1031642/