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

Canonical source: https://maguyva.ai/zh-hans/languages/scala

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、符号和图谱支持 Scala，让 AI 智能体跨越 JVM 和 Spark 代码追踪 trait、对象、样例类和带类型的调用。

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .sc, .scala
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

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

## 智能体工作流

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

## 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` 等根类型，会从类型引用中过滤掉。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。混合 JVM 代码库也请阅读 [Java 指南](/zh-hans/languages/java)和 [Kotlin 指南](/zh-hans/languages/kotlin)。

## 引擎细节

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

## 常用 MCP 入口工具

- `find_symbol`: 需要 trait、对象或服务方法的定义和引用时使用它。
- `dependency_search`: 修改签名之前，对 trait 或方法使用 incoming 方向遍历，查看实现者和调用方。
- `get_task_context`: 用于“追踪一个订单事件如何到达账本写入器”这类提示词。
