Перейти к содержимому
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».