Files
codegraph/Delphi/resolution/UnitResolution.md
T
Olaf Monien dcca22c78f 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
2026-02-11 00:17:29 +01:00

46 lines
1.3 KiB
Markdown

# Unit Resolution Heuristics (uses → File)
## Input
- Extrahierte Edges vom Typ `imports` aus `declUses`-Knoten.
- Extrahierte Nodes vom Typ `module` aus `unit`/`program`/`library` (Name aus `moduleName`-Kind-Knoten).
## AST-Struktur
```
(declUses
(kUses)
(identifier "System.SysUtils") ← Unit-Name
(identifier "UAuth") ← Unit-Name
(kIn) (literalString "'UAuth.pas'") ← optionaler Pfad
)
```
## MVP Algorithm
1. Build `unitName → nodeId` Map für alle indexierten Dateien (aus `moduleName`-Knoten).
2. Für jeden `imports`-Edge mit Zielname `X`:
- Exakter Match auf `X`
- Case-insensitiver Match (Delphi ist case-insensitive)
- Namespace-Normalisierung:
- `System.SysUtils` → versuche auch `SysUtils` (letzter Segment)
- Dateiname-basierter Fallback: `X``X.pas` in den indexierten Dateien suchen
3. Falls aufgelöst: `edge.to_node_id = targetNodeId`
4. Falls nicht aufgelöst: `edge.to_symbol = X` beibehalten (Suche funktioniert trotzdem)
## DPR/DPK `in 'path'` (Phase 2)
In Delphi-Projektdateien kann ein expliziter Pfad angegeben werden:
```delphi
uses
Foo in 'src/Foo.pas',
Bar in 'Bar.pas';
```
Im AST erkennbar durch `(kIn) (literalString)` nach dem `(identifier)`.
**Enhancement:**
- `literalString` extrahieren und direkt zur Datei auflösen
- Pfad relativ zur DPR/DPK-Datei interpretieren