跳至主要內容
cd /languages
  • 跨平台 UI
  • 程式語言
  • AST 與符號支援

Maguyva 的 Dart 支援:面向 Flutter 與 Dart 應用的程式碼圖譜

Maguyva 以 AST、符號和圖譜支援 Dart,讓 AI 代理跨越 Flutter 和 Dart 程式碼追蹤類別、mixin、擴充和建構函式。

Dart 讓淺層 AI 工具栽跟頭的地方

Dart 會把一個型別分散到多種結構裡。一個類別可以繼承一個基底類別、實作多個介面,並透過 with 混入 mixin 的行為。擴充方法把成員附加到別處定義的型別上,命名建構函式和 factory 建構函式則隱藏了實際建構的是哪個類別。文字搜尋能找到名字,卻找不到名字背後的結構。

Maguyva 把這些結構交給代理,讓它能從元件一路追蹤到所依賴的服務。

Maguyva 在 Dart 中擷取什麼

Maguyva 支援 .dart 檔案。類別、mixin 和擴充會作為型別擷取。structural_search 中的 functions 預設集涵蓋函式、方法、區域函式、lambda,以及生成式、const 和 factory 建構函式。簽章會記錄可選的位置參數組和命名參數組以及 static 成員,定義名會去掉末尾的 ? 和 !。

匯入會正規化 import、part 和 library 指令,並去掉其中的 show、hide 和 as 子句。透過匯入字首發起的呼叫,例如 import 'package:http/http.dart' as http 之後的 http.get,會保留在圖譜中。

接收者型別推斷會追蹤參數、帶型別和已初始化的變數、getter,以及遍歷清單、集合和可迭代物件的 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 的結果中,區域函式或 lambda 可能與包含它的可呼叫物件重疊,getter 和 setter 會顯示為方法簽章。

下一步

透過快速入門連接儲存庫,然後在相容性頁面檢視支援矩陣。其他行動裝置程式碼庫請閱讀 Kotlin 指南和 Swift 指南。

最適合的情境

  • > 元件、狀態類別、repository 和服務跨越大量檔案相互呼叫的 Flutter 應用。
  • > 用 mixin 和擴充方法為別處定義的型別新增行為的 Dart 套件。
  • > 與 Flutter 用戶端共享模型的伺服器端和命令列 Dart 程式碼。

代理工作流程

  • > 在修改 repository 或服務方法的 API 之前,找到它的所有呼叫端。
  • > 在給介面新增成員之前,列出實作了該介面的類別。
  • > 追蹤元件中的一次點選如何到達網路層。

引擎細節

  • > Dart 支援涵蓋 `.dart`。類別、mixin 和擴充都是型別,建構函式包括生成式、`const` 和 `factory` 形式。
  • > 匯入會正規化 `import`、`part` 和 `library` 指令,透過匯入字首發起的呼叫會保留在圖譜中。
  • > 接收者型別推斷會追蹤參數、變數、getter 和 `for`-`in` 迴圈,約 200 個核心函式庫名稱會從關係中過濾掉。

實用的 MCP 進入點

  • find_symbol

    需要元件、repository 或服務類別的定義和參照時使用它。

  • dependency_search

    修改 API 之前,對 repository 方法或介面使用 incoming 方向走訪,檢視呼叫端和實作者。

  • get_task_context

    用於「追蹤結帳按鈕如何到達支付 API」這類提示。