指令用途
傳統的程式碼搜尋(如 ripgrep 或是 git grep)主要是基於純文字匹配。這在搜尋簡單的關鍵字時很有用,但如果你的類別名稱很常見(如 User 或 Data),或者你想尋找的是特定方法的定義而非其註釋或引用,純文字搜尋會產生大量無關的噪聲(Noise),降低除錯效率。
search_graph 利用 Tree-sitter 將程式碼編譯成有向圖(Knowledge Graph)後的節點屬性,進行精準的 Symbol 語意搜尋。它不僅能搜尋「名稱」,更能區分這個 Symbol 是一個 Class(類別)、Interface(介面)、Method(方法)還是 Field(欄位),並返回其在圖譜中的唯一識別名(Qualified Name)與關係。
運作流程
- 參數接收:工具接收
query(關鍵字查詢) 與type(可選,如 class, method, field)作為輸入。 - 圖譜查詢:在本地知識圖譜資料庫中執行快速索引檢索,尋找符合語意特徵的節點。
- 關係關聯:自動帶出該節點的鄰近關係(例如:該類別繼承了哪個介面,或屬於哪個命名空間)。
- 結果格式化:回傳精準的節點清單,避免程式碼檔案中的非代碼文字噪聲干擾。
實戰對話範例
範例:搜尋 PLC 通訊相關的核心方法定義
- You:
/opsx:explore "我需要尋找與 PLC 讀取相關的 Class 定義,請幫我搜尋圖譜。" - AI:
好的,我將呼叫 codebase-memory 的
search_graph工具,搜尋節點名稱包含 “Plc” 且類型為class的定義。CM 呼叫:
search_graph(query: "Plc", type: "class")
CM 回傳:[ { "qualifiedName": "ControlSystem.Core.Communication.PlcConnection", "type": "class", "filePath": "/src/Core/Communication/PlcConnection.cs", "extends": "IConnection", "methodsCount": 12 }, { "qualifiedName": "ControlSystem.Core.Communication.PlcMockConnection", "type": "class", "filePath": "/src/Core/Communication/PlcMockConnection.cs", "extends": "PlcConnection", "methodsCount": 4 } ]分析:
圖譜中找到了兩個 Plc 相關的 class:PlcConnection:位於/src/Core/Communication/PlcConnection.cs,是底層的真實連線實作類別。PlcMockConnection:繼承自PlcConnection的模擬連線類別。
接下來,您希望我們進一步查看
PlcConnection的具體方法,還是追蹤它是被誰呼叫的?