# Maguyva 的 ABAP 支持：面向 SAP 自定义代码的类图谱

Canonical source: https://maguyva.ai/zh-hans/languages/abap

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、符号和图谱支持 ABAP，让 AI 智能体能够梳理 SAP 自定义代码中的类、接口、重定义和异常。

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .abap
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

- 把自定义 ABAP 以 `.abap` 源文件形式保存在 Git 中、需要在迁移或 clean core 评审前先读懂它的 SAP 团队。
- 面向对象的 ABAP 资产：类层次、接口和重定义让人看不清到底运行的是哪个实现。
- 智能体辅助的影响分析，核心问题是“这个类一改，会坏掉什么？”

## 智能体工作流

- 梳理哪些类继承自某个基类，以及它们重定义了哪些方法。
- 在修改方法签名之前，找出实现某个接口的所有类。
- 追踪某个异常类在哪里被抛出、在哪里被捕获。

## 为什么值得在修改 ABAP 之前先把它梳理清楚

自定义 ABAP 往往承载着几十年的业务规则。代码有的地方是面向对象的，有的地方是过程式的，而继承与接口结构决定了实际运行哪个方法。一次只读一个类，是看不出这些的。

Maguyva 先把类图谱交给智能体，于是变更计划从“哪些东西依赖这个类”出发，而不是从猜测出发。

## Maguyva 在 ABAP 中提取什么

Maguyva 使用专用的 ABAP 语法解析 `.abap` 源码。符号包括类定义与实现、接口、方法声明与实现，以及 `FORM` 例程。

图谱记录了 ABAP 开发者关心的关系：

- 来自 `CLASS ... INHERITING FROM` 的继承。
- 来自 `INTERFACES` 的接口实现。
- 来自 `METHODS ... REDEFINITION` 的重写。
- 来自 `RAISE EXCEPTION` 和 `CATCH` 的异常。
- 方法调用（`obj->m( )`、`cls=>m( )`、`CALL METHOD`）、来自 `TYPE` 和 `TYPE REF TO` 的类型引用，以及归属到所属类的公共部分方法导出。
- 方法体内的读取、写入和控制流（`IF`、`CASE`、`LOOP`、`TRY`）。

## 智能体提示词示例

- “哪些类继承自 `zcl_order_base`，它们重定义了它的哪些方法？”（先用 `find_symbol`，再用 `dependency_search` 的 incoming 方向）
- “`zcx_pricing_error` 在哪里被抛出，谁捕获了它？”（`dependency_search`）
- “概述交货单创建流程如何从报表走到持久化类。”（`get_task_context`）

## 已知限制

- Open SQL（`SELECT ... FROM ... INTO`）、`EXEC SQL` 和 `AUTHORITY-CHECK` 在当前的 ABAP 语法中无法解析，因此通过 SQL 读取数据表暂时还不是图谱的边。查找表名请使用 `text_pattern_search`。
- `INTERFACES` 子句是实现关系，而不是导入。在结构搜索中，只有 `INCLUDE` 语句会被选为导入。
- Maguyva 索引的是以 `.abap` 文件形式存放在 Git 仓库中的 ABAP。它不会连接 SAP 系统。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。其他遗留系统请参阅 [COBOL 指南](/zh-hans/languages/cobol)。

## 引擎细节

- ABAP 使用专用语法解析。类、接口、方法声明与实现以及 `FORM` 例程都是符号。
- 图谱记录 `INHERITING FROM` 继承、`INTERFACES` 实现、`REDEFINITION` 重写、`RAISE EXCEPTION` 和 `CATCH`，以及 `obj->m( )`、`cls=>m( )` 这类调用。
- Open SQL、`EXEC SQL` 和 `AUTHORITY-CHECK` 在当前语法中无法解析，因此通过 SQL 读取数据表暂时还不是图谱的边。

## 常用 MCP 入口工具

- `find_symbol`: 需要定义和引用时，用类、接口或方法名来查找。
- `dependency_search`: 修改之前，对基类或接口使用 incoming 遍历，找出子类、实现类和调用方。
- `text_pattern_search`: 用于查找图谱尚未覆盖的数据库表名和 SQL 语句。
