1
0

UnitResolution.md 1.3 KB

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: XX.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:

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