# Maguyva 的 Pascal 与 Delphi 支持：单元与类图谱

Canonical source: https://maguyva.ai/zh-hans/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-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。如果应用链接了 C 库，也请阅读 [C 指南](/zh-hans/languages/c)。

## 引擎细节

- Pascal 支持覆盖 `.pas` 和 `.pp` 单元。`.dpr`、`.dfm` 等 Delphi 项目文件和窗体文件不在扩展名列表中。
- `uses` 子句会成为导入关系，调用会去掉成员前缀、参数和外层括号进行规范化。
- 约 107 个运行时库例程（如 `WriteLn`、`Inc` 和 `Ord`）会从关系中过滤掉，让应用代码更加突出。

## 常用 MCP 入口工具

- `find_symbol`: 需要定义和引用时，用类、窗体或过程名来查找。
- `dependency_search`: 对共享单元或基类使用 incoming 遍历，查看哪些单元和派生类依赖它。
- `get_task_context`: 适用于“解释一张发票从按钮处理程序到数据库单元是如何过账的”这类提示词。
