Delphi-Konzept: Reale tree-sitter-pascal AST-Typen, Integration Guide, erweiterte Fixtures
- 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
This commit is contained in:
+55
-26
@@ -1,32 +1,61 @@
|
||||
# Checklist: Pascal/Delphi Support in CodeGraph
|
||||
|
||||
## A) Plumbing
|
||||
- [ ] tree-sitter grammar dependency (Pascal)
|
||||
- [ ] Language registry: `pascal` hinzufügen
|
||||
- [ ] Extension mapping: `.pas .dpr .dpk .lpr` (optional `.inc`)
|
||||
- [ ] Queries laden (nodes + edges)
|
||||
## A) Plumbing (Infrastruktur)
|
||||
- [ ] `npm install tree-sitter-pascal` als Dependency
|
||||
- [ ] `src/types.ts`: `'pascal'` zum `Language` Union-Type hinzufügen
|
||||
- [ ] `src/types.ts`: `DEFAULT_CONFIG.include` um `'**/*.pas'`, `'**/*.dpr'`, `'**/*.dpk'`, `'**/*.lpr'` erweitern
|
||||
- [ ] `src/extraction/grammars.ts`: Grammar-Loader `pascal: () => require('tree-sitter-pascal')`
|
||||
- [ ] `src/extraction/grammars.ts`: Extension-Mapping `.pas`, `.dpr`, `.dpk`, `.lpr` → `'pascal'`
|
||||
- [ ] `src/extraction/grammars.ts`: Display-Name `pascal: 'Pascal / Delphi'`
|
||||
- [ ] `src/extraction/tree-sitter.ts`: `LanguageExtractor` für `pascal` in `EXTRACTORS` Map
|
||||
|
||||
## B) Extraction
|
||||
- [ ] Unit/Program/Package Nodes
|
||||
- [ ] Class/Interface/Record Nodes
|
||||
- [ ] Procedure/Function Nodes
|
||||
- [ ] Method Nodes
|
||||
- [ ] uses -> imports edges
|
||||
- [ ] extends edges
|
||||
- [ ] implements edges
|
||||
- [ ] calls edges (best-effort)
|
||||
## B) Node-Extraktion
|
||||
- [ ] `unit` / `program` / `library` → NodeKind `module`
|
||||
- [ ] `declClass` → NodeKind `class` (inkl. record, object)
|
||||
- [ ] `declIntf` → NodeKind `interface`
|
||||
- [ ] `declProc` (top-level) → NodeKind `function`
|
||||
- [ ] `declProc` (in Klasse) → NodeKind `method` (inkl. constructor/destructor)
|
||||
- [ ] `declProp` → NodeKind `property`
|
||||
- [ ] `declField` → NodeKind `field`
|
||||
- [ ] `declEnum` → NodeKind `enum`
|
||||
- [ ] `declEnumValue` → NodeKind `enum_member`
|
||||
- [ ] `declConst` → NodeKind `constant`
|
||||
- [ ] `declType` (einfach) → NodeKind `type_alias`
|
||||
|
||||
## C) Resolution
|
||||
- [ ] unitName -> file/node mapping
|
||||
- [ ] resolve `uses X;` to unit node
|
||||
- [ ] resolve `X in 'path'` (DPR/DPK) (Phase 2)
|
||||
- [ ] call resolution baseline (same file + class)
|
||||
## C) Edge-Extraktion
|
||||
- [ ] `declUses` → EdgeKind `imports`
|
||||
- [ ] `declClass.parent[0]` → EdgeKind `extends`
|
||||
- [ ] `declClass.parent[1..]` → EdgeKind `implements`
|
||||
- [ ] `exprCall` → EdgeKind `calls`
|
||||
- [ ] `exprDot` + `exprCall` → EdgeKind `calls` (qualifiziert)
|
||||
- [ ] `TClass.Create` → EdgeKind `instantiates`
|
||||
- [ ] Parent-Child Containment → EdgeKind `contains`
|
||||
|
||||
## D) Testing
|
||||
- [ ] add fixtures to tests
|
||||
- [ ] assert extracted nodes
|
||||
- [ ] assert imports/extends/implements/calls
|
||||
## D) Sichtbarkeit & Attribute
|
||||
- [ ] `getVisibility`: `declSection` → public/private/protected
|
||||
- [ ] `isStatic`: `kClass` in `declProc` → true
|
||||
- [ ] `getSignature`: Parameter + Rückgabetyp extrahieren
|
||||
|
||||
## E) Polishing
|
||||
- [ ] expose language in `Supported Languages` docs
|
||||
- [ ] update CLI help / config validation
|
||||
## E) Resolution
|
||||
- [ ] `moduleName` → `unitName → fileId` Mapping
|
||||
- [ ] `uses X;` → Unit-Node auflösen
|
||||
- [ ] `uses 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 von `with`-Blöcken ohne Qualifier extrahiert.
|
||||
- [ ] **`.dfm`/`.fmx` Form-Dateien** (Zukunft): Enthalten Komponenten-Deklarationen und Event-Verknüpfungen. Aktuell nicht unterstützt.
|
||||
- [ ] **`.inc` Include-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): `typerefTpl` und `genericTpl` für generische Typen.
|
||||
|
||||
Reference in New Issue
Block a user