Перейти до вмісту
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

    Використовуйте для промптів на кшталт «поясни, як пуш-сповіщення потрапляє на екран вхідних».