跳至主要內容
cd /languages
  • 慣例優先
  • 程式語言
  • AST 與符號支援

Maguyva 對 Ruby 的支援:Rails 與 Ruby 應用程式的程式碼圖譜

Maguyva 以 AST、符號與圖譜支援 Ruby,讓 AI 代理能在 Rails 與 Ruby 程式碼庫中追蹤類別、模組、單例方法與建構呼叫。

為什麼 Ruby 儲存庫讓淺層 AI 工具傷腦筋

Ruby 高度依賴慣例與後設程式設計。方法由 attr_accessor 產生,類別會在其他檔案中重新開啟,命名空間則巢狀了好幾層模組。易讀的表面掩蓋了呼叫實際到達的是哪個方法,而粗糙的文字搜尋會傳回應用程式裡所有的 call 與 perform。

Maguyva 會把類別、模組、方法及其呼叫端作為結構交給代理,讓它沿著應用程式追蹤一次修改,而不是用猜的。

Maguyva 在 Ruby 中擷取了什麼

Maguyva 涵蓋 .rb、.rbw、.rake 與 .gemspec 檔案,以及 Gemfile 與 Rakefile。實例方法與單例方法(def self.call)都會被擷取,單例方法會標記為 static。attr_reader、attr_writer 與 attr_accessor 宣告會視為存取器方法,符號則以其模組與類別命名空間限定。

ClassName.new 與 Namespace::ClassName.new 會視為實例化,接收者型別推斷會追蹤區域指派與 @instance_variables,因此對已指派物件的呼叫可以解析到它的類別。圖譜也會記錄繼承、模組引入、覆寫、raise 與 rescue 邊,以及讀寫。

後設程式設計呼叫(define_method、send、method_missing、class_eval 等)、Sorbet 的 T:: 型別輔助工具,以及常見的 Enumerable 呼叫(each、collect、reject 等)會從關係中過濾掉,讓應用程式碼更加突出。

代理提示範例

  • 「誰呼叫了 Billing::ChargeCustomer.call,來自哪些 job 與 controller?」(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • 「哪些 model 繼承自 ApplicationRecord 並引入了 Auditable?」(dependency_search)
  • 「追蹤訂單被標記為已付款之後會發生什麼事。」(get_task_context)

已知限制

  • 在 Ruby 中,require 與 load 是一般的方法呼叫,因此 structural_search 中的 imports 預設不會選取任何內容。要列出它們,請使用 text_pattern_search。
  • 透過 define_method 在執行階段建立、或由 method_missing 處理的方法不會被擷取為符號,這些呼叫也會被視為後設程式設計雜訊而過濾掉。
  • Ruby 沒有裝飾器語法,因此裝飾器關係被標記為不適用。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。其他動態語言的儲存庫,請對照閱讀 Python 指南。

最適合的情境

  • > Rails 單體應用程式,model、service object、job 與 concern 在許多目錄之間彼此呼叫。
  • > 具有深層模組命名空間與共用基底類別的 gem 與 Ruby 服務。
  • > 在動到半個應用程式都依賴的 model 或服務之前,想先用 AI 代理界定修改範圍的團隊。

代理工作流程

  • > 在變更 service object 或 model 方法的行為之前,找出它的所有呼叫端。
  • > 追蹤某個類別在哪裡以 `.new` 實例化,以及接下來執行了哪些方法。
  • > 在重構之前,梳理哪些類別繼承自某個基底類別或混入了某個模組。

引擎細節

  • > Ruby 支援涵蓋 `.rb`、`.rbw`、`.rake`、`.gemspec`、`Gemfile` 與 `Rakefile`。單例方法會標記為 static,`attr_*` 宣告會視為存取器方法。
  • > `ClassName.new` 視為實例化,接收者型別推斷會追蹤區域指派與實例變數。
  • > `define_method`、`send` 等後設程式設計呼叫、Sorbet 的 `T::` 輔助工具,以及常見的 Enumerable 呼叫會從關係中過濾掉。

實用的 MCP 進入點

  • find_symbol

    用於查找帶命名空間的類別、模組或方法,例如 `Billing::ChargeCustomer.call`。

  • dependency_search

    變更之前,對 model 或 service object 使用 incoming 走訪,查看呼叫端與子類別。

  • text_pattern_search

    用於查找 `require` 路徑、路由字串,以及圖譜看不到的動態定義方法。