Перейти к содержимому
cd /languages
  • Долгоживущий десктоп
  • Программирование
  • Поддержка AST и символов

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

Maguyva поддерживает модули Pascal и Delphi с AST, символами и графом, чтобы ИИ-агенты картировали предложения 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.

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

Подключите репозиторий по быстрому старту, затем изучите матрицу поддержки на странице совместимости. Если приложение подключает библиотеки на C, прочитайте и руководство по C.

Лучше всего подходит

  • > Команды, которые сопровождают приложения на Delphi или Lazarus/Free Pascal, чьи первоначальные авторы давно ушли.
  • > Кодовые базы на Object Pascal с глубокими иерархиями классов, интерфейсами и большими общими модулями.
  • > Модернизация или портирование, где первым результатом становится карта модулей и их зависимостей.

Сценарии работы агента

  • > Перечислить все модули, которые указывают общий модуль в предложении `uses`, прежде чем его менять.
  • > Найти классы, наследующие от базовой формы или базового компонента, и методы, которые они переопределяют.
  • > Проследить, какие процедуры вызывают подпрограмму, прежде чем менять её параметры.

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

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

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

  • find_symbol

    Используйте с именем класса, формы или процедуры, когда нужны определение и ссылки.

  • dependency_search

    Используйте обход incoming для общего модуля или базового класса, чтобы увидеть, какие модули и потомки от них зависят.

  • get_task_context

    Используйте для промптов вроде «объясни, как проводится счёт — от обработчика кнопки до модуля базы данных».