# Pascal и Delphi в Maguyva: графы модулей и классов

Canonical source: https://maguyva.ai/ru/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 поддерживает модули Pascal и Delphi с AST, символами и графом, чтобы ИИ-агенты картировали предложения 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`)

## Известные ограничения

- К Pascal относятся только `.pas` и `.pp`. Файлы проектов и форм Delphi, такие как `.dpr` и `.dfm`, не входят в список расширений, поэтому разметка форм и настройка проекта остаются вне графа.
- Методы используют тот же синтаксис, что и свободные процедуры, поэтому пресет `methods` в `structural_search` ничего не выбирает. Используйте пресет `functions`.
- Вызовы отфильтрованных процедур библиотеки времени выполнения не появляются как рёбра графа. Для них используйте `text_pattern_search`.

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

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Если приложение подключает библиотеки на C, прочитайте и [руководство по C](/ru/languages/c).

## Детали движка

- Поддержка Pascal охватывает модули `.pas` и `.pp`. Файлы проектов и форм Delphi, такие как `.dpr` и `.dfm`, не входят в список расширений.
- Предложения `uses` становятся связями импорта, а вызовы нормализуются удалением префиксов членов, аргументов и внешних скобок.
- Около 107 процедур библиотеки времени выполнения, таких как `WriteLn`, `Inc` и `Ord`, отфильтровываются из связей, чтобы код приложения был на виду.

## Полезные точки входа MCP

- `find_symbol`: Используйте с именем класса, формы или процедуры, когда нужны определение и ссылки.
- `dependency_search`: Используйте обход incoming для общего модуля или базового класса, чтобы увидеть, какие модули и потомки от них зависят.
- `get_task_context`: Используйте для промптов вроде «объясни, как проводится счёт — от обработчика кнопки до модуля базы данных».
