Перейти к содержимому
cd /languages
  • Платформы Apple
  • Программирование
  • Поддержка AST и символов

Swift в Maguyva: графы кода для iOS и macOS

Maguyva поддерживает Swift с AST, символами и графом, чтобы ИИ-агенты отслеживали протоколы, расширения, инициализаторы и наблюдатели в коде для iOS и macOS.

Почему Swift нужен не только поиск по файлам

Swift распределяет один тип по многим местам. Структура объявлена в одном файле, получает поведение из расширений в трёх других и соответствует протоколам, определённым в пакете. Изменения состояния прячутся в вычисляемых свойствах и наблюдателях willSet / didSet. Агент, читающий по одному файлу, упускает большую часть этого.

Maguyva индексирует эту структуру, чтобы агент видел члены типа, его соответствия протоколам и вызывающих вместе.

Что Maguyva извлекает из Swift

Maguyva охватывает .swift. Вызываемые символы включают функции, init и deinit, сабскрипты, геттеры и сеттеры вычисляемых свойств, а также наблюдатели willSet / didSet, поэтому код, меняющий состояние, ищется как символ, а не теряется в телах свойств.

Члены, объявленные в структурах, перечислениях, протоколах и расширениях, квалифицируются типом-владельцем (например, CartStore.add), а члены, добавленные в расширении, относятся к расширяемому типу. Из имён определений удаляются обобщённые параметры, списки соответствия протоколам и суффиксы ? / !, поэтому поиск идёт по простому имени. Вызовы сохраняют self. и квалификацию классом, а замыкающие замыкания учитываются в арности вызова.

Граф фиксирует вызовы, соответствие протоколам, наследование, переопределения, создание экземпляров, атрибуты, ссылки на типы, чтения и записи, а также рёбра throw.

Примеры промптов для агентов

  • «Какие типы соответствуют PaymentProvider и где создаётся каждый из них?» (dependency_search)
  • «Кто вызывает CartStore.add и из каких представлений?» (find_symbol, затем dependency_search incoming)
  • «Объясни, как пуш-уведомление попадает на экран входящих.» (get_task_context)

Известные ограничения

  • Сопоставляется только исходный код .swift. Файлы Storyboard и XIB не входят в список расширений, поэтому связи Interface Builder остаются вне графа.
  • Вызовы стандартной библиотеки и Foundation, такие как print, debugPrint, NSLog и утверждения, отфильтровываются из связей и не становятся рёбрами графа. Для них используйте text_pattern_search.

Следующие шаги

Подключите репозиторий по быстрому старту, затем изучите матрицу поддержки на странице совместимости. Если тот же продукт выходит и на Android, прочитайте руководство по Kotlin.

Лучше всего подходит

  • > Команды iOS и macOS с большими таргетами приложений и общими Swift-пакетами.
  • > Кодовые базы, построенные вокруг протоколов и расширений, где поведение одного типа разбросано по многим файлам.
  • > Сценарии работы агентов, которым нужен анализ влияния перед изменением общей модели, сервиса или протокола.

Сценарии работы агента

  • > Найти все типы, соответствующие протоколу, прежде чем менять одно из его требований.
  • > Проследить вызывающих метод сервиса через ViewModel, координаторы и пакеты.
  • > Найти инициализаторы, вычисляемые свойства и наблюдатели `didSet`, которые затрагивают состояние.

Детали движка

  • > Вызываемые символы включают функции, `init`, `deinit`, сабскрипты, геттеры и сеттеры вычисляемых свойств, а также наблюдатели `willSet` / `didSet`.
  • > Члены структур, перечислений, протоколов и расширений квалифицируются типом-владельцем, например `CartStore.add`.
  • > Из имён определений удаляются обобщённые параметры, списки соответствия протоколам и суффиксы `?` / `!`, а вызовы сохраняют `self.` и квалификацию классом.

Полезные точки входа MCP

  • find_symbol

    Используйте с именем типа, протокола или метода, когда нужны определение и ссылки.

  • dependency_search

    Используйте для протокола, чтобы найти соответствующие типы, или в режиме incoming для метода, чтобы найти вызывающих.

  • get_task_context

    Используйте для промптов вроде «объясни, как пуш-уведомление попадает на экран входящих».