Zum Inhalt springen
cd /languages
  • Plattformübergreifende UI
  • Programmierung
  • AST- und Symbol-Support

Dart in Maguyva: Code-Graphen für Flutter- und Dart-Apps

Maguyva unterstützt Dart mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Mixins, Extensions und Konstruktoren über Flutter- und Dart-Code hinweg verfolgen.

Wo Dart oberflächliche KI-Tools ins Stolpern bringt

Dart verteilt einen Typ auf mehrere Konstrukte. Eine Klasse kann von einer Basisklasse erben, mehrere Interfaces implementieren und über with Verhalten aus Mixins einbinden. Extension-Methoden hängen Member an Typen, die an anderer Stelle definiert sind, und benannte sowie factory-Konstruktoren verbergen, welche Klasse tatsächlich gebaut wird. Eine Textsuche findet die Namen, aber nicht die Struktur dahinter.

Maguyva gibt einem Agenten diese Struktur, damit er eine Änderung vom Widget bis zum Service verfolgen kann, von dem es abhängt.

Was Maguyva in Dart extrahiert

Maguyva deckt .dart-Dateien ab. Klassen, Mixins und Extensions werden als Typen extrahiert. Das Preset functions in structural_search umfasst Funktionen, Methoden, lokale Funktionen, Lambdas sowie generative, const- und factory-Konstruktoren. Signaturen erfassen optionale positionale und benannte Parametergruppen sowie static-Member, und Definitionsnamen verlieren ein abschließendes ? oder !.

Importe normalisieren import-, part- und library-Direktiven und entfernen ihre show-, hide- und as-Klauseln. Ein Aufruf über ein Import-Präfix, etwa http.get nach import 'package:http/http.dart' as http, bleibt im Graphen.

Die Receiver-Typisierung folgt Parametern, typisierten und initialisierten Variablen, Gettern sowie for-in-Schleifen über Listen, Sets und Iterables und behandelt var und dynamic als abgeleitete Typen. Beim Auflösen geerbter Member werden extends-, implements- und with-Klauseln verfolgt. Der Graph erfasst außerdem Instanziierung, Typreferenzen, Lese- und Schreibzugriffe sowie Exception-Kanten.

Beispiel-Prompts für Agenten

  • „Wer ruft CartRepository.addItem auf, und aus welchen Widgets?“ (find_symbol, dann dependency_search incoming)
  • „Welche Klassen implementieren PaymentGateway?“ (dependency_search)
  • „Verfolge, wie der Checkout-Button die Payments-API erreicht.“ (get_task_context)

Bekannte Grenzen

  • Etwa 200 Namen der Dart-Core-Bibliotheken werden aus den Beziehungen gefiltert, darunter Collection-Helfer wie map, where und forEach, Future- und Stream-Methoden wie then und listen sowie die dart:-Bibliotheken. Verwende dafür text_pattern_search.
  • Dart-Signaturknoten führen den Rumpf als Geschwisterknoten. Deshalb kann sich in structural_search-Ergebnissen eine lokale Funktion oder ein Lambda mit dem umgebenden Callable überschneiden, und Getter und Setter erscheinen als Methodensignaturen.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Für andere mobile Codebasen lies den Kotlin-Leitfaden und den Swift-Leitfaden.

Am besten geeignet

  • > Flutter-Apps, in denen Widgets, State-Klassen, Repositories und Services sich über viele Dateien hinweg aufrufen.
  • > Dart-Pakete, die mit Mixins und Extension-Methoden Typen erweitern, die an anderer Stelle definiert sind.
  • > Serverseitiges und Kommandozeilen-Dart, das Modelle mit einem Flutter-Client teilt.

Agentenabläufe

  • > Alle Aufrufer einer Repository- oder Service-Methode finden, bevor sich ihre API ändert.
  • > Auflisten, welche Klassen ein Interface implementieren, bevor ihm ein Member hinzugefügt wird.
  • > Verfolgen, wie ein Tippen in einem Widget die Netzwerkschicht erreicht.

Engine-Einordnung

  • > Die Dart-Unterstützung umfasst `.dart`. Klassen, Mixins und Extensions sind Typen, und Konstruktoren umfassen generative, `const`- und `factory`-Formen.
  • > Importe normalisieren `import`-, `part`- und `library`-Direktiven, und Aufrufe über ein Import-Präfix bleiben im Graphen.
  • > Die Receiver-Typisierung folgt Parametern, Variablen, Gettern und `for`-`in`-Schleifen, und etwa 200 Namen der Core-Bibliotheken werden aus den Beziehungen gefiltert.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für eine Widget-, Repository- oder Service-Klasse, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz die eingehende Traversierung auf einer Repository-Methode oder einem Interface, um vor einer API-Änderung Aufrufer und Implementierungen zu sehen.

  • get_task_context

    Nutz es für Prompts wie „verfolge, wie der Checkout-Button die Payments-API erreicht“.