# Dart в Maguyva: графы кода для приложений на Flutter и Dart

Canonical source: https://maguyva.ai/ru/languages/dart

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva поддерживает Dart с AST, символами и графом, чтобы ИИ-агенты могли прослеживать классы, миксины, расширения и конструкторы в коде на Flutter и Dart.

## Сводка поддержки

- Уровень: Поддержка AST и символов
- Программирование
- Расширения: .dart
- Настоящий AST-разбор для синтаксически осведомлённого поиска и структурного контекста.
- Именованные символы обеспечивают семантический поиск и перекрёстные ссылки. Навигация по графу доступна, когда включено извлечение связей.
- Этот язык добавляет символы и связи в поиск с учётом графа; поддерживаемые типы рёбер зависят от присущих ему конструкций.
- Доступны и AST-разбор, и извлечение символов.

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

- Приложения на Flutter, где виджеты, классы состояния, репозитории и сервисы вызывают друг друга во многих файлах.
- Пакеты Dart, которые добавляют поведение через миксины и методы расширения к типам, объявленным в другом месте.
- Серверный и консольный код на Dart, который разделяет модели с клиентом на Flutter.

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

- Найти все вызовы метода репозитория или сервиса, прежде чем менять его API.
- Перечислить классы, реализующие интерфейс, прежде чем добавлять в него новый член.
- Проследить, как нажатие в виджете доходит до сетевого слоя.

## Где 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` локальная функция или лямбда может накладываться на содержащий её вызываемый объект, а геттеры и сеттеры отображаются как сигнатуры методов.

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

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Для других мобильных кодовых баз прочитайте [руководство по Kotlin](/ru/languages/kotlin) и [руководство по Swift](/ru/languages/swift).

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

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

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

- `find_symbol`: Используйте для класса виджета, репозитория или сервиса, когда нужны определение и ссылки.
- `dependency_search`: Используйте обход входящих связей для метода репозитория или интерфейса, чтобы увидеть вызовы и реализации перед изменением API.
- `get_task_context`: Используйте для промптов вроде «проследи, как кнопка оформления заказа доходит до платёжного API».
