Saltar al contenido
cd /languages
  • UI multiplataforma
  • Programación
  • Soporte de AST y símbolos

Dart en Maguyva: grafos de código para apps Flutter y Dart

Maguyva admite Dart con AST, símbolos y grafo, para que los agentes de IA sigan clases, mixins, extensiones y constructores en código Flutter y Dart.

Dónde Dart hace tropezar a las herramientas de IA superficiales

Dart reparte un mismo tipo entre varias construcciones. Una clase puede heredar de una clase base, implementar varias interfaces e incorporar comportamiento de mixins con with. Los métodos de extensión añaden miembros a tipos definidos en otro lugar, y los constructores con nombre y los factory ocultan qué clase se construye en realidad. Una búsqueda de texto encuentra los nombres, pero no la estructura que hay detrás.

Maguyva le da esa estructura al agente, para que pueda seguir un cambio desde un widget hasta el servicio del que depende.

Qué extrae Maguyva en Dart

Maguyva cubre archivos .dart. Las clases, los mixins y las extensiones se extraen como tipos. El preset functions de structural_search cubre funciones, métodos, funciones locales, lambdas y constructores generativos, const y factory. Las firmas registran grupos de parámetros posicionales y con nombre opcionales y miembros static, y los nombres de definición pierden el ? o ! final.

Las importaciones normalizan las directivas import, part y library y eliminan sus cláusulas show, hide y as. Una llamada a través de un prefijo de importación, como http.get después de import 'package:http/http.dart' as http, se mantiene en el grafo.

El tipado de receptores sigue parámetros, variables tipadas e inicializadas, getters y bucles for-in sobre listas, conjuntos e iterables, y trata var y dynamic como tipos inferidos. Al resolver miembros heredados se siguen las cláusulas extends, implements y with. El grafo también registra instanciación, referencias de tipo, lecturas y escrituras, y aristas de excepciones.

Ejemplos de prompts para agentes

  • “¿Quién llama a CartRepository.addItem y desde qué widgets?” (find_symbol, luego dependency_search incoming)
  • “¿Qué clases implementan PaymentGateway?” (dependency_search)
  • “Rastrea cómo el botón de pago llega a la API de pagos.” (get_task_context)

Limitaciones conocidas

  • Unos 200 nombres de las bibliotecas principales de Dart se filtran de las relaciones, entre ellos helpers de colecciones como map, where y forEach, métodos de Future y Stream como then y listen, y las bibliotecas dart:. Usa text_pattern_search para encontrarlos.
  • Los nodos de firma de Dart guardan el cuerpo como nodo hermano, así que en los resultados de structural_search una función local o una lambda puede solaparse con el invocable que la contiene, y los getters y setters aparecen como firmas de método.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para otras bases de código móviles, lee la guía de Kotlin y la guía de Swift.

Mejor uso

  • > Apps Flutter donde widgets, clases de estado, repositorios y servicios se llaman entre sí a través de muchos archivos.
  • > Paquetes Dart que usan mixins y métodos de extensión para añadir comportamiento a tipos definidos en otro lugar.
  • > Dart del lado del servidor y de línea de comandos que comparte modelos con un cliente Flutter.

Flujos de trabajo del agente

  • > Encontrar todos los llamadores de un método de repositorio o servicio antes de cambiar su API.
  • > Listar qué clases implementan una interfaz antes de añadirle un miembro.
  • > Rastrear cómo un toque en un widget llega a la capa de red.

Detalles del motor

  • > El soporte de Dart cubre `.dart`. Las clases, los mixins y las extensiones son tipos, y los constructores incluyen las formas generativas, `const` y `factory`.
  • > Las importaciones normalizan las directivas `import`, `part` y `library`, y las llamadas a través de un prefijo de importación se quedan en el grafo.
  • > El tipado de receptores sigue parámetros, variables, getters y bucles `for`-`in`, y unos 200 nombres de las bibliotecas principales se filtran de las relaciones.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo para una clase de widget, repositorio o servicio cuando necesites la definición y las referencias.

  • dependency_search

    Usa el recorrido incoming sobre un método de repositorio o una interfaz para ver llamadores e implementaciones antes de cambiar una API.

  • get_task_context

    Úsalo para prompts como "rastrea cómo el botón de pago llega a la API de pagos".