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

Canonical source: https://maguyva.ai/ja/languages/dart

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## 対応状況スナップショット

- 対応レベル: AST・シンボル対応
- プログラミング
- 拡張子: .dart
- 構文を考慮した検索と構造コンテキストのための実際のAST解析。
- 名前付きシンボルはセマンティック検索と相互参照に利用されます。関係抽出が有効な場合は、グラフナビゲーションも利用できます。
- この言語は、グラフを考慮した検索にシンボルと関係情報を提供します。対応するエッジの種類は、その言語固有の構文要素によって異なります。
- AST解析とシンボル抽出の両方に対応しています。

## 最適な用途

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

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

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

## 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` の結果では、ローカル関数やラムダがそれを含む呼び出し可能オブジェクトと重なることがあり、ゲッターとセッターはメソッドシグネチャとして表示されます。

## 次のステップ

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

## エンジンの詳細

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

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

- `find_symbol`: 定義と参照が必要なときに、ウィジェット、リポジトリ、サービスのクラスで使ってください。
- `dependency_search`: APIを変更する前に、リポジトリのメソッドやインターフェースに対してincomingのトラバーサルを使い、呼び出し元と実装クラスを確認してください。
- `get_task_context`: 「チェックアウトボタンが決済APIに届くまでの流れを追跡して」のようなプロンプトに使ってください。
