# ABAP у Maguyva: графи класів для власного коду SAP

Canonical source: https://maguyva.ai/uk/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 підтримує ABAP з AST, символами та графом, щоб ШІ-агенти картографували класи, інтерфейси, перевизначення й винятки у власному коді SAP.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .abap
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Команди SAP, які зберігають власний ABAP у Git як вихідні файли `.abap` і мають розібратися в ньому перед міграцією або рев'ю clean core.
- Об'єктно-орієнтовані 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 вона не під'єднується.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для інших успадкованих систем дивіться [посібник із COBOL](/uk/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-операторів, яких граф поки не охоплює.
