@jafreck/lore 0.2.4 → 0.2.5

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.
Files changed (141) hide show
  1. package/README.md +22 -13
  2. package/dist/cli.js +81 -14
  3. package/dist/cli.js.map +1 -1
  4. package/dist/indexer/call-graph.d.ts +24 -7
  5. package/dist/indexer/call-graph.d.ts.map +1 -1
  6. package/dist/indexer/call-graph.js +154 -22
  7. package/dist/indexer/call-graph.js.map +1 -1
  8. package/dist/indexer/config-parser.js +6 -1
  9. package/dist/indexer/config-parser.js.map +1 -1
  10. package/dist/indexer/coverage.js +3 -1
  11. package/dist/indexer/coverage.js.map +1 -1
  12. package/dist/indexer/db.d.ts.map +1 -1
  13. package/dist/indexer/db.js +43 -0
  14. package/dist/indexer/db.js.map +1 -1
  15. package/dist/indexer/docs.d.ts.map +1 -1
  16. package/dist/indexer/docs.js +4 -0
  17. package/dist/indexer/docs.js.map +1 -1
  18. package/dist/indexer/embedder.d.ts.map +1 -1
  19. package/dist/indexer/embedder.js +5 -0
  20. package/dist/indexer/embedder.js.map +1 -1
  21. package/dist/indexer/extractors/bash.d.ts.map +1 -1
  22. package/dist/indexer/extractors/bash.js +29 -1
  23. package/dist/indexer/extractors/bash.js.map +1 -1
  24. package/dist/indexer/extractors/c.d.ts +5 -2
  25. package/dist/indexer/extractors/c.d.ts.map +1 -1
  26. package/dist/indexer/extractors/c.js +277 -8
  27. package/dist/indexer/extractors/c.js.map +1 -1
  28. package/dist/indexer/extractors/cpp.d.ts +5 -2
  29. package/dist/indexer/extractors/cpp.d.ts.map +1 -1
  30. package/dist/indexer/extractors/cpp.js +349 -3
  31. package/dist/indexer/extractors/cpp.js.map +1 -1
  32. package/dist/indexer/extractors/csharp.d.ts.map +1 -1
  33. package/dist/indexer/extractors/csharp.js +166 -1
  34. package/dist/indexer/extractors/csharp.js.map +1 -1
  35. package/dist/indexer/extractors/dart.d.ts.map +1 -1
  36. package/dist/indexer/extractors/dart.js +134 -1
  37. package/dist/indexer/extractors/dart.js.map +1 -1
  38. package/dist/indexer/extractors/elixir.d.ts.map +1 -1
  39. package/dist/indexer/extractors/elixir.js +45 -0
  40. package/dist/indexer/extractors/elixir.js.map +1 -1
  41. package/dist/indexer/extractors/elm.d.ts.map +1 -1
  42. package/dist/indexer/extractors/elm.js +33 -0
  43. package/dist/indexer/extractors/elm.js.map +1 -1
  44. package/dist/indexer/extractors/go.d.ts.map +1 -1
  45. package/dist/indexer/extractors/go.js +206 -1
  46. package/dist/indexer/extractors/go.js.map +1 -1
  47. package/dist/indexer/extractors/haskell.d.ts.map +1 -1
  48. package/dist/indexer/extractors/haskell.js +29 -0
  49. package/dist/indexer/extractors/haskell.js.map +1 -1
  50. package/dist/indexer/extractors/java.d.ts.map +1 -1
  51. package/dist/indexer/extractors/java.js +170 -1
  52. package/dist/indexer/extractors/java.js.map +1 -1
  53. package/dist/indexer/extractors/javascript.d.ts.map +1 -1
  54. package/dist/indexer/extractors/javascript.js +24 -2
  55. package/dist/indexer/extractors/javascript.js.map +1 -1
  56. package/dist/indexer/extractors/julia.d.ts.map +1 -1
  57. package/dist/indexer/extractors/julia.js +23 -1
  58. package/dist/indexer/extractors/julia.js.map +1 -1
  59. package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
  60. package/dist/indexer/extractors/kotlin.js +122 -1
  61. package/dist/indexer/extractors/kotlin.js.map +1 -1
  62. package/dist/indexer/extractors/lua.d.ts.map +1 -1
  63. package/dist/indexer/extractors/lua.js +19 -1
  64. package/dist/indexer/extractors/lua.js.map +1 -1
  65. package/dist/indexer/extractors/objc.d.ts.map +1 -1
  66. package/dist/indexer/extractors/objc.js +171 -1
  67. package/dist/indexer/extractors/objc.js.map +1 -1
  68. package/dist/indexer/extractors/ocaml.d.ts.map +1 -1
  69. package/dist/indexer/extractors/ocaml.js +29 -0
  70. package/dist/indexer/extractors/ocaml.js.map +1 -1
  71. package/dist/indexer/extractors/php.d.ts.map +1 -1
  72. package/dist/indexer/extractors/php.js +133 -1
  73. package/dist/indexer/extractors/php.js.map +1 -1
  74. package/dist/indexer/extractors/python.d.ts.map +1 -1
  75. package/dist/indexer/extractors/python.js +24 -3
  76. package/dist/indexer/extractors/python.js.map +1 -1
  77. package/dist/indexer/extractors/ruby.d.ts.map +1 -1
  78. package/dist/indexer/extractors/ruby.js +23 -1
  79. package/dist/indexer/extractors/ruby.js.map +1 -1
  80. package/dist/indexer/extractors/rust.d.ts.map +1 -1
  81. package/dist/indexer/extractors/rust.js +139 -2
  82. package/dist/indexer/extractors/rust.js.map +1 -1
  83. package/dist/indexer/extractors/scala.d.ts.map +1 -1
  84. package/dist/indexer/extractors/scala.js +24 -1
  85. package/dist/indexer/extractors/scala.js.map +1 -1
  86. package/dist/indexer/extractors/swift.d.ts.map +1 -1
  87. package/dist/indexer/extractors/swift.js +129 -1
  88. package/dist/indexer/extractors/swift.js.map +1 -1
  89. package/dist/indexer/extractors/types.d.ts +78 -2
  90. package/dist/indexer/extractors/types.d.ts.map +1 -1
  91. package/dist/indexer/extractors/types.js +167 -8
  92. package/dist/indexer/extractors/types.js.map +1 -1
  93. package/dist/indexer/extractors/typescript.d.ts.map +1 -1
  94. package/dist/indexer/extractors/typescript.js +217 -1
  95. package/dist/indexer/extractors/typescript.js.map +1 -1
  96. package/dist/indexer/extractors/zig.d.ts.map +1 -1
  97. package/dist/indexer/extractors/zig.js +30 -0
  98. package/dist/indexer/extractors/zig.js.map +1 -1
  99. package/dist/indexer/git-history.d.ts.map +1 -1
  100. package/dist/indexer/git-history.js +4 -8
  101. package/dist/indexer/git-history.js.map +1 -1
  102. package/dist/indexer/git-hooks.js +1 -1
  103. package/dist/indexer/git-hooks.js.map +1 -1
  104. package/dist/indexer/index.d.ts +24 -1
  105. package/dist/indexer/index.d.ts.map +1 -1
  106. package/dist/indexer/index.js +199 -68
  107. package/dist/indexer/index.js.map +1 -1
  108. package/dist/indexer/lsp/client.d.ts.map +1 -1
  109. package/dist/indexer/lsp/client.js +40 -15
  110. package/dist/indexer/lsp/client.js.map +1 -1
  111. package/dist/indexer/lsp/config.d.ts.map +1 -1
  112. package/dist/indexer/lsp/config.js +18 -4
  113. package/dist/indexer/lsp/config.js.map +1 -1
  114. package/dist/indexer/poller.d.ts +8 -0
  115. package/dist/indexer/poller.d.ts.map +1 -1
  116. package/dist/indexer/poller.js +3 -1
  117. package/dist/indexer/poller.js.map +1 -1
  118. package/dist/indexer/resolver.d.ts.map +1 -1
  119. package/dist/indexer/resolver.js +8 -4
  120. package/dist/indexer/resolver.js.map +1 -1
  121. package/dist/indexer/watcher.d.ts +8 -0
  122. package/dist/indexer/watcher.d.ts.map +1 -1
  123. package/dist/indexer/watcher.js +18 -1
  124. package/dist/indexer/watcher.js.map +1 -1
  125. package/dist/lore-server/db.d.ts.map +1 -1
  126. package/dist/lore-server/db.js +28 -24
  127. package/dist/lore-server/db.js.map +1 -1
  128. package/dist/lore-server/server.d.ts.map +1 -1
  129. package/dist/lore-server/server.js +12 -51
  130. package/dist/lore-server/server.js.map +1 -1
  131. package/dist/lore-server/tools/graph.d.ts +4 -3
  132. package/dist/lore-server/tools/graph.d.ts.map +1 -1
  133. package/dist/lore-server/tools/graph.js +48 -10
  134. package/dist/lore-server/tools/graph.js.map +1 -1
  135. package/dist/lore-server/tools/notes.d.ts.map +1 -1
  136. package/dist/lore-server/tools/notes.js +6 -2
  137. package/dist/lore-server/tools/notes.js.map +1 -1
  138. package/dist/lore-server/tools/search.d.ts.map +1 -1
  139. package/dist/lore-server/tools/search.js +46 -14
  140. package/dist/lore-server/tools/search.js.map +1 -1
  141. package/package.json +2 -2
