npm install tree-sitter-pascal als Dependencysrc/types.ts: 'pascal' zum Language Union-Type hinzufügensrc/types.ts: DEFAULT_CONFIG.include um '**/*.pas', '**/*.dpr', '**/*.dpk', '**/*.lpr', '**/*.dfm', '**/*.fmx' erweiternsrc/extraction/grammars.ts: Grammar-Loader pascal: () => require('tree-sitter-pascal')src/extraction/grammars.ts: Extension-Mapping .pas, .dpr, .dpk, .lpr, .dfm, .fmx → 'pascal'src/extraction/grammars.ts: Display-Name pascal: 'Pascal / Delphi'src/extraction/tree-sitter.ts: LanguageExtractor für pascal in EXTRACTORS Mapunit / program / library → NodeKind moduledeclClass → NodeKind class (inkl. record, object)declIntf → NodeKind interfacedeclProc (top-level) → NodeKind functiondeclProc (in Klasse) → NodeKind method (inkl. constructor/destructor)declProp → NodeKind propertydeclField → NodeKind fielddeclEnum → NodeKind enumdeclEnumValue → NodeKind enum_memberdeclConst → NodeKind constantdeclType (einfach) → NodeKind type_aliasdeclUses → EdgeKind importsdeclClass.parent[0] → EdgeKind extendsdeclClass.parent[1..] → EdgeKind implementsexprCall → EdgeKind callsexprDot + exprCall → EdgeKind calls (qualifiziert)TClass.Create → EdgeKind instantiatescontainsgetVisibility: declSection → public/private/protectedisStatic: kClass in declProc → truegetSignature: Parameter + Rückgabetyp extrahierenmoduleName → unitName → fileId Mappinguses X; → Unit-Node auflösenuses X in 'path' → Datei direkt auflösen (Phase 2)UAuth.pas, App.dpr, UTypes.pas)DfmExtractor-Klasse in src/extraction/tree-sitter.ts implementieren (analog LiquidExtractor)extractFromSource(): .dfm/.fmx → DfmExtractorcomponent extrahieren (object <Name>: <Typ>)contains abbildenOnClick = MethodName) als UnresolvedReference speichern → EdgeKind referencesinherited-Blöcke als component behandelnMainForm.dfm) in Test-Suite aufnehmen.pas-Datei auflösenwith-Statements (Phase 2): Verschleiern den Qualifier bei Aufrufen. Im MVP werden Calls innerhalb von with-Blöcken ohne Qualifier extrahiert..inc Include-Dateien (Optional): Enthalten Code-Fragmente, die per {$I filename} eingebunden werden. Parser liefert möglicherweise keinen vollständigen AST.declHelper-Knoten erweitern existierende Typen. Erfordert spezielle Resolution-Logik.typerefTpl und genericTpl für generische Typen.