Maguyva 對 PHP 的支援:長壽命 Web 應用程式,不必再盲目編輯
當一套 PHP 程式碼庫依然在創造營收、卻沒有人希望代理在裡頭自由發揮時,這特別相關。
副檔名
.php, .php3, .php4, .php5, 還有 2 個
Ruby 高度依賴慣例與後設程式設計。方法由 attr_accessor 產生,類別會在其他檔案中重新開啟,命名空間則巢狀了好幾層模組。易讀的表面掩蓋了呼叫實際到達的是哪個方法,而粗糙的文字搜尋會傳回應用程式裡所有的 call 與 perform。
Maguyva 會把類別、模組、方法及其呼叫端作為結構交給代理,讓它沿著應用程式追蹤一次修改,而不是用猜的。
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 方向)ApplicationRecord 並引入了 Auditable?」(dependency_search)get_task_context)require 與 load 是一般的方法呼叫,因此 structural_search 中的 imports 預設不會選取任何內容。要列出它們,請使用 text_pattern_search。define_method 在執行階段建立、或由 method_missing 處理的方法不會被擷取為符號,這些呼叫也會被視為後設程式設計雜訊而過濾掉。最適合的情境
代理工作流程
引擎細節
實用的 MCP 進入點
用於查找帶命名空間的類別、模組或方法,例如 `Billing::ChargeCustomer.call`。
變更之前,對 model 或 service object 使用 incoming 走訪,查看呼叫端與子類別。
用於查找 `require` 路徑、路由字串,以及圖譜看不到的動態定義方法。
相關指南
當一套 PHP 程式碼庫依然在創造營收、卻沒有人希望代理在裡頭自由發揮時,這特別相關。
副檔名
.php, .php3, .php4, .php5, 還有 2 個
當 Python 程式碼庫蔓延橫跨服務、腳本、型別存根與各種維運黏著程式碼時,這特別有用。
副檔名
.py, .pyi, .pyw