# Maguyva 的 Scala 支援：面向 JVM 服務與 Spark 的程式碼圖譜

Canonical source: https://maguyva.ai/zh-hant/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-hant/docs/quickstart)連接儲存庫，然後在[相容性頁面](/zh-hant/docs/compatibility)檢視支援矩陣。混合 JVM 程式碼庫也請閱讀 [Java 指南](/zh-hant/languages/java)和 [Kotlin 指南](/zh-hant/languages/kotlin)。

## 引擎細節

- Scala 支援涵蓋 `.scala` 和 `.sc`。類別、物件和 trait 都是型別，類別內部不帶接收者的呼叫會解析到該類別自己的方法。
- 接收者型別推斷會追蹤參數、類別參數、`val` 和 `var` 定義、`case` 模式、方法回傳型別以及 `extends` 子句。
- 呼叫保留類別限定名，`new` 計為實例化，約 320 個標準函式庫名稱會從關係中過濾掉。

## 實用的 MCP 進入點

- `find_symbol`: 需要 trait、物件或服務方法的定義和參照時使用它。
- `dependency_search`: 修改簽章之前，對 trait 或方法使用 incoming 方向走訪，檢視實作者和呼叫端。
- `get_task_context`: 用於「追蹤一個訂單事件如何到達帳本寫入器」這類提示。
