Files
codegraph/Delphi/Docs/05-NodeKind-Mapping.md
T
Olaf Monien 8dfc99572f Delphi-Konzept: DFM/FMX Support hinzugefügt
- Neues Dokument 07-DFM-FMX-Support.md: Format-Referenz, Extraktions-Strategie, DfmExtractor-Konzept
- Neues Fixture MainForm.dfm: Verschachtelte Komponenten, Event-Handler (FormCreate, btnLoginClick, etc.)
- Integration Guide erweitert: DfmExtractor-Implementierung (analog LiquidExtractor), Coding-Style-Hinweise
- NodeKind-Mapping erweitert: DFM-Komponenten als component, Event-Handler als references, Verschachtelung als contains
- Checklist: DFM/FMX von 'Zukunft' auf konkreten Plan (Phase 1b) hochgestuft
- README aktualisiert: DFM/FMX-Support in Ziel, Inhalt und Grammar-Abschnitt aufgenommen
2026-02-11 01:06:16 +01:00

87 lines
4.3 KiB
Markdown

# NodeKind Mapping: Delphi → CodeGraph
Dieses Dokument zeigt die explizite Zuordnung von Delphi/Pascal-Konzepten zu den bestehenden CodeGraph `NodeKind`- und `EdgeKind`-Werten.
> **Ergebnis:** Alle Delphi-Konzepte lassen sich auf existierende `NodeKind`-Werte abbilden. Es werden **keine neuen** Kinds benötigt.
## Node-Mapping
| Delphi-Konzept | tree-sitter Typ | CodeGraph `NodeKind` | Anmerkungen |
|---|---|---|---|
| Unit | `unit` + `moduleName` | `module` | Kompilierungseinheit, vergleichbar mit Modulen |
| Program | `program` + `moduleName` | `module` | Ausführbarer Einstiegspunkt |
| Library | `library` + `moduleName` | `module` | DLL/shared library |
| Klasse | `declClass` (mit `kClass`) | `class` | Standard-Klasse |
| Record | `declClass` (mit `kRecord`) | `class` | Value-Type, aber strukturell wie Klasse |
| Object | `declClass` (mit `kObject`) | `class` | Legacy, wie Klasse behandeln |
| Interface | `declIntf` (mit `kInterface`) | `interface` | — |
| DispInterface | `declIntf` (mit `kDispInterface`) | `interface` | COM-spezifisch |
| Procedure (top-level) | `declProc` (mit `kProcedure`) | `function` | Ohne Rückgabetyp |
| Function (top-level) | `declProc` (mit `kFunction`) | `function` | Mit Rückgabetyp |
| Methode | `declProc` in `declClass` | `method` | Instance-Methode |
| Constructor | `declProc` (mit `kConstructor`) | `method` | Spezielle Methode |
| Destructor | `declProc` (mit `kDestructor`) | `method` | Spezielle Methode |
| Class Method | `declProc` (mit `kClass`) | `method` | Statisch, `isStatic = true` |
| Property | `declProp` | `property` | Mit Getter/Setter |
| Feld | `declField` | `field` | — |
| Enum | `declEnum` | `enum` | — |
| Enum-Wert | `declEnumValue` | `enum_member` | — |
| Type-Alias | `declType` (einfach) | `type_alias` | `type TMyInt = Integer;` |
| Konstante | `declConst` | `constant` | — |
| Uses-Eintrag | `declUses``identifier` | `import` | Pro Unit-Name ein Import-Node |
## Edge-Mapping
| Delphi-Beziehung | Erkennung | CodeGraph `EdgeKind` |
|---|---|---|
| `uses X;` | `declUses` → Kind `identifier` | `imports` |
| Basisklasse | `declClass.parent[0]` (erster `typeref`) | `extends` |
| Interface-Impl. | `declClass.parent[1..]` (weitere `typeref`s) | `implements` |
| Funktionsaufruf | `exprCall` | `calls` |
| Qualifizierter Aufruf | `exprDot``exprCall` | `calls` |
| `TClass.Create` | `exprDot` mit `.Create` Suffix | `instantiates` |
| Unit enthält Klasse | AST Parent-Child | `contains` |
| Klasse enthält Methode | AST Parent-Child | `contains` |
## DFM/FMX Node-Mapping
DFM/FMX-Dateien werden durch einen eigenen `DfmExtractor` (Regex-basiert, analog `LiquidExtractor`) verarbeitet.
| DFM-Konzept | Erkennung | CodeGraph `NodeKind` | Anmerkungen |
|---|---|---|---|
| Formular | `object Form1: TForm1` (Top-Level) | `component` | Root-Komponente der DFM-Datei |
| UI-Komponente | `object Button1: TButton` (verschachtelt) | `component` | Jede Komponente wird ein Node |
| Geerbte Komponente | `inherited Form1: TForm1` | `component` | Formular-Vererbung |
## DFM/FMX Edge-Mapping
| DFM-Beziehung | Erkennung | CodeGraph `EdgeKind` | Beschreibung |
|---|---|---|---|
| Verschachtelung | `object` innerhalb `object` | `contains` | Panel1 enthält Button1 |
| Event-Handler | `OnClick = Button1Click` | `references` | Komponente → Methode in `.pas` |
| Datei enthält Formular | Top-Level `object` | `contains` | DFM-Datei → Root-Komponente |
> **Hinweis:** Event-Handler-Verknüpfungen werden als `UnresolvedReference` gespeichert und in der Resolution-Phase zur entsprechenden Methode in der zugehörigen `.pas`-Datei aufgelöst.
## Nicht abgebildete Konzepte (Phase 2+)
| Konzept | Grund |
|---|---|
| `with`-Statement | Kein eigener EdgeKind nötig; erschwert nur die Call-Qualifizierung |
| Class Helper | Kein eigener NodeKind; als `class` mit speziellem Bezug zum erweiterten Typ |
| `exports`-Klauseln | `declExports` → könnte als `export` NodeKind abgebildet werden |
| Generics | `typerefTpl` → beeinflusst Typ-Referenzen, nicht den NodeKind |
## Sichtbarkeit
| Delphi-Keyword | CodeGraph Visibility |
|---|---|
| `published` | `public` (CodeGraph kennt kein `published`) |
| `public` | `public` |
| `protected` | `protected` |
| `private` | `private` |
| `strict private` | `private` |
| `strict protected` | `protected` |
| (keine Angabe) | `public` (Default in Delphi-Klassen) |