跳至主要內容
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

    用於「追蹤一個訂單事件如何到達帳本寫入器」這類提示。