Перейти до вмісту
cd /languages
  • Кросплатформний UI
  • Програмування
  • Підтримка AST і символів

Dart у Maguyva: графи коду для застосунків на Flutter і Dart

Maguyva підтримує Dart з AST, символами та графом, щоб ШІ-агенти могли простежувати класи, міксини, розширення й конструктори в коді на Flutter і Dart.

Де Dart збиває з пантелику поверхові ШІ-інструменти

Dart розподіляє один тип між кількома конструкціями. Клас може успадковувати від одного базового класу, реалізовувати кілька інтерфейсів і домішувати поведінку з міксинів через with. Методи розширення додають члени до типів, оголошених деінде, а іменовані конструктори та конструктори factory приховують, який клас насправді створюється. Текстовий пошук знаходить імена, але не структуру за ними.

Maguyva передає цю структуру агентові, і він може простежити зміну від віджета до сервісу, від якого той залежить.

Що Maguyva витягує з Dart

Maguyva охоплює файли .dart. Класи, міксини й розширення витягуються як типи. Пресет functions у structural_search охоплює функції, методи, локальні функції, лямбди, а також породжувальні конструктори, конструктори const і factory. Сигнатури фіксують групи необов’язкових позиційних та іменованих параметрів і члени static; суфікси ? і ! вилучаються з імен визначень.

Імпорти нормалізують директиви import, part і library та відкидають речення show, hide і as. Виклик через префікс імпорту, як-от http.get після import 'package:http/http.dart' as http, лишається в графі.

Типізація отримувача відстежує параметри, змінні з оголошеним типом та з ініціалізатором, гетери й цикли for-in за списками, множинами та ітерованими об’єктами; var і dynamic вважаються виведеними типами. Під час розв’язання успадкованих членів враховуються речення extends, implements і with. Граф також фіксує створення екземплярів, посилання на типи, читання й запис, а також ребра винятків.

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

  • «Хто викликає CartRepository.addItem і з яких віджетів?» (find_symbol, потім dependency_search за вхідними зв’язками)
  • «Які класи реалізують PaymentGateway?» (dependency_search)
  • «Простеж, як кнопка оформлення замовлення доходить до платіжного API.» (get_task_context)

Відомі обмеження

  • Близько 200 імен із базових бібліотек Dart відфільтровано зі зв’язків, зокрема допоміжні функції колекцій на кшталт map, where і forEach, методи Future і Stream на кшталт then і listen, а також бібліотеки dart:. Для них використовуйте text_pattern_search.
  • Вузли сигнатур Dart зберігають тіло як сусідній вузол, тому в результатах structural_search локальна функція чи лямбда може накладатися на об’єкт виклику, що її містить, а гетери й сетери показуються як сигнатури методів.

Наступні кроки

Під’єднайте репозиторій за швидким стартом, потім перегляньте матрицю підтримки на сторінці сумісності. Для інших мобільних кодових баз прочитайте посібник із Kotlin і посібник зі Swift.

Найкраще підходить

  • > Застосунки на Flutter, де віджети, класи стану, репозиторії та сервіси викликають одне одного в багатьох файлах.
  • > Пакети Dart, що додають поведінку через міксини та методи розширення до типів, оголошених деінде.
  • > Серверний і консольний код на Dart, який спільно використовує моделі з клієнтом на Flutter.

Робочі процеси агента

  • > Знайти всі виклики методу репозиторію чи сервісу, перш ніж змінювати його API.
  • > Перелічити класи, що реалізують інтерфейс, перш ніж додавати до нього новий член.
  • > Простежити, як натискання у віджеті доходить до мережевого шару.

Деталі рушія

  • > Підтримка Dart охоплює файли `.dart`. Класи, міксини й розширення є типами; конструктори включають породжувальні, `const` і `factory`.
  • > Імпорти нормалізують директиви `import`, `part` і `library`; виклики через префікс імпорту лишаються в графі.
  • > Типізація отримувача відстежує параметри, змінні, гетери й цикли `for`-`in`; близько 200 імен базових бібліотек відфільтровано зі зв'язків.

Корисні точки входу MCP

  • find_symbol

    Використовуйте для класу віджета, репозиторію чи сервісу, коли потрібні визначення й посилання.

  • dependency_search

    Використовуйте обхід вхідних зв'язків для методу репозиторію чи інтерфейсу, щоб побачити виклики та реалізації перед зміною API.

  • get_task_context

    Використовуйте для промптів на кшталт «простеж, як кнопка оформлення замовлення доходить до платіжного API».