Spring til indhold
cd /languages
  • Langlivet desktop
  • Programmering
  • AST- og symbolunderstøttelse

Pascal og Delphi i Maguyva: unit- og klassegrafer

Maguyva understøtter Pascal- og Delphi-units med AST, symboler og graf, så AI-agenter kan kortlægge uses-klausuler, klasser og procedurer, før de ændres.

Hvorfor en Pascal-kodebase først har brug for et kort

Delphi- og Free Pascal-applikationer vokser ofte omkring nogle få store units, som alt andet bruger. Formularer arver fra basisformularer, komponenter fra basiskomponenter, og forretningsreglerne ligger i procedurer, som et dusin skærmbilleder kalder. Koden er let at læse fil for fil, men det er i afhængighederne, ændringer går galt.

Maguyva giver agenten unit- og klassestrukturen først, så den kan sige, hvad en ændring berører, før den skriver noget.

Hvad Maguyva udtrækker i Pascal

Maguyva dækker kilde-units i .pas og .pp. Procedure- og funktionsdefinitioner udtrækkes som kaldbare symboler, og nøgleordene procedure, function, var og const fjernes fra definitionsnavnene. Klasser og interfaces kan vælges som typedefinitioner i strukturel søgning.

Importer kommer fra uses-klausuler; nøgleordet fjernes, så grafen gemmer unit-navne. Kald normaliseres ved at fjerne medlemspræfikser, argumenter og omsluttende parenteser, så et kald skrevet som Self.Save(x) gemmes som Save.

Grafen registrerer kald, nedarvning, interfaceimplementering, overskrivninger, instansiering, typereferencer, læsninger og skrivninger samt kanter for at kaste og håndtere undtagelser. Omkring 107 rutiner i runtime-biblioteket (WriteLn, ReadLn, Inc, Dec, Ord og lignende) filtreres fra relationerne.

Eksempler på prompts til agenter

  • “Hvilke units bruger DataModuleMain, og hvad kalder de i den?” (dependency_search incoming)
  • “Hvilke formularer arver fra TBaseEditForm, og hvilke metoder overskriver de?” (find_symbol, derefter dependency_search)
  • “Forklar, hvordan en faktura bogføres, fra knaphandleren til database-uniten.” (get_task_context)

Kendte begrænsninger

  • Kun .pas og .pp er knyttet til Pascal. Delphis projekt- og formularfiler som .dpr og .dfm er ikke på listen over filendelser, så formularlayout og projektopsætning ligger uden for grafen.
  • Metoder bruger samme syntaks som frie procedurer, så forudindstillingen methods i structural_search vælger intet. Brug forudindstillingen functions.
  • Kald til filtrerede rutiner i runtime-biblioteket vises ikke som kanter i grafen. Brug text_pattern_search til dem.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. Hvis applikationen linker C-biblioteker, så læs også guiden til C.

Bedst egnet til

  • > Teams, der vedligeholder Delphi- eller Lazarus/Free Pascal-applikationer, hvis oprindelige forfattere for længst er gået videre.
  • > Object Pascal-kodebaser med dybe klassehierarkier, interfaces og store delte units.
  • > Modernisering eller portering, hvor det første resultat er et kort over units og deres afhængigheder.

Agent-arbejdsgange

  • > Liste alle units, der nævner en delt unit i deres `uses`-klausul, før den ændres.
  • > Finde klasserne, der arver fra en basisformular eller basiskomponent, og de metoder, de overskriver.
  • > Spore, hvilke procedurer der kalder en rutine, før dens parametre ændres.

Motordetaljer

  • > Pascal-understøttelsen dækker units i `.pas` og `.pp`. Delphis projekt- og formularfiler som `.dpr` og `.dfm` er ikke på listen over filendelser.
  • > `uses`-klausuler bliver til importrelationer, og kald normaliseres ved at fjerne medlemspræfikser, argumenter og omsluttende parenteser.
  • > Omkring 107 rutiner i runtime-biblioteket som `WriteLn`, `Inc` og `Ord` filtreres fra relationerne, så applikationskoden træder frem.

Nyttige MCP-indgange

  • find_symbol

    Brug det til et klasse-, formular- eller procedurenavn, når du har brug for definitionen og referencerne.

  • dependency_search

    Brug incoming-gennemløb på en delt unit eller basisklasse for at se, hvilke units og efterkommere der afhænger af den.

  • get_task_context

    Brug det til prompts som "forklar, hvordan en faktura bogføres, fra knaphandleren til database-uniten".