Naar inhoud springen
cd /languages
  • Platformonafhankelijke UI
  • Programmeren
  • AST- en symboolondersteuning

Dart in Maguyva: codegrafen voor Flutter- en Dart-apps

Maguyva ondersteunt Dart met AST, symbolen en graaf, zodat AI-agents klassen, mixins, extensions en constructors volgen in Flutter- en Dart-code.

Waar Dart oppervlakkige AI-tools laat struikelen

Dart verdeelt één type over meerdere constructies. Een klasse kan erven van één basisklasse, meerdere interfaces implementeren en via with gedrag uit mixins opnemen. Extension-methoden hangen members aan types die elders zijn gedefinieerd, en benoemde en factory-constructors verbergen welke klasse er echt wordt gebouwd. Tekstzoeken vindt de namen, maar niet de structuur erachter.

Maguyva geeft een agent die structuur, zodat hij een wijziging kan volgen van een widget tot aan de service waarvan die afhangt.

Wat Maguyva in Dart extraheert

Maguyva dekt .dart-bestanden. Klassen, mixins en extensions worden als types geëxtraheerd. De preset functions in structural_search omvat functies, methoden, lokale functies, lambda’s en generatieve, const- en factory-constructors. Signaturen leggen optionele positionele en benoemde parametergroepen en static-members vast, en definitienamen verliezen een afsluitend ? of !.

Imports normaliseren import-, part- en library-directives en verwijderen hun show-, hide- en as-clausules. Een aanroep via een importprefix, zoals http.get na import 'package:http/http.dart' as http, blijft in de graaf.

Receiver-typering volgt parameters, getypeerde en geïnitialiseerde variabelen, getters en for-in-lussen over lijsten, sets en iterables, en behandelt var en dynamic als afgeleide types. Bij het oplossen van overgeërfde members worden extends-, implements- en with-clausules gevolgd. De graaf legt ook instantiatie, typereferenties, lees- en schrijfacties en exception-edges vast.

Voorbeeldprompts voor agents

  • “Wie roept CartRepository.addItem aan, en vanuit welke widgets?” (find_symbol, daarna dependency_search incoming)
  • “Welke klassen implementeren PaymentGateway?” (dependency_search)
  • “Volg hoe de checkout-knop de betalings-API bereikt.” (get_task_context)

Bekende beperkingen

  • Ongeveer 200 namen uit de Dart-corebibliotheken worden uit de relaties gefilterd, waaronder collectiehelpers zoals map, where en forEach, methoden van Future en Stream zoals then en listen, en de dart:-bibliotheken. Gebruik daarvoor text_pattern_search.
  • Dart-signatuurknopen houden de body als zusterknoop, dus in structural_search-resultaten kan een lokale functie of lambda overlappen met de callable die haar bevat, en getters en setters verschijnen als methodesignaturen.

Volgende stappen

Koppel een repository via de snelstart en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Lees voor andere mobiele codebases de Kotlin-gids en de Swift-gids.

Beste toepassing

  • > Flutter-apps waarin widgets, stateklassen, repositories en services elkaar over veel bestanden heen aanroepen.
  • > Dart-packages die mixins en extension-methoden gebruiken om gedrag toe te voegen aan types die elders zijn gedefinieerd.
  • > Server-side en command-line Dart die modellen deelt met een Flutter-client.

Agentworkflows

  • > Alle aanroepers van een repository- of servicemethode vinden voordat de API verandert.
  • > Opsommen welke klassen een interface implementeren voordat er een member bij komt.
  • > Volgen hoe een tik in een widget de netwerklaag bereikt.

Enginedetails

  • > Dart-ondersteuning omvat `.dart`. Klassen, mixins en extensions zijn types, en constructors omvatten generatieve, `const`- en `factory`-vormen.
  • > Imports normaliseren `import`-, `part`- en `library`-directives, en aanroepen via een importprefix blijven in de graaf.
  • > Receiver-typering volgt parameters, variabelen, getters en `for`-`in`-lussen, en ongeveer 200 namen uit de corebibliotheken worden uit de relaties gefilterd.

Nuttige MCP-instappunten

  • find_symbol

    Gebruik het voor een widget-, repository- of serviceklasse wanneer je de definitie en referenties nodig hebt.

  • dependency_search

    Gebruik incoming-traversal op een repositorymethode of interface om aanroepers en implementaties te zien voor een API-wijziging.

  • get_task_context

    Gebruik het voor prompts als "volg hoe de checkout-knop de betalings-API bereikt."