Hoppa till innehåll
cd /languages
  • Plattformsoberoende UI
  • Programmering
  • Stöd för AST och symboler

Dart i Maguyva: kodgrafer för Flutter- och Dart-appar

Maguyva stöder Dart med AST, symboler och graf, så att AI-agenter kan följa klasser, mixins, extensions och konstruktorer i Flutter- och Dart-kod.

Där Dart får ytliga AI-verktyg att snubbla

Dart sprider en typ över flera konstruktioner. En klass kan ärva från en basklass, implementera flera gränssnitt och blanda in beteende från mixins via with. Extension-metoder hänger på medlemmar på typer som definieras någon annanstans, och namngivna konstruktorer och factory-konstruktorer döljer vilken klass som faktiskt byggs. Textsökning hittar namnen, men inte strukturen bakom dem.

Maguyva ger agenten den strukturen, så att den kan följa en ändring från en widget till tjänsten den är beroende av.

Vad Maguyva extraherar i Dart

Maguyva täcker .dart-filer. Klasser, mixins och extensions extraheras som typer. Presetet functions i structural_search omfattar funktioner, metoder, lokala funktioner, lambdor samt generativa, const- och factory-konstruktorer. Signaturer registrerar valfria positionella och namngivna parametergrupper och static-medlemmar, och definitionsnamn tappar ett avslutande ? eller !.

Importer normaliserar import-, part- och library-direktiv och tar bort deras show-, hide- och as-satser. Ett anrop via ett importprefix, som http.get efter import 'package:http/http.dart' as http, ligger kvar i grafen.

Mottagartypningen följer parametrar, typade och initierade variabler, getters och for-in-loopar över listor, mängder och itererbara objekt, och behandlar var och dynamic som härledda typer. extends-, implements- och with-satser följs när ärvda medlemmar slås upp. Grafen registrerar också instansiering, typreferenser, läsningar och skrivningar samt undantagskanter.

Exempel på prompter för agenter

  • “Vem anropar CartRepository.addItem, och från vilka widgets?” (find_symbol, sedan dependency_search incoming)
  • “Vilka klasser implementerar PaymentGateway?” (dependency_search)
  • “Spåra hur kassaknappen når betalnings-API:et.” (get_task_context)

Kända begränsningar

  • Omkring 200 namn från Darts kärnbibliotek filtreras bort från relationerna, bland annat samlingshjälpare som map, where och forEach, metoder på Future och Stream som then och listen samt dart:-biblioteken. Använd text_pattern_search för dem.
  • Darts signaturnoder har kroppen som syskonnod, så i structural_search-resultat kan en lokal funktion eller lambda överlappa den anropbara enhet som innehåller den, och getters och setters visas som metodsignaturer.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För andra mobila kodbaser, läs guiden för Kotlin och guiden för Swift.

Bäst lämpad för

  • > Flutter-appar där widgets, tillståndsklasser, repositories och tjänster anropar varandra över många filer.
  • > Dart-paket som använder mixins och extension-metoder för att lägga till beteende på typer som definieras någon annanstans.
  • > Dart på serversidan och kommandoraden som delar modeller med en Flutter-klient.

Agentarbetsflöden

  • > Hitta alla anropare av en repository- eller tjänstemetod innan dess API ändras.
  • > Lista vilka klasser som implementerar ett gränssnitt innan en medlem läggs till.
  • > Spåra hur ett tryck i en widget når nätverkslagret.

Motordetaljer

  • > Dart-stödet omfattar `.dart`. Klasser, mixins och extensions är typer, och konstruktorer omfattar generativa, `const`- och `factory`-former.
  • > Importer normaliserar `import`-, `part`- och `library`-direktiv, och anrop via ett importprefix ligger kvar i grafen.
  • > Mottagartypningen följer parametrar, variabler, getters och `for`-`in`-loopar, och omkring 200 namn från kärnbiblioteken filtreras bort från relationerna.

Användbara MCP-ingångar

  • find_symbol

    Använd det för en widget-, repository- eller tjänsteklass när du behöver definitionen och referenserna.

  • dependency_search

    Använd incoming-traversering på en repository-metod eller ett gränssnitt för att se anropare och implementationer inför en API-ändring.

  • get_task_context

    Använd det för prompter som "spåra hur kassaknappen når betalnings-API:et".