Delphi concept

This commit is contained in:
Olaf Monien
2026-02-10 23:55:42 +01:00
parent adaff67219
commit 645fd71e45
12 changed files with 529 additions and 0 deletions
@@ -0,0 +1,15 @@
# Pascal / Delphi Language Module (Scaffold)
Diese Dateien sind als **Startpunkt** für einen CodeGraph-Fork gedacht.
## Strukturvorschlag
- `language.ts` registriert Parser, Extensions, Query-Files
- `queries/nodes.scm` Node-Extraktion
- `queries/edges.scm` Edge-Extraktion
- `queries/comments.scm` (optional) Docstrings/Kommentare
## Wichtig
Die Capture-Namen in den `.scm` Dateien sind **Platzhalter**.
Passe sie so an, dass sie zum internen Schema von CodeGraph passen (siehe `Docs/02-Capture-Convention.md`).
@@ -0,0 +1,29 @@
/**
* Pascal / Delphi language registration scaffold for CodeGraph.
*
* NOTE: This is intentionally pseudo-code / a template.
* You must adapt it to the actual CodeGraph codebase structure.
*/
export const pascalLanguage = {
id: 'pascal',
displayName: 'Pascal / Delphi',
// MVP extensions
extensions: ['.pas', '.dpr', '.dpk', '.lpr'],
// Suggested tree-sitter grammar package name (verify in your fork)
// parser: require('tree-sitter-pascal'),
// Queries used by the extractor
queries: {
nodes: __dirname + '/queries/nodes.scm',
edges: __dirname + '/queries/edges.scm',
// comments: __dirname + '/queries/comments.scm',
},
// Optional language-specific settings
options: {
// includeFiles: ['**/*.inc'] // only if you decide to support includes
}
};
@@ -0,0 +1,38 @@
; Pascal/Delphi edge extraction queries (SCAFFOLD)
; -----------------------------------------------
; IMPORTANT: Replace capture names with the exact ones CodeGraph expects.
; === uses (imports) ===
; (uses_clause (qualified_identifier) @cg.target) @cg.edge
; (#set! cg.kind "imports")
; === class inheritance ===
; (class_type
; base_class: (qualified_identifier) @cg.target
; ) @cg.edge
; (#set! cg.kind "extends")
; === implements interfaces ===
; (class_type
; implements: (interface_list (qualified_identifier) @cg.target)
; ) @cg.edge
; (#set! cg.kind "implements")
; === call graph (best-effort) ===
; (call_expression function: (identifier) @cg.target) @cg.edge
; (#set! cg.kind "calls")
; Qualified calls: Obj.Foo(), TMyClass.Bar()
; (call_expression
; function: (qualified_identifier
; qualifier: (identifier) @cg.qualifier
; name: (identifier) @cg.target)
; ) @cg.edge
; (#set! cg.kind "calls")
@@ -0,0 +1,61 @@
; Pascal/Delphi node extraction queries (SCAFFOLD)
; -------------------------------------------------
; IMPORTANT: Replace capture names with the exact ones CodeGraph expects.
; Use existing languages as reference.
; === Unit / Program / Library / Package ===
; (unit_header name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "unit")
; (program_header name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "program")
; (library_header name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "library")
; (package_header name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "package")
; === Types: class / interface / record ===
; (type_definition
; name: (identifier) @cg.name
; value: (class_type)
; ) @cg.node
; (#set! cg.kind "class")
; (type_definition
; name: (identifier) @cg.name
; value: (interface_type)
; ) @cg.node
; (#set! cg.kind "interface")
; (type_definition
; name: (identifier) @cg.name
; value: (record_type)
; ) @cg.node
; (#set! cg.kind "record")
; === Top-level procedures/functions ===
; (procedure_declaration name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "procedure")
; (function_declaration name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "function")
; === Methods (depending on grammar) ===
; (method_declaration name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "method")
; Constructors / Destructors (optional)
; (constructor_declaration name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "constructor")
;
; (destructor_declaration name: (identifier) @cg.name) @cg.node
; (#set! cg.kind "destructor")