跳至主要內容
cd /languages
  • 長壽桌面應用
  • 程式語言
  • AST 與符號支援

Maguyva 對 Pascal 與 Delphi 的支援:單元與類別圖譜

Maguyva 以 AST、符號與圖譜支援 Pascal 與 Delphi 單元,讓 AI 代理在修改之前梳理 uses 子句、類別與程序。

為什麼 Pascal 程式碼庫需要先有一張地圖

Delphi 與 Free Pascal 應用程式往往圍繞著幾個大型單元成長,其他所有程式碼都在使用它們。表單繼承自基底表單,元件繼承自基底元件,商業規則則放在十幾個畫面都會呼叫的程序裡。逐一檔案讀起來很順,但出問題的地方正是相依關係。

Maguyva 會先把單元與類別的結構交給代理,讓它在寫下任何程式碼之前,就能說清楚一次修改會影響哪些地方。

Maguyva 在 Pascal 中擷取了什麼

Maguyva 涵蓋 .pas 與 .pp 原始碼單元。程序與函式定義會被擷取為可呼叫的符號,定義名稱中的 procedure、function、var 與 const 關鍵字會被移除。類別與介面可以在結構搜尋中作為型別定義選取。

匯入來自 uses 子句,關鍵字會被移除,圖譜中保存的是單元名稱。呼叫會經過正規化,移除成員前綴、引數與外層括號,因此寫成 Self.Save(x) 的呼叫會被保存為 Save。

圖譜會記錄呼叫、繼承、介面實作、覆寫、實例化、型別參照、讀寫,以及例外的引發與處理邊。約 107 個執行階段函式庫常式(WriteLn、ReadLn、Inc、Dec、Ord 等)會被排除在關係之外。

代理提示範例

  • 「哪些單元使用了 DataModuleMain,它們從中呼叫了什麼?」(dependency_search 的 incoming 方向)
  • 「哪些表單繼承自 TBaseEditForm,它們覆寫了哪些方法?」(先用 find_symbol,再用 dependency_search)
  • 「說明一張發票從按鈕處理常式到資料庫單元是如何入帳的。」(get_task_context)

已知限制

  • 只有 .pas 與 .pp 會對應到 Pascal。.dpr、.dfm 等 Delphi 專案檔與表單檔不在副檔名清單中,因此表單版面與專案設定不在圖譜範圍內。
  • 方法與一般程序使用相同的語法,因此 structural_search 中的 methods 預設不會選取任何內容。請使用 functions 預設。
  • 對已過濾執行階段函式庫常式的呼叫不會以圖譜的邊出現。查找它們請使用 text_pattern_search。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。如果應用程式連結了 C 函式庫,也請閱讀 C 指南。

最適合的情境

  • > 維護 Delphi 或 Lazarus/Free Pascal 應用程式、而原作者早已離開的團隊。
  • > 具有深層類別階層、介面與大型共用單元的 Object Pascal 程式碼庫。
  • > 現代化或移植工作,第一份交付物就是一張單元及其相依關係圖。

代理工作流程

  • > 在變更共用單元之前,列出所有在 `uses` 子句中引用它的單元。
  • > 找出繼承自基底表單或基底元件的類別,以及它們覆寫的方法。
  • > 在變更常式的參數之前,追蹤有哪些程序呼叫了它。

引擎細節

  • > Pascal 支援涵蓋 `.pas` 與 `.pp` 單元。`.dpr`、`.dfm` 等 Delphi 專案檔與表單檔不在副檔名清單中。
  • > `uses` 子句會成為匯入關係,呼叫會移除成員前綴、引數與外層括號進行正規化。
  • > 約 107 個執行階段函式庫常式(如 `WriteLn`、`Inc` 與 `Ord`)會從關係中過濾掉,讓應用程式碼更加突出。

實用的 MCP 進入點

  • find_symbol

    需要定義與參照時,以類別、表單或程序名稱查找。

  • dependency_search

    對共用單元或基底類別使用 incoming 走訪,查看哪些單元與衍生類別依賴它。

  • get_task_context

    適合用於「說明一張發票從按鈕處理常式到資料庫單元是如何入帳的」這類提示。