feat: Add Pascal/Delphi language support with DFM/FMX extraction

Implements tree-sitter-based extraction for Pascal/Delphi source files
(.pas, .dpr, .dpk, .lpr) and a custom regex-based DfmExtractor for
form files (.dfm, .fmx). Covers classes, records, interfaces, methods,
properties, fields, enums, constants, type aliases, uses-imports,
visibility sections, inheritance, call extraction, and DFM component
hierarchies with event handler references.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Olaf Monien
2026-02-11 08:58:13 +01:00
co-authored by Claude Opus 4.6
parent 8dfc99572f
commit 425bfceea5
6 changed files with 1347 additions and 4 deletions
+11
View File
@@ -80,6 +80,10 @@ const grammarLoaders: Record<GrammarLanguage, GrammarLoader> = {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require('@sengac/tree-sitter-dart');
},
pascal: () => {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require('tree-sitter-pascal');
},
// Note: tree-sitter-liquid has ABI compatibility issues with tree-sitter 0.22+
// Liquid extraction is handled separately via regex in tree-sitter.ts
};
@@ -116,6 +120,12 @@ export const EXTENSION_MAP: Record<string, Language> = {
'.dart': 'dart',
'.liquid': 'liquid',
'.svelte': 'svelte',
'.pas': 'pascal',
'.dpr': 'pascal',
'.dpk': 'pascal',
'.lpr': 'pascal',
'.dfm': 'pascal',
'.fmx': 'pascal',
};
/**
@@ -245,6 +255,7 @@ export function getLanguageDisplayName(language: Language): string {
dart: 'Dart',
svelte: 'Svelte',
liquid: 'Liquid',
pascal: 'Pascal / Delphi',
unknown: 'Unknown',
};
return names[language] || language;