@@ -1,32 +1,104 @@
1
1
  /**
2
2
  * @module indexer/extractors/cpp
3
3
  *
4
- * P1 C++ language extractor. Extracts function definitions, class/struct
5
- * declarations, and #include directives.
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,EAGrB,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;CA4BjF"}
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,EAKL,WAAW,EACX,aAAa,EACb,IAAI,GACL,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AAEjF,MAAM,OAAO,eAAe;IAC1B,OAAO,CAAC,IAAiB,EAAE,OAAe,EAAE,SAAiB;QAC3D,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,mBAAmB;oBACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,uBAAuB;oBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,oBAAoB;oBACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACtD,MAAM;gBACR,KAAK,kBAAkB;oBACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,oBAAoB;oBACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,iBAAiB;oBACpB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjD,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,iFAAiF;AAEjF,SAAS,gBAAgB,CAAC,IAAuB,EAAE,IAAY;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;QAC1B,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;QACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;QAC7B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;QAC1B,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;QACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;QAC7B,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAuB;IACpD,oEAAoE;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;SACnB,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;SACpC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,IAAI,EAAE,CAAC;IAEV,2DAA2D;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAc,CAAC;IACnB,IAAI,aAAuB,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../../src/indexer/extractors/csharp.ts"],"names":[],"mappings":"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"}