本文へスキップ
cd /languages
  • クロスプラットフォームUI
  • プログラミング
  • AST・シンボル対応

MaguyvaのDart対応: FlutterとDartアプリのコードグラフ

MaguyvaはAST、シンボル、グラフでDartに対応しています。AIエージェントはFlutterとDartのコード全体で、クラス、ミックスイン、拡張、コンストラクターをたどれます。

Dartが浅いAIツールをつまずかせるところ

Dartは1つの型を複数の構文に分散させます。クラスは1つの基底クラスを継承し、複数のインターフェースを実装し、with でミックスインの振る舞いを取り込めます。拡張メソッドはほかの場所で定義された型にメンバーを付け加え、名前付きコンストラクターや factory コンストラクターは、実際にどのクラスが生成されるかを隠します。テキスト検索は名前を見つけても、その背後の構造は見つけられません。

Maguyvaはその構造をエージェントに渡すため、ウィジェットから依存先のサービスまで変更の影響をたどれます。

MaguyvaがDartで抽出するもの

Maguyvaは .dart ファイルに対応しています。クラス、ミックスイン、拡張は型として抽出されます。structural_search の functions プリセットは、関数、メソッド、ローカル関数、ラムダ、そして生成コンストラクター、const コンストラクター、factory コンストラクターを対象にします。シグネチャには省略可能な位置パラメーターと名前付きパラメーターのグループ、および static メンバーが記録され、定義名からは末尾の ? と ! が取り除かれます。

インポートは import、part、library ディレクティブを正規化し、show、hide、as 句を取り除きます。import 'package:http/http.dart' as http の後の http.get のように、インポートのプレフィックスを通した呼び出しはグラフに残ります。

レシーバーの型付けは、パラメーター、型付きおよび初期化済みの変数、ゲッター、そしてリスト、セット、イテラブルに対する for-in ループをたどり、var と dynamic は推論された型として扱います。継承されたメンバーを解決するときは、extends、implements、with 句をたどります。グラフには、インスタンス化、型参照、読み取りと書き込み、例外のエッジも記録されます。

エージェントへのプロンプト例

  • 「CartRepository.addItem を呼び出しているのは誰で、どのウィジェットからか?」(find_symbol、次に dependency_search の incoming)
  • 「PaymentGateway を実装しているクラスはどれか?」(dependency_search)
  • 「チェックアウトボタンが決済APIに届くまでの流れを追跡して。」(get_task_context)

既知の制限

  • 約200個のDartコアライブラリの名前は関係性から除外されます。たとえば map、where、forEach のようなコレクションのヘルパー、then や listen のような Future と Stream のメソッド、そして dart: ライブラリです。それらには text_pattern_search を使ってください。
  • Dartのシグネチャノードは本体を兄弟ノードとして持つため、structural_search の結果では、ローカル関数やラムダがそれを含む呼び出し可能オブジェクトと重なることがあり、ゲッターとセッターはメソッドシグネチャとして表示されます。

次のステップ

クイックスタートでリポジトリを接続し、互換性ページで対応マトリクスを確認してください。ほかのモバイルのコードベースについては、KotlinガイドとSwiftガイドをご覧ください。

最適な用途

  • > ウィジェット、状態クラス、リポジトリ、サービスが多くのファイルをまたいで呼び合うFlutterアプリ。
  • > ミックスインと拡張メソッドを使って、ほかの場所で定義された型に振る舞いを加えるDartパッケージ。
  • > Flutterクライアントとモデルを共有する、サーバーサイドやコマンドラインのDart。

エージェントワークフロー

  • > リポジトリやサービスのメソッドのAPIを変更する前に、その呼び出し元をすべて見つける。
  • > インターフェースにメンバーを追加する前に、それを実装しているクラスを一覧にする。
  • > ウィジェットのタップがネットワーク層に届くまでの流れを追跡する。

エンジンの詳細

  • > Dartの対応は `.dart` を含みます。クラス、ミックスイン、拡張は型で、コンストラクターには生成、`const`、`factory` の形式が含まれます。
  • > インポートは `import`、`part`、`library` ディレクティブを正規化し、インポートのプレフィックスを通した呼び出しはグラフに残ります。
  • > レシーバーの型付けは、パラメーター、変数、ゲッター、`for`-`in` ループをたどり、約200個のコアライブラリの名前は関係性から除外されます。

役立つMCPエントリーポイント

  • find_symbol

    定義と参照が必要なときに、ウィジェット、リポジトリ、サービスのクラスで使ってください。

  • dependency_search

    APIを変更する前に、リポジトリのメソッドやインターフェースに対してincomingのトラバーサルを使い、呼び出し元と実装クラスを確認してください。

  • get_task_context

    「チェックアウトボタンが決済APIに届くまでの流れを追跡して」のようなプロンプトに使ってください。