Vai al contenuto
cd /languages
  • UI multipiattaforma
  • Programmazione
  • Supporto AST e simboli

Dart in Maguyva: grafi del codice per app Flutter e Dart

Maguyva supporta Dart con AST, simboli e grafo, così gli agenti IA seguono classi, mixin, estensioni e costruttori nel codice Flutter e Dart.

Dove Dart fa inciampare gli strumenti di IA superficiali

Dart distribuisce un solo tipo su più costrutti. Una classe può ereditare da una classe base, implementare più interfacce e incorporare comportamento dai mixin con with. I metodi di estensione aggiungono membri a tipi definiti altrove, e i costruttori con nome e factory nascondono quale classe viene davvero costruita. Una ricerca testuale trova i nomi, ma non la struttura che c’è dietro.

Maguyva dà all’agente quella struttura, così può seguire una modifica da un widget fino al servizio da cui dipende.

Cosa estrae Maguyva in Dart

Maguyva copre i file .dart. Classi, mixin ed estensioni vengono estratti come tipi. Il preset functions di structural_search copre funzioni, metodi, funzioni locali, lambda e costruttori generativi, const e factory. Le firme registrano i gruppi di parametri posizionali e con nome opzionali e i membri static, e i nomi delle definizioni perdono il ? o ! finale.

Gli import normalizzano le direttive import, part e library ed eliminano le clausole show, hide e as. Una chiamata attraverso un prefisso di import, come http.get dopo import 'package:http/http.dart' as http, resta nel grafo.

La tipizzazione dei receiver segue parametri, variabili tipizzate e inizializzate, getter e cicli for-in su liste, insiemi e iterabili, e tratta var e dynamic come tipi inferiti. Per risolvere i membri ereditati vengono seguite le clausole extends, implements e with. Il grafo registra anche istanziazione, riferimenti di tipo, letture e scritture e archi di eccezione.

Esempi di prompt per agenti

  • “Chi chiama CartRepository.addItem, e da quali widget?” (find_symbol, poi dependency_search incoming)
  • “Quali classi implementano PaymentGateway?” (dependency_search)
  • “Traccia come il pulsante di checkout raggiunge l’API dei pagamenti.” (get_task_context)

Limiti noti

  • Circa 200 nomi delle librerie core di Dart vengono filtrati dalle relazioni, tra cui helper per le collezioni come map, where e forEach, metodi di Future e Stream come then e listen, e le librerie dart:. Usa text_pattern_search per trovarli.
  • I nodi di firma di Dart tengono il corpo come nodo fratello, quindi nei risultati di structural_search una funzione locale o una lambda può sovrapporsi al callable che la contiene, e getter e setter compaiono come firme di metodo.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per altre basi di codice mobile, leggi la guida a Kotlin e la guida a Swift.

Il più adatto per

  • > App Flutter in cui widget, classi di stato, repository e servizi si chiamano a vicenda attraverso molti file.
  • > Pacchetti Dart che usano mixin e metodi di estensione per aggiungere comportamento a tipi definiti altrove.
  • > Dart lato server e da riga di comando che condivide i modelli con un client Flutter.

Workflow degli agenti

  • > Trovare tutti i chiamanti di un metodo di repository o di servizio prima di cambiarne l'API.
  • > Elencare quali classi implementano un'interfaccia prima di aggiungerle un membro.
  • > Tracciare come un tocco in un widget raggiunge il livello di rete.

Dettagli del motore

  • > Il supporto a Dart copre `.dart`. Classi, mixin ed estensioni sono tipi, e i costruttori includono le forme generative, `const` e `factory`.
  • > Gli import normalizzano le direttive `import`, `part` e `library`, e le chiamate attraverso un prefisso di import restano nel grafo.
  • > La tipizzazione dei receiver segue parametri, variabili, getter e cicli `for`-`in`, e circa 200 nomi delle librerie core vengono filtrati dalle relazioni.

Punti di ingresso MCP utili

  • find_symbol

    Usalo per una classe di widget, repository o servizio quando ti servono definizione e riferimenti.

  • dependency_search

    Usa l'attraversamento incoming su un metodo di repository o un'interfaccia per vedere chiamanti e implementazioni prima di cambiare un'API.

  • get_task_context

    Usalo per prompt come "traccia come il pulsante di checkout raggiunge l'API dei pagamenti".