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

Canonical source: https://maguyva.ai/zh-hant/languages/pascal

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## 支援概況

- 等級: AST 與符號支援
- 程式語言
- 副檔名: .pas, .pp
- 真正的 AST 剖析，支援語法感知搜尋與結構化情境。
- 具名符號支援語意查詢與交叉參照。啟用關係擷取後，即可使用圖譜導覽。
- 這個語言會為圖譜感知搜尋提供符號與關係；支援的邊類型會隨其原生構造而異。
- 同時支援 AST 剖析與符號擷取。

## 最適合的情境

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

## 代理工作流程

- 在變更共用單元之前，列出所有在 `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`。

## 下一步

透過[快速入門](/zh-hant/docs/quickstart)連接儲存庫，然後在[相容性頁面](/zh-hant/docs/compatibility)查看支援矩陣。如果應用程式連結了 C 函式庫，也請閱讀 [C 指南](/zh-hant/languages/c)。

## 引擎細節

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

## 實用的 MCP 進入點

- `find_symbol`: 需要定義與參照時，以類別、表單或程序名稱查找。
- `dependency_search`: 對共用單元或基底類別使用 incoming 走訪，查看哪些單元與衍生類別依賴它。
- `get_task_context`: 適合用於「說明一張發票從按鈕處理常式到資料庫單元是如何入帳的」這類提示。
