Naar inhoud springen
cd /languages
  • Langlevende desktop
  • Programmeren
  • AST- en symboolondersteuning

Pascal en Delphi in Maguyva: unit- en klassengrafen

Maguyva ondersteunt Pascal- en Delphi-units met AST, symbolen en graaf, zodat AI-agents uses-clausules, klassen en procedures in kaart brengen vóór een wijziging.

Waarom een Pascal-codebase eerst een kaart nodig heeft

Delphi- en Free Pascal-applicaties groeien vaak rond een paar grote units die al het andere gebruikt. Formulieren erven van basisformulieren, componenten van basiscomponenten, en bedrijfsregels zitten in procedures die een dozijn schermen aanroepen. Bestand voor bestand leest de code prima, maar in de afhankelijkheden gaan wijzigingen mis.

Maguyva geeft een agent eerst de unit- en klassenstructuur, zodat hij kan zeggen wat een wijziging raakt voordat hij iets schrijft.

Wat Maguyva in Pascal extraheert

Maguyva dekt de bron-units .pas en .pp. Procedure- en functiedefinities worden geëxtraheerd als aanroepbare symbolen, waarbij de sleutelwoorden procedure, function, var en const uit definitienamen worden verwijderd. Klassen en interfaces zijn in structureel zoeken te selecteren als typedefinities.

Imports komen uit uses-clausules; het sleutelwoord wordt verwijderd, zodat de graaf unitnamen opslaat. Aanroepen worden genormaliseerd door memberprefixen, argumenten en omsluitende haakjes te verwijderen, dus een aanroep geschreven als Self.Save(x) wordt opgeslagen als Save.

De graaf legt aanroepen vast, overerving, interface-implementatie, overrides, instantiëring, typeverwijzingen, lees- en schrijfacties, en randen voor het opwerpen en afhandelen van exceptions. Ongeveer 107 routines uit de runtimebibliotheek (WriteLn, ReadLn, Inc, Dec, Ord en vergelijkbare) worden uit de relaties gefilterd.

Voorbeeldprompts voor agents

  • “Welke units gebruiken DataModuleMain, en wat roepen ze daaruit aan?” (dependency_search incoming)
  • “Welke formulieren erven van TBaseEditForm, en welke methoden overschrijven ze?” (find_symbol, daarna dependency_search)
  • “Leg uit hoe een factuur wordt geboekt, van de knophandler tot de database-unit.” (get_task_context)

Bekende beperkingen

  • Alleen .pas en .pp zijn aan Pascal gekoppeld. Delphi-project- en formulierbestanden zoals .dpr en .dfm staan niet in de extensielijst, dus formulierlay-outs en projectbedrading vallen buiten de graaf.
  • Methoden gebruiken dezelfde syntaxis als losse procedures, dus de preset methods in structural_search selecteert niets. Gebruik de preset functions.
  • Aanroepen van gefilterde runtimeroutines verschijnen niet als randen in de graaf. Gebruik daarvoor text_pattern_search.

Volgende stappen

Koppel een repository via de snelstart en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Als de applicatie C-bibliotheken linkt, lees dan ook de C-gids.

Beste toepassing

  • > Teams die Delphi- of Lazarus/Free Pascal-applicaties onderhouden waarvan de oorspronkelijke auteurs allang zijn vertrokken.
  • > Object Pascal-codebases met diepe klassenhiërarchieën, interfaces en grote gedeelde units.
  • > Modernisering of porting waarbij het eerste resultaat een kaart van de units en hun afhankelijkheden is.

Agentworkflows

  • > Elke unit opsommen die een gedeelde unit in haar `uses`-clausule noemt voordat die verandert.
  • > De klassen vinden die van een basisformulier of basiscomponent erven, en de methoden die ze overschrijven.
  • > Nagaan welke procedures een routine aanroepen voordat de parameters veranderen.

Enginedetails

  • > Pascal-ondersteuning dekt de units `.pas` en `.pp`. Delphi-project- en formulierbestanden zoals `.dpr` en `.dfm` staan niet in de extensielijst.
  • > `uses`-clausules worden importrelaties, en aanroepen worden genormaliseerd door memberprefixen, argumenten en omsluitende haakjes te verwijderen.
  • > Ongeveer 107 routines uit de runtimebibliotheek zoals `WriteLn`, `Inc` en `Ord` worden uit de relaties gefilterd, zodat de applicatiecode opvalt.

Nuttige MCP-instappunten

  • find_symbol

    Gebruik het voor een klasse-, formulier- of procedurenaam wanneer je de definitie en verwijzingen nodig hebt.

  • dependency_search

    Gebruik incoming-traversal op een gedeelde unit of basisklasse om te zien welke units en afgeleide klassen ervan afhangen.

  • get_task_context

    Gebruik het voor prompts zoals "leg uit hoe een factuur wordt geboekt, van de knophandler tot de database-unit".