@jafreck/lore 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -35
- package/dist/cli.js +41 -38
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/indexer/call-graph.d.ts +29 -8
- package/dist/indexer/call-graph.d.ts.map +1 -1
- package/dist/indexer/call-graph.js +232 -31
- package/dist/indexer/call-graph.js.map +1 -1
- package/dist/indexer/config-parser.js +6 -1
- package/dist/indexer/config-parser.js.map +1 -1
- package/dist/indexer/coverage.js +3 -1
- package/dist/indexer/coverage.js.map +1 -1
- package/dist/indexer/db.d.ts.map +1 -1
- package/dist/indexer/db.js +70 -1
- package/dist/indexer/db.js.map +1 -1
- package/dist/indexer/docs.d.ts.map +1 -1
- package/dist/indexer/docs.js +4 -0
- package/dist/indexer/docs.js.map +1 -1
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +5 -0
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/extractors/bash.d.ts.map +1 -1
- package/dist/indexer/extractors/bash.js +29 -1
- package/dist/indexer/extractors/bash.js.map +1 -1
- package/dist/indexer/extractors/c.d.ts +5 -2
- package/dist/indexer/extractors/c.d.ts.map +1 -1
- package/dist/indexer/extractors/c.js +277 -8
- package/dist/indexer/extractors/c.js.map +1 -1
- package/dist/indexer/extractors/cpp.d.ts +5 -2
- package/dist/indexer/extractors/cpp.d.ts.map +1 -1
- package/dist/indexer/extractors/cpp.js +349 -3
- package/dist/indexer/extractors/cpp.js.map +1 -1
- package/dist/indexer/extractors/csharp.d.ts.map +1 -1
- package/dist/indexer/extractors/csharp.js +166 -1
- package/dist/indexer/extractors/csharp.js.map +1 -1
- package/dist/indexer/extractors/dart.d.ts.map +1 -1
- package/dist/indexer/extractors/dart.js +134 -1
- package/dist/indexer/extractors/dart.js.map +1 -1
- package/dist/indexer/extractors/elixir.d.ts.map +1 -1
- package/dist/indexer/extractors/elixir.js +45 -0
- package/dist/indexer/extractors/elixir.js.map +1 -1
- package/dist/indexer/extractors/elm.d.ts.map +1 -1
- package/dist/indexer/extractors/elm.js +33 -0
- package/dist/indexer/extractors/elm.js.map +1 -1
- package/dist/indexer/extractors/go.d.ts.map +1 -1
- package/dist/indexer/extractors/go.js +206 -1
- package/dist/indexer/extractors/go.js.map +1 -1
- package/dist/indexer/extractors/haskell.d.ts.map +1 -1
- package/dist/indexer/extractors/haskell.js +29 -0
- package/dist/indexer/extractors/haskell.js.map +1 -1
- package/dist/indexer/extractors/java.d.ts.map +1 -1
- package/dist/indexer/extractors/java.js +170 -1
- package/dist/indexer/extractors/java.js.map +1 -1
- package/dist/indexer/extractors/javascript.d.ts.map +1 -1
- package/dist/indexer/extractors/javascript.js +24 -2
- package/dist/indexer/extractors/javascript.js.map +1 -1
- package/dist/indexer/extractors/julia.d.ts.map +1 -1
- package/dist/indexer/extractors/julia.js +23 -1
- package/dist/indexer/extractors/julia.js.map +1 -1
- package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
- package/dist/indexer/extractors/kotlin.js +122 -1
- package/dist/indexer/extractors/kotlin.js.map +1 -1
- package/dist/indexer/extractors/lua.d.ts.map +1 -1
- package/dist/indexer/extractors/lua.js +19 -1
- package/dist/indexer/extractors/lua.js.map +1 -1
- package/dist/indexer/extractors/objc.d.ts.map +1 -1
- package/dist/indexer/extractors/objc.js +171 -1
- package/dist/indexer/extractors/objc.js.map +1 -1
- package/dist/indexer/extractors/ocaml.d.ts.map +1 -1
- package/dist/indexer/extractors/ocaml.js +29 -0
- package/dist/indexer/extractors/ocaml.js.map +1 -1
- package/dist/indexer/extractors/php.d.ts.map +1 -1
- package/dist/indexer/extractors/php.js +137 -1
- package/dist/indexer/extractors/php.js.map +1 -1
- package/dist/indexer/extractors/python.d.ts.map +1 -1
- package/dist/indexer/extractors/python.js +24 -3
- package/dist/indexer/extractors/python.js.map +1 -1
- package/dist/indexer/extractors/ruby.d.ts.map +1 -1
- package/dist/indexer/extractors/ruby.js +23 -1
- package/dist/indexer/extractors/ruby.js.map +1 -1
- package/dist/indexer/extractors/rust.d.ts.map +1 -1
- package/dist/indexer/extractors/rust.js +139 -2
- package/dist/indexer/extractors/rust.js.map +1 -1
- package/dist/indexer/extractors/scala.d.ts.map +1 -1
- package/dist/indexer/extractors/scala.js +24 -1
- package/dist/indexer/extractors/scala.js.map +1 -1
- package/dist/indexer/extractors/swift.d.ts.map +1 -1
- package/dist/indexer/extractors/swift.js +129 -1
- package/dist/indexer/extractors/swift.js.map +1 -1
- package/dist/indexer/extractors/types.d.ts +78 -2
- package/dist/indexer/extractors/types.d.ts.map +1 -1
- package/dist/indexer/extractors/types.js +167 -8
- package/dist/indexer/extractors/types.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +217 -1
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/extractors/zig.d.ts.map +1 -1
- package/dist/indexer/extractors/zig.js +30 -0
- package/dist/indexer/extractors/zig.js.map +1 -1
- package/dist/indexer/git-history.d.ts.map +1 -1
- package/dist/indexer/git-history.js +4 -8
- package/dist/indexer/git-history.js.map +1 -1
- package/dist/indexer/git-hooks.js +1 -1
- package/dist/indexer/git-hooks.js.map +1 -1
- package/dist/indexer/index.d.ts +27 -52
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +146 -773
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts.map +1 -1
- package/dist/indexer/lsp/client.js +40 -15
- package/dist/indexer/lsp/client.js.map +1 -1
- package/dist/indexer/lsp/config.d.ts.map +1 -1
- package/dist/indexer/lsp/config.js +18 -4
- package/dist/indexer/lsp/config.js.map +1 -1
- package/dist/indexer/lsp/enrichment.d.ts +2 -0
- package/dist/indexer/lsp/enrichment.d.ts.map +1 -1
- package/dist/indexer/lsp/enrichment.js +67 -33
- package/dist/indexer/lsp/enrichment.js.map +1 -1
- package/dist/indexer/pipeline.d.ts +137 -0
- package/dist/indexer/pipeline.d.ts.map +1 -0
- package/dist/indexer/pipeline.js +84 -0
- package/dist/indexer/pipeline.js.map +1 -0
- package/dist/indexer/poller.d.ts +8 -0
- package/dist/indexer/poller.d.ts.map +1 -1
- package/dist/indexer/poller.js +3 -1
- package/dist/indexer/poller.js.map +1 -1
- package/dist/indexer/resolution-method.d.ts +40 -0
- package/dist/indexer/resolution-method.d.ts.map +1 -0
- package/dist/indexer/resolution-method.js +53 -0
- package/dist/indexer/resolution-method.js.map +1 -0
- package/dist/indexer/resolver.d.ts.map +1 -1
- package/dist/indexer/resolver.js +8 -4
- package/dist/indexer/resolver.js.map +1 -1
- package/dist/indexer/stages/dependency-api.d.ts +18 -0
- package/dist/indexer/stages/dependency-api.d.ts.map +1 -0
- package/dist/indexer/stages/dependency-api.js +174 -0
- package/dist/indexer/stages/dependency-api.js.map +1 -0
- package/dist/indexer/stages/docs-index.d.ts +20 -0
- package/dist/indexer/stages/docs-index.d.ts.map +1 -0
- package/dist/indexer/stages/docs-index.js +144 -0
- package/dist/indexer/stages/docs-index.js.map +1 -0
- package/dist/indexer/stages/embedding.d.ts +17 -0
- package/dist/indexer/stages/embedding.d.ts.map +1 -0
- package/dist/indexer/stages/embedding.js +217 -0
- package/dist/indexer/stages/embedding.js.map +1 -0
- package/dist/indexer/stages/import-resolution.d.ts +17 -0
- package/dist/indexer/stages/import-resolution.d.ts.map +1 -0
- package/dist/indexer/stages/import-resolution.js +47 -0
- package/dist/indexer/stages/import-resolution.js.map +1 -0
- package/dist/indexer/stages/index.d.ts +12 -0
- package/dist/indexer/stages/index.d.ts.map +1 -0
- package/dist/indexer/stages/index.js +12 -0
- package/dist/indexer/stages/index.js.map +1 -0
- package/dist/indexer/stages/lsp-enrichment.d.ts +48 -0
- package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -0
- package/dist/indexer/stages/lsp-enrichment.js +158 -0
- package/dist/indexer/stages/lsp-enrichment.js.map +1 -0
- package/dist/indexer/stages/source-index.d.ts +31 -0
- package/dist/indexer/stages/source-index.d.ts.map +1 -0
- package/dist/indexer/stages/source-index.js +314 -0
- package/dist/indexer/stages/source-index.js.map +1 -0
- package/dist/indexer/watcher.d.ts +8 -0
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +18 -1
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/lore-server/db.d.ts +51 -4
- package/dist/lore-server/db.d.ts.map +1 -1
- package/dist/lore-server/db.js +102 -93
- package/dist/lore-server/db.js.map +1 -1
- package/dist/lore-server/server.d.ts +5 -0
- package/dist/lore-server/server.d.ts.map +1 -1
- package/dist/lore-server/server.js +52 -273
- package/dist/lore-server/server.js.map +1 -1
- package/dist/lore-server/tool-registry.d.ts +101 -0
- package/dist/lore-server/tool-registry.d.ts.map +1 -0
- package/dist/lore-server/tool-registry.js +227 -0
- package/dist/lore-server/tool-registry.js.map +1 -0
- package/dist/lore-server/tools/graph.d.ts +11 -3
- package/dist/lore-server/tools/graph.d.ts.map +1 -1
- package/dist/lore-server/tools/graph.js +108 -13
- package/dist/lore-server/tools/graph.js.map +1 -1
- package/dist/lore-server/tools/lookup.d.ts +9 -3
- package/dist/lore-server/tools/lookup.d.ts.map +1 -1
- package/dist/lore-server/tools/lookup.js +9 -4
- package/dist/lore-server/tools/lookup.js.map +1 -1
- package/dist/lore-server/tools/notes.d.ts.map +1 -1
- package/dist/lore-server/tools/notes.js +6 -2
- package/dist/lore-server/tools/notes.js.map +1 -1
- package/dist/lore-server/tools/search.d.ts +4 -0
- package/dist/lore-server/tools/search.d.ts.map +1 -1
- package/dist/lore-server/tools/search.js +50 -14
- package/dist/lore-server/tools/search.js.map +1 -1
- package/dist/runtime.d.ts +88 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +153 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +12 -12
|
@@ -1,32 +1,104 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module indexer/extractors/cpp
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* C++ language extractor. Extracts:
|
|
5
|
+
* - Function definitions, class/struct declarations
|
|
6
|
+
* - Preprocessor macro definitions (`preproc_function_def`, `preproc_def`)
|
|
7
|
+
* - `#include` directives
|
|
8
|
+
* - Call-expression references with function-pointer / indirect-call awareness
|
|
6
9
|
*/
|
|
7
|
-
import { emptyResult, findFirst, nodeSignature, walk, } from './types.js';
|
|
10
|
+
import { createTypeRefEmitter, emptyResult, findEnclosingSymbolName, findFirst, nodeSignature, walk, } from './types.js';
|
|
11
|
+
const CPP_SYMBOL_NODE_TYPES = [
|
|
12
|
+
'function_definition',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* AST node types on the "function" child of a `call_expression` that indicate
|
|
16
|
+
* the call goes through a level of indirection (pointer deref, field access,
|
|
17
|
+
* subscript, etc.) rather than naming a function directly.
|
|
18
|
+
*/
|
|
19
|
+
const INDIRECT_CALL_NODE_TYPES = new Set([
|
|
20
|
+
'pointer_expression',
|
|
21
|
+
'parenthesized_expression',
|
|
22
|
+
'subscript_expression',
|
|
23
|
+
]);
|
|
8
24
|
// ─── CppExtractor ─────────────────────────────────────────────────────────────
|
|
9
25
|
export class CppExtractor {
|
|
10
26
|
extract(tree, _source, _filePath) {
|
|
11
27
|
const result = emptyResult();
|
|
28
|
+
/** Track macro names so we can tag call-refs that invoke them. */
|
|
29
|
+
const macroNames = new Set();
|
|
30
|
+
// First pass: collect macro names so the call-ref pass can classify them.
|
|
31
|
+
for (const node of walk(tree.rootNode)) {
|
|
32
|
+
if (node.type === 'preproc_function_def' || node.type === 'preproc_def') {
|
|
33
|
+
const sym = extractMacro(node);
|
|
34
|
+
if (sym) {
|
|
35
|
+
macroNames.add(sym.name);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Main pass: symbols, imports, call-refs, type-refs, relationships.
|
|
12
40
|
for (const node of walk(tree.rootNode)) {
|
|
13
41
|
switch (node.type) {
|
|
14
42
|
case 'function_definition':
|
|
15
43
|
result.symbols.push(extractFunction(node));
|
|
44
|
+
extractCppFunctionTypeRefs(node, result.typeRefs);
|
|
16
45
|
break;
|
|
17
46
|
case 'class_specifier':
|
|
18
47
|
if (node.childForFieldName('name')) {
|
|
19
48
|
result.symbols.push(extractSpecifier(node, 'class'));
|
|
49
|
+
extractBaseClassRelationships(node, result.relationships, result.typeRefs);
|
|
50
|
+
extractCppFieldTypeRefs(node, result.typeRefs);
|
|
20
51
|
}
|
|
21
52
|
break;
|
|
22
53
|
case 'struct_specifier':
|
|
23
54
|
if (node.childForFieldName('name')) {
|
|
24
55
|
result.symbols.push(extractSpecifier(node, 'struct'));
|
|
56
|
+
extractCppFieldTypeRefs(node, result.typeRefs);
|
|
25
57
|
}
|
|
26
58
|
break;
|
|
59
|
+
case 'preproc_function_def':
|
|
60
|
+
case 'preproc_def': {
|
|
61
|
+
const sym = extractMacro(node);
|
|
62
|
+
if (sym)
|
|
63
|
+
result.symbols.push(sym);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
27
66
|
case 'preproc_include':
|
|
28
67
|
result.imports.push(extractInclude(node));
|
|
29
68
|
break;
|
|
69
|
+
case 'call_expression': {
|
|
70
|
+
const ref = extractCallRef(node, macroNames);
|
|
71
|
+
if (ref)
|
|
72
|
+
result.callRefs.push(ref);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case 'declaration': {
|
|
76
|
+
extractCppVariableTypeRefs(node, result.typeRefs);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'cast_expression': {
|
|
80
|
+
extractCppCastTypeRef(node, result.typeRefs);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case 'static_cast_expression':
|
|
84
|
+
case 'dynamic_cast_expression':
|
|
85
|
+
case 'reinterpret_cast_expression':
|
|
86
|
+
case 'const_cast_expression': {
|
|
87
|
+
extractCppNamedCastTypeRef(node, result.typeRefs);
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case 'sizeof_expression': {
|
|
91
|
+
extractCppSizeofTypeRef(node, result.typeRefs, 'sizeof');
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'alignof_expression': {
|
|
95
|
+
extractCppSizeofTypeRef(node, result.typeRefs, 'other');
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case 'sizeof_pack_expression': {
|
|
99
|
+
extractCppSizeofTypeRef(node, result.typeRefs, 'sizeof');
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
30
102
|
}
|
|
31
103
|
}
|
|
32
104
|
return result;
|
|
@@ -75,10 +147,284 @@ function extractSpecifier(node, kind) {
|
|
|
75
147
|
signature: nodeSignature(node),
|
|
76
148
|
};
|
|
77
149
|
}
|
|
150
|
+
// ─── Macro extraction ─────────────────────────────────────────────────────────
|
|
151
|
+
/**
|
|
152
|
+
* Extracts a `RawSymbol` with `kind: 'macro'` from `preproc_function_def`
|
|
153
|
+
* (function-like macros) and `preproc_def` (object-like macros).
|
|
154
|
+
*/
|
|
155
|
+
function extractMacro(node) {
|
|
156
|
+
const nameNode = node.childForFieldName('name');
|
|
157
|
+
if (!nameNode)
|
|
158
|
+
return null;
|
|
159
|
+
return {
|
|
160
|
+
name: nameNode.text,
|
|
161
|
+
kind: 'macro',
|
|
162
|
+
startLine: node.startPosition.row,
|
|
163
|
+
endLine: node.endPosition.row,
|
|
164
|
+
signature: node.text.split('\n')[0]?.trim() ?? '',
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ─── Call-ref extraction with indirection awareness ───────────────────────────
|
|
168
|
+
/**
|
|
169
|
+
* Classifies and extracts a `RawCallRef` from a `call_expression` node.
|
|
170
|
+
*
|
|
171
|
+
* Classification logic:
|
|
172
|
+
* 1. If the callee name matches a known macro → `callKind: 'macro'`.
|
|
173
|
+
* 2. If the function child is an `identifier` or `qualified_identifier`
|
|
174
|
+
* (possibly behind a `field_expression`) → `callKind: 'direct'`.
|
|
175
|
+
* 3. If the function child is a `pointer_expression`, `parenthesized_expression`,
|
|
176
|
+
* or `subscript_expression` → `callKind: 'indirect'`, `isIndirect: true`,
|
|
177
|
+
* with `calleeRaw` set to the innermost dereferenced identifier.
|
|
178
|
+
*/
|
|
179
|
+
function extractCallRef(node, macroNames) {
|
|
180
|
+
const fnNode = node.childForFieldName('function');
|
|
181
|
+
if (!fnNode)
|
|
182
|
+
return null;
|
|
183
|
+
const callerSymbol = findEnclosingSymbolName(node, CPP_SYMBOL_NODE_TYPES);
|
|
184
|
+
const line = node.startPosition.row;
|
|
185
|
+
const character = node.startPosition.column;
|
|
186
|
+
// Resolve the innermost callee name and determine indirection.
|
|
187
|
+
const { calleeName, isIndirect, callKind } = classifyCallee(fnNode, macroNames);
|
|
188
|
+
return {
|
|
189
|
+
callerSymbol,
|
|
190
|
+
calleeRaw: calleeName,
|
|
191
|
+
line,
|
|
192
|
+
character,
|
|
193
|
+
callKind,
|
|
194
|
+
isIndirect,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Walks the function-position subtree of a `call_expression` to extract the
|
|
199
|
+
* callee name and classify the call kind.
|
|
200
|
+
*/
|
|
201
|
+
function classifyCallee(fnNode, macroNames) {
|
|
202
|
+
// Direct identifier: foo(...)
|
|
203
|
+
if (fnNode.type === 'identifier') {
|
|
204
|
+
const name = fnNode.text;
|
|
205
|
+
if (macroNames.has(name)) {
|
|
206
|
+
return { calleeName: name, isIndirect: false, callKind: 'macro' };
|
|
207
|
+
}
|
|
208
|
+
return { calleeName: name, isIndirect: false, callKind: 'direct' };
|
|
209
|
+
}
|
|
210
|
+
// Qualified identifier: std::sort(...) / Foo::bar(...)
|
|
211
|
+
if (fnNode.type === 'qualified_identifier') {
|
|
212
|
+
const name = fnNode.text;
|
|
213
|
+
return { calleeName: name, isIndirect: false, callKind: 'direct' };
|
|
214
|
+
}
|
|
215
|
+
// Field expression: obj.method(...) / ptr->method(...)
|
|
216
|
+
if (fnNode.type === 'field_expression') {
|
|
217
|
+
return { calleeName: fnNode.text, isIndirect: false, callKind: 'direct' };
|
|
218
|
+
}
|
|
219
|
+
// Indirect calls through pointer deref, parens, or subscript:
|
|
220
|
+
// (*callback)(...) / (fnTable[i])(...) / (get_fn())(...)
|
|
221
|
+
if (INDIRECT_CALL_NODE_TYPES.has(fnNode.type)) {
|
|
222
|
+
const innerName = extractInnermostIdentifier(fnNode);
|
|
223
|
+
return {
|
|
224
|
+
calleeName: innerName ?? fnNode.text,
|
|
225
|
+
isIndirect: true,
|
|
226
|
+
callKind: 'indirect',
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// template_function: std::invoke<>(...), etc.
|
|
230
|
+
if (fnNode.type === 'template_function') {
|
|
231
|
+
const nameChild = fnNode.childForFieldName('name');
|
|
232
|
+
const name = nameChild?.text ?? fnNode.text;
|
|
233
|
+
return { calleeName: name, isIndirect: false, callKind: 'direct' };
|
|
234
|
+
}
|
|
235
|
+
// Fallback: use the raw text and mark direct.
|
|
236
|
+
return { calleeName: fnNode.text, isIndirect: false, callKind: 'direct' };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Walks into pointer/parenthesised/subscript wrappers to find the innermost
|
|
240
|
+
* identifier being dereferenced.
|
|
241
|
+
*
|
|
242
|
+
* Examples:
|
|
243
|
+
* - `(*callback)` → `callback`
|
|
244
|
+
* - `(fnTable[i])` → `fnTable`
|
|
245
|
+
* - `(*obj->fn_ptr)` → `obj->fn_ptr`
|
|
246
|
+
*/
|
|
247
|
+
function extractInnermostIdentifier(node) {
|
|
248
|
+
let current = node;
|
|
249
|
+
while (current) {
|
|
250
|
+
if (current.type === 'identifier')
|
|
251
|
+
return current.text;
|
|
252
|
+
if (current.type === 'qualified_identifier')
|
|
253
|
+
return current.text;
|
|
254
|
+
if (current.type === 'field_expression') {
|
|
255
|
+
// Keep the full field expression (e.g. obj->fn_ptr)
|
|
256
|
+
return current.text;
|
|
257
|
+
}
|
|
258
|
+
// pointer_expression: skip the `*` operator and look at the argument
|
|
259
|
+
if (current.type === 'pointer_expression') {
|
|
260
|
+
const arg = current.childForFieldName('argument') ?? current.namedChildren[current.namedChildren.length - 1] ?? null;
|
|
261
|
+
if (arg && arg !== current) {
|
|
262
|
+
current = arg;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// parenthesized_expression: unwrap the parens
|
|
267
|
+
if (current.type === 'parenthesized_expression') {
|
|
268
|
+
const inner = current.namedChildren[0] ?? null;
|
|
269
|
+
if (inner && inner !== current) {
|
|
270
|
+
current = inner;
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// subscript_expression: take the argument (the array base)
|
|
275
|
+
if (current.type === 'subscript_expression') {
|
|
276
|
+
const arg = current.childForFieldName('argument') ?? current.namedChildren[0] ?? null;
|
|
277
|
+
if (arg && arg !== current) {
|
|
278
|
+
current = arg;
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
78
286
|
function extractInclude(node) {
|
|
79
287
|
const pathNode = node.childForFieldName('path') ?? node.namedChildren[0] ?? null;
|
|
80
288
|
const raw = pathNode?.text ?? '';
|
|
81
289
|
const source = raw.replace(/^["<]|[">]$/g, '');
|
|
82
290
|
return { source, importedNames: [] };
|
|
83
291
|
}
|
|
292
|
+
// ─── Relationship extraction ──────────────────────────────────────────────────
|
|
293
|
+
function extractBaseClassRelationships(classNode, relationships, typeRefs) {
|
|
294
|
+
const className = classNode.childForFieldName('name')?.text ?? '';
|
|
295
|
+
if (!className)
|
|
296
|
+
return;
|
|
297
|
+
// Look for base_class_clause nodes
|
|
298
|
+
for (const child of classNode.namedChildren) {
|
|
299
|
+
if (child.type === 'base_class_clause') {
|
|
300
|
+
for (const base of child.namedChildren) {
|
|
301
|
+
if (base.type === 'type_identifier' || base.type === 'qualified_identifier' || base.type === 'template_type') {
|
|
302
|
+
const baseName = base.type === 'template_type'
|
|
303
|
+
? (base.childForFieldName('name')?.text ?? base.text)
|
|
304
|
+
: base.text;
|
|
305
|
+
relationships.push({
|
|
306
|
+
kind: 'extends',
|
|
307
|
+
fromSymbol: className,
|
|
308
|
+
toSymbol: baseName,
|
|
309
|
+
line: base.startPosition.row,
|
|
310
|
+
character: base.startPosition.column,
|
|
311
|
+
});
|
|
312
|
+
typeRefs.push({
|
|
313
|
+
enclosingSymbol: className,
|
|
314
|
+
typeRaw: baseName,
|
|
315
|
+
refKind: 'bound',
|
|
316
|
+
line: base.startPosition.row,
|
|
317
|
+
character: base.startPosition.column,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// ─── Type-ref extraction ──────────────────────────────────────────────────────
|
|
325
|
+
function extractCppTypeName(typeNode) {
|
|
326
|
+
if (typeNode.type === 'type_identifier' || typeNode.type === 'qualified_identifier')
|
|
327
|
+
return typeNode.text;
|
|
328
|
+
if (typeNode.type === 'template_type')
|
|
329
|
+
return typeNode.text;
|
|
330
|
+
if (typeNode.type === 'sized_type_specifier')
|
|
331
|
+
return typeNode.text;
|
|
332
|
+
for (const child of typeNode.namedChildren) {
|
|
333
|
+
const name = extractCppTypeName(child);
|
|
334
|
+
if (name)
|
|
335
|
+
return name;
|
|
336
|
+
}
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
const emitCppTypeRef = createTypeRefEmitter({
|
|
340
|
+
extractTypeName: extractCppTypeName,
|
|
341
|
+
genericNodeType: 'template_type',
|
|
342
|
+
argListNodeType: 'template_argument_list',
|
|
343
|
+
});
|
|
344
|
+
function extractCppFunctionTypeRefs(funcNode, refs) {
|
|
345
|
+
const declarator = funcNode.childForFieldName('declarator');
|
|
346
|
+
const funcName = declarator ? extractDeclaratorName(declarator) : '';
|
|
347
|
+
// Return type
|
|
348
|
+
const typeNode = funcNode.childForFieldName('type');
|
|
349
|
+
if (typeNode) {
|
|
350
|
+
emitCppTypeRef(refs, funcName, typeNode, 'return');
|
|
351
|
+
}
|
|
352
|
+
// Parameters
|
|
353
|
+
if (declarator) {
|
|
354
|
+
const funcDecl = findCppFuncDeclarator(declarator);
|
|
355
|
+
if (funcDecl) {
|
|
356
|
+
const params = funcDecl.childForFieldName('parameters');
|
|
357
|
+
if (params) {
|
|
358
|
+
for (const param of params.namedChildren) {
|
|
359
|
+
if (param.type === 'parameter_declaration') {
|
|
360
|
+
const paramType = param.childForFieldName('type');
|
|
361
|
+
if (paramType) {
|
|
362
|
+
emitCppTypeRef(refs, funcName, paramType, 'parameter');
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
function findCppFuncDeclarator(node) {
|
|
371
|
+
if (node.type === 'function_declarator')
|
|
372
|
+
return node;
|
|
373
|
+
for (const child of node.namedChildren) {
|
|
374
|
+
const found = findCppFuncDeclarator(child);
|
|
375
|
+
if (found)
|
|
376
|
+
return found;
|
|
377
|
+
}
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
function extractCppFieldTypeRefs(classNode, refs) {
|
|
381
|
+
const className = classNode.childForFieldName('name')?.text ?? '';
|
|
382
|
+
const body = classNode.childForFieldName('body');
|
|
383
|
+
if (!body)
|
|
384
|
+
return;
|
|
385
|
+
for (const child of body.namedChildren) {
|
|
386
|
+
if (child.type === 'field_declaration') {
|
|
387
|
+
const typeNode = child.childForFieldName('type');
|
|
388
|
+
if (typeNode)
|
|
389
|
+
emitCppTypeRef(refs, className, typeNode, 'field');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
function extractCppVariableTypeRefs(declNode, refs) {
|
|
394
|
+
const typeNode = declNode.childForFieldName('type');
|
|
395
|
+
if (!typeNode)
|
|
396
|
+
return;
|
|
397
|
+
const typeName = extractCppTypeName(typeNode);
|
|
398
|
+
if (!typeName)
|
|
399
|
+
return;
|
|
400
|
+
const enclosing = findEnclosingSymbolName(declNode, CPP_SYMBOL_NODE_TYPES);
|
|
401
|
+
emitCppTypeRef(refs, enclosing, typeNode, 'variable');
|
|
402
|
+
}
|
|
403
|
+
function extractCppCastTypeRef(node, refs) {
|
|
404
|
+
// C-style cast: (Type)expr
|
|
405
|
+
const typeNode = node.childForFieldName('type');
|
|
406
|
+
if (!typeNode)
|
|
407
|
+
return;
|
|
408
|
+
const enclosing = findEnclosingSymbolName(node, CPP_SYMBOL_NODE_TYPES);
|
|
409
|
+
emitCppTypeRef(refs, enclosing, typeNode, 'cast');
|
|
410
|
+
}
|
|
411
|
+
function extractCppNamedCastTypeRef(node, refs) {
|
|
412
|
+
// static_cast<Type>(expr), dynamic_cast<Type>(expr), etc.
|
|
413
|
+
const typeNode = node.childForFieldName('type');
|
|
414
|
+
if (!typeNode)
|
|
415
|
+
return;
|
|
416
|
+
const enclosing = findEnclosingSymbolName(node, CPP_SYMBOL_NODE_TYPES);
|
|
417
|
+
emitCppTypeRef(refs, enclosing, typeNode, 'cast');
|
|
418
|
+
}
|
|
419
|
+
function extractCppSizeofTypeRef(node, refs, refKind) {
|
|
420
|
+
// sizeof(Type), alignof(Type), sizeof...(Pack)
|
|
421
|
+
const valueNode = node.childForFieldName('value') ?? node.childForFieldName('type');
|
|
422
|
+
if (valueNode) {
|
|
423
|
+
const typeName = extractCppTypeName(valueNode);
|
|
424
|
+
if (typeName) {
|
|
425
|
+
const enclosing = findEnclosingSymbolName(node, CPP_SYMBOL_NODE_TYPES);
|
|
426
|
+
emitCppTypeRef(refs, enclosing, valueNode, refKind);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
84
430
|
//# sourceMappingURL=cpp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../src/indexer/extractors/cpp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../src/indexer/extractors/cpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/csharp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../src/indexer/extractors/csharp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,KAAK,gBAAgB,EAOrB,KAAK,eAAe,EAMrB,MAAM,YAAY,CAAC;AAUpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA2DjF"}
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
* P2/P3 C# language extractor. Extracts class declarations, interface
|
|
5
5
|
* declarations, method declarations, and using directives.
|
|
6
6
|
*/
|
|
7
|
-
import { emptyResult, nodeSignature, walk, } from './types.js';
|
|
7
|
+
import { createTypeRefEmitter, emptyResult, findEnclosingSymbolName, nodeSignature, walk, } from './types.js';
|
|
8
|
+
const CS_SYMBOL_NODE_TYPES = [
|
|
9
|
+
'method_declaration',
|
|
10
|
+
'constructor_declaration',
|
|
11
|
+
'class_declaration',
|
|
12
|
+
];
|
|
8
13
|
// ─── CSharpExtractor ──────────────────────────────────────────────────────────
|
|
9
14
|
export class CSharpExtractor {
|
|
10
15
|
extract(tree, _source, _filePath) {
|
|
@@ -13,22 +18,55 @@ export class CSharpExtractor {
|
|
|
13
18
|
switch (node.type) {
|
|
14
19
|
case 'class_declaration':
|
|
15
20
|
result.symbols.push(extractNamedNode(node, 'class'));
|
|
21
|
+
extractCsBaseListRelationships(node, 'class', result.relationships, result.typeRefs);
|
|
22
|
+
extractCsFieldTypeRefs(node, result.typeRefs);
|
|
16
23
|
break;
|
|
17
24
|
case 'interface_declaration':
|
|
18
25
|
result.symbols.push(extractNamedNode(node, 'interface'));
|
|
26
|
+
extractCsBaseListRelationships(node, 'interface', result.relationships, result.typeRefs);
|
|
19
27
|
break;
|
|
20
28
|
case 'struct_declaration':
|
|
21
29
|
result.symbols.push(extractNamedNode(node, 'struct'));
|
|
30
|
+
extractCsBaseListRelationships(node, 'struct', result.relationships, result.typeRefs);
|
|
22
31
|
break;
|
|
23
32
|
case 'enum_declaration':
|
|
24
33
|
result.symbols.push(extractNamedNode(node, 'enum'));
|
|
25
34
|
break;
|
|
26
35
|
case 'method_declaration':
|
|
27
36
|
result.symbols.push(extractMethod(node));
|
|
37
|
+
extractCsMethodTypeRefs(node, result.typeRefs);
|
|
38
|
+
break;
|
|
39
|
+
case 'constructor_declaration':
|
|
40
|
+
result.symbols.push(extractMethod(node));
|
|
41
|
+
extractCsMethodTypeRefs(node, result.typeRefs);
|
|
28
42
|
break;
|
|
29
43
|
case 'using_directive':
|
|
30
44
|
result.imports.push(extractUsingDirective(node));
|
|
31
45
|
break;
|
|
46
|
+
case 'invocation_expression': {
|
|
47
|
+
const ref = extractCallRef(node);
|
|
48
|
+
if (ref)
|
|
49
|
+
result.callRefs.push(ref);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case 'object_creation_expression': {
|
|
53
|
+
const ref = extractNewCallRef(node);
|
|
54
|
+
if (ref)
|
|
55
|
+
result.callRefs.push(ref);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'variable_declaration': {
|
|
59
|
+
extractCsVariableTypeRefs(node, result.typeRefs);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'cast_expression': {
|
|
63
|
+
extractCsCastTypeRef(node, result.typeRefs);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'as_expression': {
|
|
67
|
+
extractCsAsCastTypeRef(node, result.typeRefs);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
32
70
|
}
|
|
33
71
|
}
|
|
34
72
|
return result;
|
|
@@ -55,6 +93,28 @@ function extractMethod(node) {
|
|
|
55
93
|
signature: nodeSignature(node),
|
|
56
94
|
};
|
|
57
95
|
}
|
|
96
|
+
function extractCallRef(node) {
|
|
97
|
+
const fnNode = node.childForFieldName('function');
|
|
98
|
+
if (!fnNode)
|
|
99
|
+
return null;
|
|
100
|
+
return {
|
|
101
|
+
callerSymbol: findEnclosingSymbolName(node, CS_SYMBOL_NODE_TYPES),
|
|
102
|
+
calleeRaw: fnNode.text,
|
|
103
|
+
line: node.startPosition.row,
|
|
104
|
+
character: node.startPosition.column,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function extractNewCallRef(node) {
|
|
108
|
+
const typeNode = node.childForFieldName('type');
|
|
109
|
+
if (!typeNode)
|
|
110
|
+
return null;
|
|
111
|
+
return {
|
|
112
|
+
callerSymbol: findEnclosingSymbolName(node, CS_SYMBOL_NODE_TYPES),
|
|
113
|
+
calleeRaw: `new ${typeNode.text}`,
|
|
114
|
+
line: node.startPosition.row,
|
|
115
|
+
character: node.startPosition.column,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
58
118
|
function extractUsingDirective(node) {
|
|
59
119
|
// `using System.Collections.Generic;` or `using alias = Namespace;`
|
|
60
120
|
const text = node.text
|
|
@@ -76,4 +136,109 @@ function extractUsingDirective(node) {
|
|
|
76
136
|
}
|
|
77
137
|
return { source, importedNames };
|
|
78
138
|
}
|
|
139
|
+
// ─── Relationship extraction ──────────────────────────────────────────────────
|
|
140
|
+
function extractCsBaseListRelationships(node, declKind, relationships, typeRefs) {
|
|
141
|
+
const name = node.childForFieldName('name')?.text ?? '';
|
|
142
|
+
if (!name)
|
|
143
|
+
return;
|
|
144
|
+
const baseList = node.namedChildren.find(c => c.type === 'base_list');
|
|
145
|
+
if (!baseList)
|
|
146
|
+
return;
|
|
147
|
+
for (const child of baseList.namedChildren) {
|
|
148
|
+
if (child.type === 'identifier' || child.type === 'generic_name' || child.type === 'qualified_name') {
|
|
149
|
+
const baseName = child.text;
|
|
150
|
+
// In C#, there is no syntactic distinction between a base class and an
|
|
151
|
+
// implemented interface in the base list. For interfaces and structs all
|
|
152
|
+
// entries are always `implements`. For classes we conservatively default
|
|
153
|
+
// to `implements` since we can't distinguish class-from-interface without
|
|
154
|
+
// semantic analysis and interface-only base lists are very common.
|
|
155
|
+
const kind = declKind === 'interface' ? 'extends' : 'implements';
|
|
156
|
+
relationships.push({ kind, fromSymbol: name, toSymbol: baseName, line: child.startPosition.row, character: child.startPosition.column });
|
|
157
|
+
typeRefs.push({ enclosingSymbol: name, typeRaw: baseName, refKind: 'bound', line: child.startPosition.row, character: child.startPosition.column });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// ─── Type-ref extraction ──────────────────────────────────────────────────────
|
|
162
|
+
function extractCsTypeName(typeNode) {
|
|
163
|
+
if (typeNode.type === 'identifier' || typeNode.type === 'qualified_name' || typeNode.type === 'generic_name')
|
|
164
|
+
return typeNode.text;
|
|
165
|
+
if (typeNode.type === 'predefined_type')
|
|
166
|
+
return typeNode.text;
|
|
167
|
+
if (typeNode.type === 'nullable_type' || typeNode.type === 'array_type') {
|
|
168
|
+
const inner = typeNode.namedChildren[0];
|
|
169
|
+
return inner ? extractCsTypeName(inner) : null;
|
|
170
|
+
}
|
|
171
|
+
for (const child of typeNode.namedChildren) {
|
|
172
|
+
const name = extractCsTypeName(child);
|
|
173
|
+
if (name)
|
|
174
|
+
return name;
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const emitCsTypeRef = createTypeRefEmitter({
|
|
179
|
+
extractTypeName: extractCsTypeName,
|
|
180
|
+
genericNodeType: 'generic_name',
|
|
181
|
+
argListNodeType: 'type_argument_list',
|
|
182
|
+
});
|
|
183
|
+
function extractCsMethodTypeRefs(methodNode, refs) {
|
|
184
|
+
const methodName = methodNode.childForFieldName('name')?.text ?? '';
|
|
185
|
+
// Return type
|
|
186
|
+
const returnType = methodNode.childForFieldName('type');
|
|
187
|
+
if (returnType)
|
|
188
|
+
emitCsTypeRef(refs, methodName, returnType, 'return');
|
|
189
|
+
// Parameters
|
|
190
|
+
const params = methodNode.childForFieldName('parameters');
|
|
191
|
+
if (params) {
|
|
192
|
+
for (const param of params.namedChildren) {
|
|
193
|
+
if (param.type === 'parameter') {
|
|
194
|
+
const typeNode = param.childForFieldName('type');
|
|
195
|
+
if (typeNode)
|
|
196
|
+
emitCsTypeRef(refs, methodName, typeNode, 'parameter');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function extractCsFieldTypeRefs(classNode, refs) {
|
|
202
|
+
const className = classNode.childForFieldName('name')?.text ?? '';
|
|
203
|
+
const body = classNode.childForFieldName('body');
|
|
204
|
+
if (!body)
|
|
205
|
+
return;
|
|
206
|
+
for (const child of body.namedChildren) {
|
|
207
|
+
if (child.type === 'field_declaration') {
|
|
208
|
+
const decl = child.namedChildren.find(c => c.type === 'variable_declaration');
|
|
209
|
+
if (decl) {
|
|
210
|
+
const typeNode = decl.childForFieldName('type');
|
|
211
|
+
if (typeNode)
|
|
212
|
+
emitCsTypeRef(refs, className, typeNode, 'field');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function extractCsVariableTypeRefs(varDeclNode, refs) {
|
|
218
|
+
const typeNode = varDeclNode.childForFieldName('type');
|
|
219
|
+
if (!typeNode)
|
|
220
|
+
return;
|
|
221
|
+
const typeName = extractCsTypeName(typeNode);
|
|
222
|
+
if (!typeName)
|
|
223
|
+
return;
|
|
224
|
+
const enclosing = findEnclosingSymbolName(varDeclNode, CS_SYMBOL_NODE_TYPES);
|
|
225
|
+
emitCsTypeRef(refs, enclosing, typeNode, 'variable');
|
|
226
|
+
}
|
|
227
|
+
function extractCsCastTypeRef(node, refs) {
|
|
228
|
+
// (Type)expr
|
|
229
|
+
const typeNode = node.childForFieldName('type');
|
|
230
|
+
if (!typeNode)
|
|
231
|
+
return;
|
|
232
|
+
const enclosing = findEnclosingSymbolName(node, CS_SYMBOL_NODE_TYPES);
|
|
233
|
+
emitCsTypeRef(refs, enclosing, typeNode, 'cast');
|
|
234
|
+
}
|
|
235
|
+
function extractCsAsCastTypeRef(node, refs) {
|
|
236
|
+
// expr as Type — the type is the *last* matching child (first is the expression)
|
|
237
|
+
const candidates = node.namedChildren.filter(c => c.type === 'identifier' || c.type === 'generic_name' || c.type === 'qualified_name' || c.type === 'nullable_type');
|
|
238
|
+
const typeNode = candidates[candidates.length - 1];
|
|
239
|
+
if (!typeNode)
|
|
240
|
+
return;
|
|
241
|
+
const enclosing = findEnclosingSymbolName(node, CS_SYMBOL_NODE_TYPES);
|
|
242
|
+
emitCsTypeRef(refs, enclosing, typeNode, 'cast');
|
|
243
|
+
}
|
|
79
244
|
//# sourceMappingURL=csharp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../../src/indexer/extractors/csharp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../../src/indexer/extractors/csharp.ts"],"names":[],"mappings":"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"}
|