Delphi concept
This commit is contained in:
@@ -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")
|
||||
Reference in New Issue
Block a user