跳转到内容
cd /languages
  • 类型化 JVM
  • 编程语言
  • AST 和符号支持

Maguyva 的 Scala 支持:面向 JVM 服务与 Spark 的代码图谱

Maguyva 以 AST、符号和图谱支持 Scala,让 AI 智能体跨越 JVM 和 Spark 代码追踪 trait、对象、样例类和带类型的调用。

Scala 让浅层 AI 工具栽跟头的地方

在 Scala 里,一个名字能承载很多东西。trait、它的伴生对象和样例类可以共享同一个概念。模式匹配会在 case 子句中绑定新名字,类内部不带接收者调用的方法其实是对 this 的调用。一次只读一个文件的智能体能看到名字,却看不到它们解析到哪里。

Maguyva 在建立索引时就解析了更多此类信息,所以智能体询问谁调用了某个方法时,能得到可以直接据此行动的答案。

Maguyva 在 Scala 中提取什么

Maguyva 支持 .scala 和 .sc 文件。类、对象和 trait 作为类型提取,structural_search 中的 functions 预设覆盖 def 声明、定义以及 lambda。签名会记录重复(*)参数,导入会去掉 _root_ 前缀。

调用关系保留类限定名,类内部不带接收者的调用会解析到该类自己的方法。接收者类型推断会跟踪参数、类参数、val 和 var 定义、case 子句中的类型模式和样例类模式、类、对象和 trait 上方法的返回类型、类型别名,以及 extends 子句。对首字母大写的类型使用 new 计为实例化。

Scala 没有被标记为不适用的关系类型,因此图谱还会记录继承、覆盖、类型引用、读写、控制流和异常边。

智能体提示词示例

  • “谁调用了 PaymentService.capture,来自哪些路由?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “哪些类和对象扩展了 EventHandler?”(dependency_search)
  • “追踪一个订单事件如何到达账本写入器。”(get_task_context)

已知限制

  • 约 320 个标准库名称会从关系中过滤掉:map、flatMap 和 foldLeft 等集合操作,以及 Option、Either、Try、Future 和 Predef 辅助函数。对 this 的调用,或对类型解析为你自己的类的值的调用,即使名字在列表里也会保留。如果某个调用方仍然似乎缺失,请使用 text_pattern_search。
  • A、F 和 CC 等短类型参数,以及 Any、Unit 和 Nothing 等根类型,会从类型引用中过滤掉。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。混合 JVM 代码库也请阅读 Java 指南和 Kotlin 指南。

最适合场景

  • > 用 Scala 编写、trait、伴生对象和样例类把同一概念分散到大量文件中的 JVM 服务。
  • > 智能体需要连同所调用的共享库一起阅读的 Spark 与数据工程作业。
  • > 智能体需要作为同一个代码库来搜索的 Scala 与 Java 混合仓库。

智能体工作流

  • > 在修改服务方法的签名之前,找到它的所有调用方。
  • > 在添加抽象成员之前,列出扩展了某个 trait 的类和对象。
  • > 追踪一个请求从 HTTP 路由经过服务进入数据层的过程。

引擎细节

  • > Scala 支持覆盖 `.scala` 和 `.sc`。类、对象和 trait 都是类型,类内部不带接收者的调用会解析到该类自己的方法。
  • > 接收者类型推断会跟踪参数、类参数、`val` 和 `var` 定义、`case` 模式、方法返回类型以及 `extends` 子句。
  • > 调用保留类限定名,`new` 计为实例化,约 320 个标准库名称会从关系中过滤掉。

常用 MCP 入口工具

  • find_symbol

    需要 trait、对象或服务方法的定义和引用时使用它。

  • dependency_search

    修改签名之前,对 trait 或方法使用 incoming 方向遍历,查看实现者和调用方。

  • get_task_context

    用于“追踪一个订单事件如何到达账本写入器”这类提示词。