Перейти до вмісту
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

    Використовуйте для промптів на кшталт «поясни, як проводиться рахунок — від обробника кнопки до модуля бази даних».