- Alle Docs auf verifizierte AST-Knotentypen aktualisiert (declClass, declIntf, declProc, etc.) - Scaffold/ entfernt und durch konkreten Integration Guide ersetzt (06-Integration-Guide.md) - Neue Docs: AST-Referenz (03), NodeKind-Mapping (05), Integration Guide (06) - Checklist um bekannte Einschränkungen erweitert (with-Statements, .dfm/.fmx, Generics) - UAuth.pas erweitert: Sichtbarkeitsbereiche, Felder, Properties, Constructor/Destructor - UTypes.pas neu: Enums, Records, Type-Aliase, Konstanten, Class Methods, verschachtelte Typen - UnitResolution.md mit konkreten AST-Strukturen aktualisiert - README.md an neue Architektur-Beschreibung angepasst
3.2 KiB
3.2 KiB
Checklist: Pascal/Delphi Support in CodeGraph
A) Plumbing (Infrastruktur)
npm install tree-sitter-pascalals Dependencysrc/types.ts:'pascal'zumLanguageUnion-Type hinzufügensrc/types.ts:DEFAULT_CONFIG.includeum'**/*.pas','**/*.dpr','**/*.dpk','**/*.lpr'erweiternsrc/extraction/grammars.ts: Grammar-Loaderpascal: () => require('tree-sitter-pascal')src/extraction/grammars.ts: Extension-Mapping.pas,.dpr,.dpk,.lpr→'pascal'src/extraction/grammars.ts: Display-Namepascal: 'Pascal / Delphi'src/extraction/tree-sitter.ts:LanguageExtractorfürpascalinEXTRACTORSMap
B) Node-Extraktion
unit/program/library→ NodeKindmoduledeclClass→ NodeKindclass(inkl. record, object)declIntf→ NodeKindinterfacedeclProc(top-level) → NodeKindfunctiondeclProc(in Klasse) → NodeKindmethod(inkl. constructor/destructor)declProp→ NodeKindpropertydeclField→ NodeKindfielddeclEnum→ NodeKindenumdeclEnumValue→ NodeKindenum_memberdeclConst→ NodeKindconstantdeclType(einfach) → NodeKindtype_alias
C) Edge-Extraktion
declUses→ EdgeKindimportsdeclClass.parent[0]→ EdgeKindextendsdeclClass.parent[1..]→ EdgeKindimplementsexprCall→ EdgeKindcallsexprDot+exprCall→ EdgeKindcalls(qualifiziert)TClass.Create→ EdgeKindinstantiates- Parent-Child Containment → EdgeKind
contains
D) Sichtbarkeit & Attribute
getVisibility:declSection→ public/private/protectedisStatic:kClassindeclProc→ truegetSignature: Parameter + Rückgabetyp extrahieren
E) Resolution
moduleName→unitName → fileIdMappinguses X;→ Unit-Node auflösenuses X in 'path'→ Datei direkt auflösen (Phase 2)- Call-Resolution: gleiche Unit → gleiche Klasse → uses-Units → global
F) Testing
- Fixtures in Test-Suite aufnehmen (
UAuth.pas,App.dpr,UTypes.pas) - Nodes: Anzahl + Namen verifizieren
- Edges: imports/extends/implements/calls prüfen
- Sichtbarkeiten prüfen
- Properties, Enums, Konstanten prüfen
G) Polishing
- Language in Supported-Languages-Dokumentation aufnehmen
- CLI-Hilfe / Config-Validierung aktualisieren
H) Bekannte Einschränkungen (für spätere Phasen)
with-Statements (Phase 2): Verschleiern den Qualifier bei Aufrufen. Im MVP werden Calls innerhalb vonwith-Blöcken ohne Qualifier extrahiert..dfm/.fmxForm-Dateien (Zukunft): Enthalten Komponenten-Deklarationen und Event-Verknüpfungen. Aktuell nicht unterstützt..incInclude-Dateien (Optional): Enthalten Code-Fragmente, die per{$I filename}eingebunden werden. Parser liefert möglicherweise keinen vollständigen AST.- Class Helpers / Record Helpers (Phase 2):
declHelper-Knoten erweitern existierende Typen. Erfordert spezielle Resolution-Logik. - Generics (Phase 2):
typerefTplundgenericTplfür generische Typen.