Hoppa till innehåll
cd /languages
  • Långlivat skrivbord
  • Programmering
  • Stöd för AST och symboler

Pascal och Delphi i Maguyva: unit- och klassgrafer

Maguyva stöder Pascal- och Delphi-units med AST, symboler och graf, så att AI-agenter kan kartlägga uses-satser, klasser och procedurer innan de ändras.

Varför en Pascal-kodbas först behöver en karta

Delphi- och Free Pascal-applikationer växer ofta kring några stora units som allt annat använder. Formulär ärver från basformulär, komponenter från baskomponenter, och affärsreglerna finns i procedurer som ett dussin skärmar anropar. Koden läses bra fil för fil, men det är i beroendena som ändringar går fel.

Maguyva ger agenten unit- och klasstrukturen först, så att den kan säga vad en ändring berör innan den skriver något.

Vad Maguyva extraherar i Pascal

Maguyva täcker käll-units i .pas och .pp. Procedur- och funktionsdefinitioner extraheras som anropbara symboler, och nyckelorden procedure, function, var och const tas bort ur definitionsnamnen. Klasser och gränssnitt kan väljas som typdefinitioner i strukturell sökning.

Importer kommer från uses-satser; nyckelordet tas bort så att grafen lagrar unit-namn. Anrop normaliseras genom att medlemsprefix, argument och omslutande parenteser tas bort, så ett anrop skrivet som Self.Save(x) lagras som Save.

Grafen registrerar anrop, arv, gränssnittsimplementation, överskrivningar, instansiering, typreferenser, läsningar och skrivningar samt kanter för att kasta och hantera undantag. Omkring 107 rutiner i körtidsbiblioteket (WriteLn, ReadLn, Inc, Dec, Ord och liknande) filtreras bort ur relationerna.

Exempel på prompter för agenter

  • “Vilka units använder DataModuleMain, och vad anropar de från den?” (dependency_search incoming)
  • “Vilka formulär ärver från TBaseEditForm, och vilka metoder skriver de över?” (find_symbol, sedan dependency_search)
  • “Förklara hur en faktura bokförs, från knapphanteraren till databas-uniten.” (get_task_context)

Kända begränsningar

  • Endast .pas och .pp är kopplade till Pascal. Delphis projekt- och formulärfiler som .dpr och .dfm finns inte i listan över filändelser, så formulärlayouter och projektkoppling ligger utanför grafen.
  • Metoder använder samma syntax som fristående procedurer, så förinställningen methods i structural_search väljer ingenting. Använd förinställningen functions.
  • Anrop till filtrerade rutiner i körtidsbiblioteket visas inte som kanter i grafen. Använd text_pattern_search för dem.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. Om applikationen länkar C-bibliotek, läs även guiden för C.

Bäst lämpad för

  • > Team som underhåller Delphi- eller Lazarus/Free Pascal-applikationer vars ursprungliga författare för länge sedan gått vidare.
  • > Object Pascal-kodbaser med djupa klasshierarkier, gränssnitt och stora delade units.
  • > Modernisering eller portering där det första resultatet är en karta över units och deras beroenden.

Agentarbetsflöden

  • > Lista alla units som nämner en delad unit i sin `uses`-sats innan den ändras.
  • > Hitta klasserna som ärver från ett basformulär eller en baskomponent och metoderna de skriver över.
  • > Spåra vilka procedurer som anropar en rutin innan dess parametrar ändras.

Motordetaljer

  • > Pascal-stödet täcker units i `.pas` och `.pp`. Delphis projekt- och formulärfiler som `.dpr` och `.dfm` finns inte i listan över filändelser.
  • > `uses`-satser blir importrelationer, och anrop normaliseras genom att medlemsprefix, argument och omslutande parenteser tas bort.
  • > Omkring 107 rutiner i körtidsbiblioteket som `WriteLn`, `Inc` och `Ord` filtreras bort ur relationerna så att applikationskoden syns.

Användbara MCP-ingångar

  • find_symbol

    Använd det för ett klass-, formulär- eller procedurnamn när du behöver definitionen och referenserna.

  • dependency_search

    Använd incoming-traversering på en delad unit eller basklass för att se vilka units och ättlingar som beror på den.

  • get_task_context

    Använd det för prompter som "förklara hur en faktura bokförs, från knapphanteraren till databas-uniten".