跳转到内容
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 指南。

最适合场景

  • > 组件、状态类、仓储和服务跨越大量文件相互调用的 Flutter 应用。
  • > 用 mixin 和扩展方法为别处定义的类型添加行为的 Dart 包。
  • > 与 Flutter 客户端共享模型的服务端和命令行 Dart 代码。

智能体工作流

  • > 在修改仓储或服务方法的 API 之前,找到它的所有调用方。
  • > 在给接口添加成员之前,列出实现了该接口的类。
  • > 追踪组件中的一次点击如何到达网络层。

引擎细节

  • > Dart 支持覆盖 `.dart`。类、mixin 和扩展都是类型,构造函数包括生成式、`const` 和 `factory` 形式。
  • > 导入会规范化 `import`、`part` 和 `library` 指令,通过导入前缀发起的调用会保留在图谱中。
  • > 接收者类型推断会跟踪参数、变量、getter 和 `for`-`in` 循环,约 200 个核心库名称会从关系中过滤掉。

常用 MCP 入口工具

  • find_symbol

    需要组件、仓储或服务类的定义和引用时使用它。

  • dependency_search

    修改 API 之前,对仓储方法或接口使用 incoming 方向遍历,查看调用方和实现者。

  • get_task_context

    用于“追踪结账按钮如何到达支付 API”这类提示词。