# ABAP в Maguyva: графы классов для собственного кода SAP

Canonical source: https://maguyva.ai/ru/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 она не подключается.

## Следующие шаги

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