Files
RustAst/docs/Transformation des AST-Visualisierers zum Interaktiven Editor.md
Michael Schimmel 494bf554d2 Old Docs added
2026-02-20 10:09:22 +01:00

4.8 KiB

Projektplan: Transformation des AST-Visualisierers zum Interaktiven Editor

  • Datum: 08.09.2025 11:20
  • Motivation
    • Der aktuelle AST-Visualisierer ist ein leistungsfähiges Anzeigetool. Um ihn zu einem interaktiven Werkzeug für die Skript-Entwicklung, -Analyse und -Modifikation weiterzuentwickeln, muss eine robuste Architektur für Zustandsverwaltung, Bearbeitung und Persistenz geschaffen werden.
  • Ziel
    • Die Entwicklung einer flexiblen Editor-Architektur, die eine klare Trennung zwischen dem logischen AST-Modell und seiner visuellen Repräsentation gewährleistet. Das System muss komplexe Anforderungen erfüllen: Es soll optionale Darstellungsmodi (Baum- vs. Graphen-Ansicht), zwei Arten von Metadaten (logisch vs. instanzspezifisch) und eine hohe Datenintegrität bei internen (z.B. Umsortieren) und externen (z.B. Einfügen von LLM-Code) Bearbeitungen sicherstellen.
  • Ergebnis
    • Ein interaktiver, visueller AST-Editor mit einem hochentwickelten Zustandsmanagement. Die Architektur bietet eine nahtlose Benutzererfahrung, bei der Layout-Anpassungen und Zustände (z.B. eingeklappte Knoten) auch bei komplexen Operationen wie Refactoring oder dem Mergen von extern modifiziertem Code intelligent erhalten bleiben. Das System ist durch ein flexibles JSON-Format persistent und interoperabel.

TODO: Nächste Schritte

  1. Fundament: ViewModel-Schicht und Stabile IDs einführen
    • Beschreibung: Das Kernstück der neuen Architektur schaffen. Eine TVisualNodeViewModel-Klasse wird als Vermittler zwischen dem IAstNode-Modell und der TAuraNode-Ansicht eingeführt.
    • Umsetzung:
      • Jede TVisualNodeViewModel-Instanz erhält beim Erstellen eine einzigartige, permanente und strukturunabhängige TViewModelID (z.B. Int64).
      • Der TAstToAuraNodeVisitor wird so umgebaut, dass er primär einen Baum aus ViewModel-Objekten erzeugt, welcher die Hierarchie des AST widerspiegelt.
  2. Zustandsverwaltung: Metadaten-System implementieren
    • Beschreibung: Die getrennte Speicherung von logischen und instanzspezifischen Metadaten implementieren.
    • Umsetzung:
      • Logische Metadaten: Eine zentrale TDictionary<IAstNode, TLogicalMetadata> für Eigenschaften erstellen, die für alle Instanzen eines Knotens gelten (z.B. Farbkodierung).
      • Instanz-Metadaten: Eine TDictionary<TViewModelID, TVisualInstanceMetadata> für Eigenschaften erstellen, die nur für eine bestimmte visuelle Instanz gelten (z.B. IsCollapsed, Position auf der Leinwand).
      • Die Rendering-Logik anpassen, um beide Metadatentypen beim Zeichnen eines TAuraNode zu berücksichtigen.
  3. Persistenz: JSON-Serialisierung erweitern
    • Beschreibung: Das Speichern und Laden des gesamten Editor-Zustands ermöglichen.
    • Umsetzung:
      • Einen Serialisierungsprozess entwerfen, der drei getrennte Bereiche in der JSON-Datei ablegt:
        1. Den reinen IAstNode-Baum.
        2. Die logischen Metadaten, verknüpft über eine temporäre ID des IAstNode.
        3. Die instanzspezifischen Metadaten, verknüpft über die stabile TViewModelID.
  4. Interaktion: Grundlegende Editierbarkeit herstellen
    • Beschreibung: Dem Benutzer erlauben, den AST-Graphen zu verändern (Knoten hinzufügen, löschen, umsortieren).
    • Umsetzung:
      • Das Command Pattern implementieren, bei dem jede Änderung eine Execute- und Unexecute-Methode hat (für Undo/Redo).
      • Jeder Command ist dafür verantwortlich, sowohl das IAstNode-Modell als auch den TVisualNodeViewModel-Baum konsistent zu halten. Da die Metadaten an die stabilen IDs gekoppelt sind, bleiben sie bei diesen Operationen automatisch erhalten.
  5. Fortgeschrittene Interaktion: "Smart Paste" / Abgleich-Algorithmus
    • Beschreibung: Das intelligente Einfügen von extern veränderten AST-Teilbäumen ermöglichen.
    • Umsetzung:
      • Einen "Diff & Merge"-Algorithmus entwickeln. Beim Einfügen vergleicht dieser den neuen AST-Teilbaum mit dem alten.
      • Bei äquivalenten Knoten werden die bestehenden TVisualNodeViewModel-Instanzen (samt ihrer IDs und Metadaten) wiederverwendet, um den visuellen Zustand zu erhalten. Nur bei echten Änderungen oder neuen Knoten werden neue ViewModels mit neuen IDs erzeugt.
  6. Optionale Ansicht: Eindeutige Knoten-Visualisierung ("Graph"-Modus)
    • Beschreibung: Den optionalen Modus implementieren, in dem jeder IAstNode nur einmal dargestellt wird.
    • Umsetzung:
      • Den TAstToAuraNodeVisitor um einen Modus erweitern. In diesem Modus führt er eine TDictionary<IAstNode, TVisualNodeViewModel>, um bereits erstellte ViewModels für einen IAstNode zu finden und wiederzuverwenden, anstatt neue zu erstellen. Stattdessen wird nur eine neue Verbindungslinie gezeichnet.