Przejdź do treści
cd /languages
  • Wieloplatformowe UI
  • Programowanie
  • Obsługa AST i symboli

Dart w Maguyva: grafy kodu dla aplikacji Flutter i Dart

Maguyva obsługuje Darta przez AST, symbole i graf, dzięki czemu agenci AI śledzą klasy, mixiny, rozszerzenia i konstruktory w kodzie Fluttera i Darta.

Gdzie Dart sprawia kłopot powierzchownym narzędziom AI

Dart rozkłada jeden typ na kilka konstrukcji. Klasa może dziedziczyć po jednej klasie bazowej, implementować kilka interfejsów i włączać zachowanie z mixinów przez with. Metody rozszerzające doczepiają składowe do typów zdefiniowanych gdzie indziej, a konstruktory nazwane i factory ukrywają, która klasa naprawdę powstaje. Wyszukiwanie tekstowe znajduje nazwy, ale nie strukturę, która za nimi stoi.

Maguyva daje agentowi tę strukturę, więc może on prześledzić zmianę od widżetu aż do serwisu, od którego ten zależy.

Co Maguyva wyodrębnia w Darcie

Maguyva obejmuje pliki .dart. Klasy, mixiny i rozszerzenia są wyodrębniane jako typy. Preset functions w structural_search obejmuje funkcje, metody, funkcje lokalne, lambdy oraz konstruktory generatywne, const i factory. Sygnatury zapisują opcjonalne grupy parametrów pozycyjnych i nazwanych oraz składowe static, a nazwy definicji tracą końcowe ? lub !.

Importy normalizują dyrektywy import, part i library oraz usuwają ich klauzule show, hide i as. Wywołanie przez prefiks importu, na przykład http.get po import 'package:http/http.dart' as http, zostaje w grafie.

Typowanie odbiorców śledzi parametry, zmienne typowane i zainicjalizowane, gettery oraz pętle for-in po listach, zbiorach i obiektach iterowalnych, a var i dynamic traktuje jako typy wywnioskowane. Przy rozwiązywaniu dziedziczonych składowych śledzone są klauzule extends, implements i with. Graf zapisuje też tworzenie instancji, odwołania do typów, odczyty i zapisy oraz krawędzie wyjątków.

Przykładowe prompty dla agentów

  • „Kto wywołuje CartRepository.addItem i z których widżetów?” (find_symbol, potem dependency_search incoming)
  • „Które klasy implementują PaymentGateway?” (dependency_search)
  • „Prześledź, jak przycisk zakupu dociera do API płatności.” (get_task_context)

Znane ograniczenia

  • Około 200 nazw z bibliotek podstawowych Darta jest odfiltrowywanych z relacji, w tym pomocnicze funkcje kolekcji, takie jak map, where i forEach, metody Future i Stream, takie jak then i listen, oraz biblioteki dart:. Do ich wyszukania użyj text_pattern_search.
  • Węzły sygnatur w Darcie przechowują ciało jako węzeł siostrzany, więc w wynikach structural_search funkcja lokalna lub lambda może nakładać się na zawierający ją element wywoływalny, a gettery i settery pojawiają się jako sygnatury metod.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. W przypadku innych mobilnych baz kodu przeczytaj przewodnik po Kotlinie i przewodnik po Swifcie.

Najlepsze dopasowanie

  • > Aplikacje Fluttera, w których widżety, klasy stanu, repozytoria i serwisy wywołują się nawzajem w wielu plikach.
  • > Pakiety Darta, które za pomocą mixinów i metod rozszerzających dodają zachowanie do typów zdefiniowanych gdzie indziej.
  • > Dart po stronie serwera i w wierszu poleceń, który współdzieli modele z klientem Fluttera.

Workflow agentów

  • > Znaleźć wszystkie miejsca wywołujące metodę repozytorium lub serwisu przed zmianą jej API.
  • > Wypisać klasy implementujące interfejs przed dodaniem do niego składowej.
  • > Prześledzić, jak dotknięcie w widżecie dociera do warstwy sieciowej.

Szczegóły silnika

  • > Obsługa Darta obejmuje `.dart`. Klasy, mixiny i rozszerzenia są typami, a konstruktory obejmują formy generatywne, `const` i `factory`.
  • > Importy normalizują dyrektywy `import`, `part` i `library`, a wywołania przez prefiks importu zostają w grafie.
  • > Typowanie odbiorców śledzi parametry, zmienne, gettery i pętle `for`-`in`, a około 200 nazw z bibliotek podstawowych jest odfiltrowywanych z relacji.

Przydatne punkty wejścia MCP

  • find_symbol

    Użyj go dla klasy widżetu, repozytorium lub serwisu, gdy potrzebujesz definicji i odwołań.

  • dependency_search

    Użyj przejścia incoming na metodzie repozytorium lub interfejsie, aby przed zmianą API zobaczyć wywołujących i implementacje.

  • get_task_context

    Użyj go do promptów takich jak „Prześledź, jak przycisk zakupu dociera do API płatności”.