Zum Inhalt springen
cd /languages
  • Langlebiger Desktop
  • Programmierung
  • AST- und Symbol-Support

Pascal und Delphi in Maguyva: Unit- und Klassengraphen

Maguyva unterstützt Pascal- und Delphi-Units mit AST, Symbolen und Graph, damit KI-Agenten uses-Klauseln, Klassen und Prozeduren vor einer Änderung erfassen können.

Warum Pascal-Codebasen zuerst eine Karte brauchen

Delphi- und Free Pascal-Anwendungen wachsen oft um einige große Units herum, die alles andere nutzt. Formulare erben von Basisformularen, Komponenten von Basiskomponenten, und Geschäftsregeln stecken in Prozeduren, die ein Dutzend Masken aufrufen. Datei für Datei liest sich der Code gut, doch Änderungen scheitern an den Abhängigkeiten.

Maguyva gibt einem Agenten zuerst die Unit- und Klassenstruktur, damit er sagen kann, was eine Änderung berührt, bevor er etwas schreibt.

Was Maguyva in Pascal extrahiert

Maguyva deckt die Quell-Units .pas und .pp ab. Prozedur- und Funktionsdefinitionen werden als aufrufbare Symbole extrahiert, wobei die Schlüsselwörter procedure, function, var und const aus den Definitionsnamen entfernt werden. Klassen und Interfaces lassen sich in der Struktursuche als Typdefinitionen auswählen.

Importe entstehen aus uses-Klauseln; das Schlüsselwort wird entfernt, sodass der Graph Unit-Namen speichert. Aufrufe werden normalisiert, indem Member-Präfixe, Argumente und umschließende Klammern entfernt werden; ein Aufruf in der Form Self.Save(x) wird daher als Save gespeichert.

Der Graph erfasst Aufrufe, Vererbung, Interface-Implementierung, Overrides, Instanziierung, Typreferenzen, Lese- und Schreibzugriffe sowie Kanten für das Auslösen und Behandeln von Ausnahmen. Rund 107 Routinen der Laufzeitbibliothek (WriteLn, ReadLn, Inc, Dec, Ord und ähnliche) werden aus den Beziehungen herausgefiltert.

Beispiel-Prompts für Agenten

  • „Welche Units nutzen DataModuleMain, und was rufen sie daraus auf?“ (dependency_search incoming)
  • „Welche Formulare erben von TBaseEditForm, und welche Methoden überschreiben sie?“ (find_symbol, dann dependency_search)
  • „Erkläre, wie eine Rechnung gebucht wird, vom Button-Handler bis zur Datenbank-Unit.“ (get_task_context)

Bekannte Grenzen

  • Nur .pas und .pp sind Pascal zugeordnet. Delphi-Projekt- und Formulardateien wie .dpr und .dfm stehen nicht in der Liste der Dateiendungen, daher liegen Formularlayouts und Projektverdrahtung außerhalb des Graphen.
  • Methoden verwenden dieselbe Syntax wie freie Prozeduren, daher wählt das Preset methods in structural_search nichts aus. Nutze das Preset functions.
  • Aufrufe gefilterter Routinen der Laufzeitbibliothek erscheinen nicht als Graphkanten. Verwende dafür text_pattern_search.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Wenn die Anwendung C-Bibliotheken einbindet, lies auch den C-Leitfaden.

Am besten geeignet

  • > Teams, die Delphi- oder Lazarus/Free Pascal-Anwendungen pflegen, deren ursprüngliche Autoren längst weitergezogen sind.
  • > Object-Pascal-Codebasen mit tiefen Klassenhierarchien, Interfaces und großen gemeinsam genutzten Units.
  • > Modernisierungs- oder Portierungsprojekte, deren erstes Ergebnis eine Karte der Units und ihrer Abhängigkeiten ist.

Agentenabläufe

  • > Jede Unit auflisten, die eine gemeinsame Unit in ihrer `uses`-Klausel nennt, bevor sich diese ändert.
  • > Die Klassen finden, die von einem Basisformular oder einer Basiskomponente erben, und die Methoden, die sie überschreiben.
  • > Nachverfolgen, welche Prozeduren eine Routine aufrufen, bevor sich ihre Parameter ändern.

Engine-Einordnung

  • > Die Pascal-Unterstützung deckt die Units `.pas` und `.pp` ab. Delphi-Projekt- und Formulardateien wie `.dpr` und `.dfm` stehen nicht in der Liste der Dateiendungen.
  • > `uses`-Klauseln werden zu Importbeziehungen, und Aufrufe werden normalisiert, indem Member-Präfixe, Argumente und umschließende Klammern entfernt werden.
  • > Etwa 107 Routinen der Laufzeitbibliothek wie `WriteLn`, `Inc` und `Ord` werden aus den Beziehungen gefiltert, damit der Anwendungscode hervortritt.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen Klassen-, Formular- oder Prozedurnamen, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz die eingehende Traversierung auf einer gemeinsamen Unit oder Basisklasse, um zu sehen, welche Units und Nachfahren davon abhängen.

  • get_task_context

    Nutz es für Prompts wie „erkläre, wie eine Rechnung gebucht wird, vom Button-Handler bis zur Datenbank-Unit“.