Przejdź do treści
cd /languages
  • Długowieczny desktop
  • Programowanie
  • Obsługa AST i symboli

Pascal i Delphi w Maguyva: grafy modułów i klas

Maguyva obsługuje moduły Pascala i Delphi przez AST, symbole i graf, dzięki czemu agenci AI mapują klauzule uses, klasy i procedury przed zmianą.

Dlaczego baza kodu w Pascalu najpierw potrzebuje mapy

Aplikacje w Delphi i Free Pascal często rosną wokół kilku dużych modułów, z których korzysta cała reszta. Formularze dziedziczą po formularzach bazowych, komponenty po komponentach bazowych, a reguły biznesowe żyją w procedurach wywoływanych przez kilkanaście ekranów. Plik po pliku kod czyta się dobrze, ale zmiany psują się na zależnościach.

Maguyva najpierw daje agentowi strukturę modułów i klas, aby mógł powiedzieć, czego dotyczy zmiana, zanim cokolwiek napisze.

Co Maguyva wyodrębnia w Pascalu

Maguyva obejmuje moduły źródłowe .pas i .pp. Definicje procedur i funkcji są wyodrębniane jako symbole wywoływalne, a z nazw definicji usuwane są słowa kluczowe procedure, function, var i const. Klasy i interfejsy można wybrać jako definicje typów w wyszukiwaniu strukturalnym.

Importy pochodzą z klauzul uses; słowo kluczowe jest usuwane, więc graf przechowuje nazwy modułów. Wywołania są normalizowane przez usunięcie prefiksów składowych, argumentów i otaczających nawiasów, więc wywołanie zapisane jako Self.Save(x) jest przechowywane jako Save.

Graf zapisuje wywołania, dziedziczenie, implementację interfejsów, nadpisania, tworzenie instancji, odwołania do typów, odczyty i zapisy oraz krawędzie zgłaszania i obsługi wyjątków. Około 107 procedur biblioteki uruchomieniowej (WriteLn, ReadLn, Inc, Dec, Ord i podobne) jest pomijanych w relacjach.

Przykładowe prompty dla agentów

  • „Które moduły używają DataModuleMain i co z niego wywołują?” (dependency_search incoming)
  • „Które formularze dziedziczą po TBaseEditForm i jakie metody nadpisują?” (find_symbol, potem dependency_search)
  • „Wyjaśnij, jak faktura jest księgowana, od obsługi przycisku do modułu bazy danych.” (get_task_context)

Znane ograniczenia

  • Do Pascala przypisane są tylko .pas i .pp. Pliki projektów i formularzy Delphi, takie jak .dpr i .dfm, nie znajdują się na liście rozszerzeń, więc układ formularzy i konfiguracja projektu pozostają poza grafem.
  • Metody używają tej samej składni co wolne procedury, więc preset methods w structural_search niczego nie wybiera. Użyj presetu functions.
  • Wywołania odfiltrowanych procedur biblioteki uruchomieniowej nie pojawiają się jako krawędzie grafu. Do ich wyszukiwania użyj text_pattern_search.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. Jeśli aplikacja linkuje biblioteki C, przeczytaj też przewodnik po C.

Najlepsze dopasowanie

  • > Zespoły utrzymujące aplikacje w Delphi lub Lazarus/Free Pascal, których pierwotni autorzy dawno odeszli.
  • > Bazy kodu w Object Pascal z głębokimi hierarchiami klas, interfejsami i dużymi współdzielonymi modułami.
  • > Prace modernizacyjne lub migracyjne, których pierwszym rezultatem jest mapa modułów i ich zależności.

Workflow agentów

  • > Wypisać wszystkie moduły, które wymieniają współdzielony moduł w klauzuli `uses`, zanim zostanie zmieniony.
  • > Znaleźć klasy dziedziczące po bazowym formularzu lub komponencie oraz metody, które nadpisują.
  • > Prześledzić, które procedury wywołują daną procedurę, zanim zmienią się jej parametry.

Szczegóły silnika

  • > Obsługa Pascala obejmuje moduły `.pas` i `.pp`. Pliki projektów i formularzy Delphi, takie jak `.dpr` i `.dfm`, nie znajdują się na liście rozszerzeń.
  • > Klauzule `uses` stają się relacjami importu, a wywołania są normalizowane przez usunięcie prefiksów składowych, argumentów i otaczających nawiasów.
  • > Około 107 procedur biblioteki uruchomieniowej, takich jak `WriteLn`, `Inc` i `Ord`, jest filtrowanych z relacji, aby wyróżnić kod aplikacji.

Przydatne punkty wejścia MCP

  • find_symbol

    Używaj go z nazwą klasy, formularza lub procedury, gdy potrzebujesz definicji i odwołań.

  • dependency_search

    Użyj przejścia incoming na współdzielonym module lub klasie bazowej, aby zobaczyć, które moduły i klasy potomne od nich zależą.

  • get_task_context

    Używaj go do promptów typu „wyjaśnij, jak faktura jest księgowana, od obsługi przycisku do modułu bazy danych”.