@optave/codegraph 3.7.0 → 3.8.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.
Files changed (148) hide show
  1. package/README.md +25 -14
  2. package/dist/ast-analysis/engine.d.ts.map +1 -1
  3. package/dist/ast-analysis/engine.js +158 -1
  4. package/dist/ast-analysis/engine.js.map +1 -1
  5. package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
  6. package/dist/ast-analysis/rules/javascript.js +0 -1
  7. package/dist/ast-analysis/rules/javascript.js.map +1 -1
  8. package/dist/ast-analysis/visitors/ast-store-visitor.d.ts.map +1 -1
  9. package/dist/ast-analysis/visitors/ast-store-visitor.js +2 -75
  10. package/dist/ast-analysis/visitors/ast-store-visitor.js.map +1 -1
  11. package/dist/cli/commands/ast.js +2 -2
  12. package/dist/cli/commands/ast.js.map +1 -1
  13. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  14. package/dist/domain/graph/builder/pipeline.js +128 -6
  15. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  16. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  17. package/dist/domain/graph/builder/stages/build-edges.js +101 -1
  18. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  19. package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
  20. package/dist/domain/graph/builder/stages/collect-files.js +17 -5
  21. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  22. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  23. package/dist/domain/graph/builder/stages/detect-changes.js +98 -50
  24. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  25. package/dist/domain/graph/builder/stages/finalize.d.ts.map +1 -1
  26. package/dist/domain/graph/builder/stages/finalize.js +32 -5
  27. package/dist/domain/graph/builder/stages/finalize.js.map +1 -1
  28. package/dist/domain/graph/builder/stages/insert-nodes.d.ts.map +1 -1
  29. package/dist/domain/graph/builder/stages/insert-nodes.js +20 -7
  30. package/dist/domain/graph/builder/stages/insert-nodes.js.map +1 -1
  31. package/dist/domain/parser.d.ts +1 -1
  32. package/dist/domain/parser.d.ts.map +1 -1
  33. package/dist/domain/parser.js +88 -4
  34. package/dist/domain/parser.js.map +1 -1
  35. package/dist/extractors/clojure.d.ts +12 -0
  36. package/dist/extractors/clojure.d.ts.map +1 -0
  37. package/dist/extractors/clojure.js +245 -0
  38. package/dist/extractors/clojure.js.map +1 -0
  39. package/dist/extractors/cuda.d.ts +11 -0
  40. package/dist/extractors/cuda.d.ts.map +1 -0
  41. package/dist/extractors/cuda.js +302 -0
  42. package/dist/extractors/cuda.js.map +1 -0
  43. package/dist/extractors/erlang.d.ts +14 -0
  44. package/dist/extractors/erlang.d.ts.map +1 -0
  45. package/dist/extractors/erlang.js +239 -0
  46. package/dist/extractors/erlang.js.map +1 -0
  47. package/dist/extractors/fsharp.d.ts +13 -0
  48. package/dist/extractors/fsharp.d.ts.map +1 -0
  49. package/dist/extractors/fsharp.js +218 -0
  50. package/dist/extractors/fsharp.js.map +1 -0
  51. package/dist/extractors/gleam.d.ts +14 -0
  52. package/dist/extractors/gleam.d.ts.map +1 -0
  53. package/dist/extractors/gleam.js +229 -0
  54. package/dist/extractors/gleam.js.map +1 -0
  55. package/dist/extractors/groovy.d.ts +10 -0
  56. package/dist/extractors/groovy.d.ts.map +1 -0
  57. package/dist/extractors/groovy.js +304 -0
  58. package/dist/extractors/groovy.js.map +1 -0
  59. package/dist/extractors/index.d.ts +11 -0
  60. package/dist/extractors/index.d.ts.map +1 -1
  61. package/dist/extractors/index.js +11 -0
  62. package/dist/extractors/index.js.map +1 -1
  63. package/dist/extractors/julia.d.ts +16 -0
  64. package/dist/extractors/julia.d.ts.map +1 -0
  65. package/dist/extractors/julia.js +287 -0
  66. package/dist/extractors/julia.js.map +1 -0
  67. package/dist/extractors/objc.d.ts +9 -0
  68. package/dist/extractors/objc.d.ts.map +1 -0
  69. package/dist/extractors/objc.js +406 -0
  70. package/dist/extractors/objc.js.map +1 -0
  71. package/dist/extractors/ocaml.js +74 -0
  72. package/dist/extractors/ocaml.js.map +1 -1
  73. package/dist/extractors/r.d.ts +13 -0
  74. package/dist/extractors/r.d.ts.map +1 -0
  75. package/dist/extractors/r.js +251 -0
  76. package/dist/extractors/r.js.map +1 -0
  77. package/dist/extractors/solidity.d.ts +9 -0
  78. package/dist/extractors/solidity.d.ts.map +1 -0
  79. package/dist/extractors/solidity.js +374 -0
  80. package/dist/extractors/solidity.js.map +1 -0
  81. package/dist/extractors/verilog.d.ts +9 -0
  82. package/dist/extractors/verilog.d.ts.map +1 -0
  83. package/dist/extractors/verilog.js +286 -0
  84. package/dist/extractors/verilog.js.map +1 -0
  85. package/dist/features/ast.d.ts.map +1 -1
  86. package/dist/features/ast.js +1 -2
  87. package/dist/features/ast.js.map +1 -1
  88. package/dist/graph/algorithms/bfs.d.ts +2 -0
  89. package/dist/graph/algorithms/bfs.d.ts.map +1 -1
  90. package/dist/graph/algorithms/bfs.js +27 -0
  91. package/dist/graph/algorithms/bfs.js.map +1 -1
  92. package/dist/graph/algorithms/centrality.d.ts +2 -0
  93. package/dist/graph/algorithms/centrality.d.ts.map +1 -1
  94. package/dist/graph/algorithms/centrality.js +28 -0
  95. package/dist/graph/algorithms/centrality.js.map +1 -1
  96. package/dist/graph/algorithms/louvain.d.ts +3 -4
  97. package/dist/graph/algorithms/louvain.d.ts.map +1 -1
  98. package/dist/graph/algorithms/louvain.js +29 -0
  99. package/dist/graph/algorithms/louvain.js.map +1 -1
  100. package/dist/graph/algorithms/shortest-path.d.ts +2 -0
  101. package/dist/graph/algorithms/shortest-path.d.ts.map +1 -1
  102. package/dist/graph/algorithms/shortest-path.js +18 -1
  103. package/dist/graph/algorithms/shortest-path.js.map +1 -1
  104. package/dist/types.d.ts +122 -2
  105. package/dist/types.d.ts.map +1 -1
  106. package/grammars/tree-sitter-clojure.wasm +0 -0
  107. package/grammars/tree-sitter-cuda.wasm +0 -0
  108. package/grammars/tree-sitter-erlang.wasm +0 -0
  109. package/grammars/tree-sitter-fsharp.wasm +0 -0
  110. package/grammars/tree-sitter-gleam.wasm +0 -0
  111. package/grammars/tree-sitter-groovy.wasm +0 -0
  112. package/grammars/tree-sitter-julia.wasm +0 -0
  113. package/grammars/tree-sitter-objc.wasm +0 -0
  114. package/grammars/tree-sitter-ocaml_interface.wasm +0 -0
  115. package/grammars/tree-sitter-r.wasm +0 -0
  116. package/grammars/tree-sitter-solidity.wasm +0 -0
  117. package/grammars/tree-sitter-verilog.wasm +0 -0
  118. package/package.json +18 -7
  119. package/src/ast-analysis/engine.ts +183 -1
  120. package/src/ast-analysis/rules/javascript.ts +0 -1
  121. package/src/ast-analysis/visitors/ast-store-visitor.ts +2 -75
  122. package/src/cli/commands/ast.ts +2 -2
  123. package/src/domain/graph/builder/pipeline.ts +142 -6
  124. package/src/domain/graph/builder/stages/build-edges.ts +158 -1
  125. package/src/domain/graph/builder/stages/collect-files.ts +18 -7
  126. package/src/domain/graph/builder/stages/detect-changes.ts +109 -55
  127. package/src/domain/graph/builder/stages/finalize.ts +39 -9
  128. package/src/domain/graph/builder/stages/insert-nodes.ts +18 -7
  129. package/src/domain/parser.ts +108 -2
  130. package/src/extractors/clojure.ts +273 -0
  131. package/src/extractors/cuda.ts +316 -0
  132. package/src/extractors/erlang.ts +252 -0
  133. package/src/extractors/fsharp.ts +253 -0
  134. package/src/extractors/gleam.ts +246 -0
  135. package/src/extractors/groovy.ts +332 -0
  136. package/src/extractors/index.ts +11 -0
  137. package/src/extractors/julia.ts +318 -0
  138. package/src/extractors/objc.ts +431 -0
  139. package/src/extractors/ocaml.ts +78 -0
  140. package/src/extractors/r.ts +253 -0
  141. package/src/extractors/solidity.ts +398 -0
  142. package/src/extractors/verilog.ts +315 -0
  143. package/src/features/ast.ts +1 -2
  144. package/src/graph/algorithms/bfs.ts +34 -0
  145. package/src/graph/algorithms/centrality.ts +30 -0
  146. package/src/graph/algorithms/louvain.ts +31 -4
  147. package/src/graph/algorithms/shortest-path.ts +20 -1
  148. package/src/types.ts +117 -2
@@ -0,0 +1,302 @@
1
+ import { extractModifierVisibility, findChild, nodeEndLine } from './helpers.js';
2
+ /**
3
+ * Extract symbols from CUDA files.
4
+ *
5
+ * CUDA is a C++ superset. The tree-sitter-cuda grammar extends C++ with
6
+ * __global__, __device__, __host__, __shared__ qualifiers and kernel
7
+ * launch syntax (<<<...>>>). We reuse C++ handler patterns and add
8
+ * CUDA-specific qualifier detection.
9
+ */
10
+ export function extractCudaSymbols(tree, _filePath) {
11
+ const ctx = {
12
+ definitions: [],
13
+ calls: [],
14
+ imports: [],
15
+ classes: [],
16
+ exports: [],
17
+ typeMap: new Map(),
18
+ };
19
+ walkCudaNode(tree.rootNode, ctx);
20
+ return ctx;
21
+ }
22
+ const CUDA_QUALIFIERS = new Set([
23
+ '__global__',
24
+ '__device__',
25
+ '__host__',
26
+ '__shared__',
27
+ '__constant__',
28
+ ]);
29
+ function walkCudaNode(node, ctx) {
30
+ switch (node.type) {
31
+ case 'function_definition':
32
+ handleCudaFunctionDef(node, ctx);
33
+ break;
34
+ case 'class_specifier':
35
+ handleCudaClassSpecifier(node, ctx);
36
+ break;
37
+ case 'struct_specifier':
38
+ handleCudaStructSpecifier(node, ctx);
39
+ break;
40
+ case 'enum_specifier':
41
+ handleCudaEnumSpecifier(node, ctx);
42
+ break;
43
+ case 'namespace_definition':
44
+ handleCudaNamespaceDef(node, ctx);
45
+ break;
46
+ case 'type_definition':
47
+ handleCudaTypedef(node, ctx);
48
+ break;
49
+ case 'preproc_include':
50
+ handleCudaInclude(node, ctx);
51
+ break;
52
+ case 'call_expression':
53
+ handleCudaCallExpression(node, ctx);
54
+ break;
55
+ }
56
+ for (let i = 0; i < node.childCount; i++) {
57
+ const child = node.child(i);
58
+ if (child)
59
+ walkCudaNode(child, ctx);
60
+ }
61
+ }
62
+ // ── Handlers ───────────────────────────────────────────────────────────────
63
+ function handleCudaFunctionDef(node, ctx) {
64
+ const declarator = node.childForFieldName('declarator');
65
+ if (!declarator)
66
+ return;
67
+ const funcDeclarator = declarator.type === 'function_declarator'
68
+ ? declarator
69
+ : findChild(declarator, 'function_declarator');
70
+ if (!funcDeclarator)
71
+ return;
72
+ const nameNode = funcDeclarator.childForFieldName('declarator');
73
+ if (!nameNode)
74
+ return;
75
+ const name = nameNode.text;
76
+ const parentClass = findCudaParentClass(node);
77
+ const fullName = parentClass ? `${parentClass}.${name}` : name;
78
+ const kind = parentClass ? 'method' : 'function';
79
+ const params = extractCudaParameters(funcDeclarator.childForFieldName('parameters'));
80
+ const decorators = extractCudaQualifiers(node);
81
+ ctx.definitions.push({
82
+ name: fullName,
83
+ kind,
84
+ line: node.startPosition.row + 1,
85
+ endLine: nodeEndLine(node),
86
+ children: params.length > 0 ? params : undefined,
87
+ visibility: parentClass ? extractModifierVisibility(node) : undefined,
88
+ decorators: decorators.length > 0 ? decorators : undefined,
89
+ });
90
+ }
91
+ function handleCudaClassSpecifier(node, ctx) {
92
+ const nameNode = node.childForFieldName('name');
93
+ if (!nameNode)
94
+ return;
95
+ const children = extractCudaClassFields(node);
96
+ ctx.definitions.push({
97
+ name: nameNode.text,
98
+ kind: 'class',
99
+ line: node.startPosition.row + 1,
100
+ endLine: nodeEndLine(node),
101
+ children: children.length > 0 ? children : undefined,
102
+ });
103
+ const baseClause = findChild(node, 'base_class_clause');
104
+ if (baseClause) {
105
+ for (let i = 0; i < baseClause.childCount; i++) {
106
+ const child = baseClause.child(i);
107
+ if (child && (child.type === 'type_identifier' || child.type === 'qualified_identifier')) {
108
+ ctx.classes.push({
109
+ name: nameNode.text,
110
+ extends: child.text,
111
+ line: node.startPosition.row + 1,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ }
117
+ function handleCudaStructSpecifier(node, ctx) {
118
+ const nameNode = node.childForFieldName('name');
119
+ if (!nameNode)
120
+ return;
121
+ const children = extractCudaClassFields(node);
122
+ ctx.definitions.push({
123
+ name: nameNode.text,
124
+ kind: 'struct',
125
+ line: node.startPosition.row + 1,
126
+ endLine: nodeEndLine(node),
127
+ children: children.length > 0 ? children : undefined,
128
+ });
129
+ }
130
+ function handleCudaEnumSpecifier(node, ctx) {
131
+ const nameNode = node.childForFieldName('name');
132
+ if (!nameNode)
133
+ return;
134
+ const children = extractCudaEnumEntries(node);
135
+ ctx.definitions.push({
136
+ name: nameNode.text,
137
+ kind: 'enum',
138
+ line: node.startPosition.row + 1,
139
+ endLine: nodeEndLine(node),
140
+ children: children.length > 0 ? children : undefined,
141
+ });
142
+ }
143
+ function handleCudaNamespaceDef(node, ctx) {
144
+ const nameNode = node.childForFieldName('name');
145
+ if (!nameNode)
146
+ return;
147
+ ctx.definitions.push({
148
+ name: nameNode.text,
149
+ kind: 'namespace',
150
+ line: node.startPosition.row + 1,
151
+ endLine: nodeEndLine(node),
152
+ });
153
+ }
154
+ function handleCudaTypedef(node, ctx) {
155
+ let name;
156
+ for (let i = node.childCount - 1; i >= 0; i--) {
157
+ const child = node.child(i);
158
+ if (child &&
159
+ (child.type === 'type_identifier' ||
160
+ child.type === 'identifier' ||
161
+ child.type === 'primitive_type')) {
162
+ name = child.text;
163
+ break;
164
+ }
165
+ }
166
+ if (!name)
167
+ return;
168
+ ctx.definitions.push({
169
+ name,
170
+ kind: 'type',
171
+ line: node.startPosition.row + 1,
172
+ endLine: nodeEndLine(node),
173
+ });
174
+ }
175
+ function handleCudaInclude(node, ctx) {
176
+ const pathNode = node.childForFieldName('path');
177
+ if (!pathNode)
178
+ return;
179
+ const raw = pathNode.text;
180
+ const source = raw.replace(/^["<]|[">]$/g, '');
181
+ const lastName = source.split('/').pop() ?? source;
182
+ ctx.imports.push({
183
+ source,
184
+ names: [lastName],
185
+ line: node.startPosition.row + 1,
186
+ cInclude: true,
187
+ });
188
+ }
189
+ function handleCudaCallExpression(node, ctx) {
190
+ const funcNode = node.childForFieldName('function');
191
+ if (!funcNode)
192
+ return;
193
+ const call = { name: '', line: node.startPosition.row + 1 };
194
+ if (funcNode.type === 'field_expression') {
195
+ const field = funcNode.childForFieldName('field');
196
+ const argument = funcNode.childForFieldName('argument');
197
+ if (field)
198
+ call.name = field.text;
199
+ if (argument)
200
+ call.receiver = argument.text;
201
+ }
202
+ else {
203
+ call.name = funcNode.text;
204
+ }
205
+ if (call.name)
206
+ ctx.calls.push(call);
207
+ }
208
+ // ── Helpers ────────────────────────────────────────────────────────────────
209
+ function extractCudaQualifiers(node) {
210
+ const qualifiers = [];
211
+ for (let i = 0; i < node.childCount; i++) {
212
+ const child = node.child(i);
213
+ if (!child)
214
+ continue;
215
+ // Check direct text match for bare qualifier tokens, or look inside
216
+ // storage_class_specifier / attribute_specifier wrapper nodes.
217
+ // Use `else if` to avoid pushing the same qualifier twice when
218
+ // wrapper-node text also matches CUDA_QUALIFIERS directly.
219
+ if (child.type === 'storage_class_specifier' || child.type === 'attribute_specifier') {
220
+ if (CUDA_QUALIFIERS.has(child.text))
221
+ qualifiers.push(child.text);
222
+ }
223
+ else if (CUDA_QUALIFIERS.has(child.text)) {
224
+ qualifiers.push(child.text);
225
+ }
226
+ }
227
+ return qualifiers;
228
+ }
229
+ function findCudaParentClass(node) {
230
+ let current = node.parent;
231
+ while (current) {
232
+ if (current.type === 'field_declaration_list') {
233
+ const classNode = current.parent;
234
+ if (classNode &&
235
+ (classNode.type === 'class_specifier' || classNode.type === 'struct_specifier')) {
236
+ const nameNode = classNode.childForFieldName('name');
237
+ return nameNode ? nameNode.text : null;
238
+ }
239
+ }
240
+ current = current.parent;
241
+ }
242
+ return null;
243
+ }
244
+ function extractCudaParameters(paramListNode) {
245
+ const params = [];
246
+ if (!paramListNode)
247
+ return params;
248
+ for (let i = 0; i < paramListNode.childCount; i++) {
249
+ const param = paramListNode.child(i);
250
+ if (!param || param.type !== 'parameter_declaration')
251
+ continue;
252
+ const nameNode = param.childForFieldName('declarator');
253
+ if (nameNode) {
254
+ const name = nameNode.type === 'identifier'
255
+ ? nameNode.text
256
+ : (findChild(nameNode, 'identifier')?.text ?? nameNode.text);
257
+ params.push({ name, kind: 'parameter', line: param.startPosition.row + 1 });
258
+ }
259
+ }
260
+ return params;
261
+ }
262
+ function extractCudaClassFields(classNode) {
263
+ const fields = [];
264
+ const body = classNode.childForFieldName('body') || findChild(classNode, 'field_declaration_list');
265
+ if (!body)
266
+ return fields;
267
+ for (let i = 0; i < body.childCount; i++) {
268
+ const member = body.child(i);
269
+ if (!member || member.type !== 'field_declaration')
270
+ continue;
271
+ const nameNode = member.childForFieldName('declarator');
272
+ if (nameNode) {
273
+ const name = nameNode.type === 'identifier'
274
+ ? nameNode.text
275
+ : (findChild(nameNode, 'identifier')?.text ?? nameNode.text);
276
+ fields.push({
277
+ name,
278
+ kind: 'property',
279
+ line: member.startPosition.row + 1,
280
+ visibility: extractModifierVisibility(member),
281
+ });
282
+ }
283
+ }
284
+ return fields;
285
+ }
286
+ function extractCudaEnumEntries(enumNode) {
287
+ const entries = [];
288
+ const body = findChild(enumNode, 'enumerator_list');
289
+ if (!body)
290
+ return entries;
291
+ for (let i = 0; i < body.childCount; i++) {
292
+ const member = body.child(i);
293
+ if (!member || member.type !== 'enumerator')
294
+ continue;
295
+ const nameNode = member.childForFieldName('name');
296
+ if (nameNode) {
297
+ entries.push({ name: nameNode.text, kind: 'constant', line: member.startPosition.row + 1 });
298
+ }
299
+ }
300
+ return entries;
301
+ }
302
+ //# sourceMappingURL=cuda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cuda.js","sourceRoot":"","sources":["../../src/extractors/cuda.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ExtractorOutput, TreeSitterTree } from '../types.js';
2
+ /**
3
+ * Extract symbols from Erlang files.
4
+ *
5
+ * tree-sitter-erlang (WhatsApp) grammar notes:
6
+ * - module_attribute: -module(name).
7
+ * - record_decl: -record(name, {fields}).
8
+ * - fun_decl: contains function_clause children
9
+ * - function_clause: atom expr_args clause_body
10
+ * - call: function calls, with remote child for module:func
11
+ * - expr_args: parenthesized argument lists
12
+ */
13
+ export declare function extractErlangSymbols(tree: TreeSitterTree, _filePath: string): ExtractorOutput;
14
+ //# sourceMappingURL=erlang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erlang.d.ts","sourceRoot":"","sources":["../../src/extractors/erlang.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAkC,cAAc,EAAE,MAAM,aAAa,CAAC;AAGnG;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAY7F"}
@@ -0,0 +1,239 @@
1
+ import { findChild, nodeEndLine } from './helpers.js';
2
+ /**
3
+ * Extract symbols from Erlang files.
4
+ *
5
+ * tree-sitter-erlang (WhatsApp) grammar notes:
6
+ * - module_attribute: -module(name).
7
+ * - record_decl: -record(name, {fields}).
8
+ * - fun_decl: contains function_clause children
9
+ * - function_clause: atom expr_args clause_body
10
+ * - call: function calls, with remote child for module:func
11
+ * - expr_args: parenthesized argument lists
12
+ */
13
+ export function extractErlangSymbols(tree, _filePath) {
14
+ const ctx = {
15
+ definitions: [],
16
+ calls: [],
17
+ imports: [],
18
+ classes: [],
19
+ exports: [],
20
+ typeMap: new Map(),
21
+ };
22
+ walkErlangNode(tree.rootNode, ctx);
23
+ return ctx;
24
+ }
25
+ function walkErlangNode(node, ctx) {
26
+ switch (node.type) {
27
+ case 'module_attribute':
28
+ handleModuleAttr(node, ctx);
29
+ break;
30
+ case 'record_decl':
31
+ handleRecordDecl(node, ctx);
32
+ break;
33
+ case 'type_alias':
34
+ case 'opaque':
35
+ handleTypeAlias(node, ctx);
36
+ break;
37
+ case 'fun_decl':
38
+ handleFunDecl(node, ctx);
39
+ break;
40
+ case 'function_clause':
41
+ // Only handle if not inside fun_decl (fun_decl handles its own clauses)
42
+ if (node.parent?.type !== 'fun_decl') {
43
+ handleFunctionClause(node, ctx);
44
+ }
45
+ break;
46
+ case 'pp_define':
47
+ handleDefine(node, ctx);
48
+ break;
49
+ case 'pp_include':
50
+ case 'pp_include_lib':
51
+ handleInclude(node, ctx);
52
+ break;
53
+ case 'import_attribute':
54
+ handleImportAttr(node, ctx);
55
+ break;
56
+ case 'call':
57
+ handleCall(node, ctx);
58
+ break;
59
+ }
60
+ for (let i = 0; i < node.childCount; i++) {
61
+ const child = node.child(i);
62
+ if (child)
63
+ walkErlangNode(child, ctx);
64
+ }
65
+ }
66
+ function handleModuleAttr(node, ctx) {
67
+ // module_attribute: - module ( atom ) .
68
+ const nameNode = findChild(node, 'atom');
69
+ if (!nameNode)
70
+ return;
71
+ ctx.definitions.push({
72
+ name: nameNode.text,
73
+ kind: 'module',
74
+ line: node.startPosition.row + 1,
75
+ endLine: nodeEndLine(node),
76
+ });
77
+ }
78
+ function handleRecordDecl(node, ctx) {
79
+ // record_decl: - record ( atom , { record_field, ... } ) .
80
+ const nameNode = findChild(node, 'atom');
81
+ if (!nameNode)
82
+ return;
83
+ const children = [];
84
+ for (let i = 0; i < node.childCount; i++) {
85
+ const child = node.child(i);
86
+ if (!child)
87
+ continue;
88
+ if (child.type === 'record_field' || child.type === 'typed_record_field') {
89
+ const fieldName = findChild(child, 'atom');
90
+ if (fieldName) {
91
+ children.push({
92
+ name: fieldName.text,
93
+ kind: 'property',
94
+ line: child.startPosition.row + 1,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ ctx.definitions.push({
100
+ name: nameNode.text,
101
+ kind: 'record',
102
+ line: node.startPosition.row + 1,
103
+ endLine: nodeEndLine(node),
104
+ children: children.length > 0 ? children : undefined,
105
+ });
106
+ }
107
+ function handleTypeAlias(node, ctx) {
108
+ const nameNode = findChild(node, 'atom');
109
+ if (!nameNode)
110
+ return;
111
+ ctx.definitions.push({
112
+ name: nameNode.text,
113
+ kind: 'type',
114
+ line: node.startPosition.row + 1,
115
+ endLine: nodeEndLine(node),
116
+ });
117
+ }
118
+ function handleFunDecl(node, ctx) {
119
+ // fun_decl contains one or more function_clause children + dots
120
+ // Extract from the first function_clause
121
+ const clause = findChild(node, 'function_clause');
122
+ if (!clause)
123
+ return;
124
+ handleFunctionClause(clause, ctx);
125
+ }
126
+ function handleFunctionClause(node, ctx) {
127
+ // function_clause: atom expr_args clause_body
128
+ const nameNode = findChild(node, 'atom');
129
+ if (!nameNode)
130
+ return;
131
+ // Don't duplicate if we already have this function
132
+ if (ctx.definitions.some((d) => d.name === nameNode.text && d.kind === 'function'))
133
+ return;
134
+ const params = extractErlangParams(node);
135
+ ctx.definitions.push({
136
+ name: nameNode.text,
137
+ kind: 'function',
138
+ line: node.startPosition.row + 1,
139
+ endLine: nodeEndLine(node.parent?.type === 'fun_decl' ? node.parent : node),
140
+ children: params.length > 0 ? params : undefined,
141
+ visibility: 'public',
142
+ });
143
+ }
144
+ function extractErlangParams(clauseNode) {
145
+ const params = [];
146
+ const argsNode = findChild(clauseNode, 'expr_args');
147
+ if (!argsNode)
148
+ return params;
149
+ for (let i = 0; i < argsNode.childCount; i++) {
150
+ const child = argsNode.child(i);
151
+ if (!child)
152
+ continue;
153
+ if (child.type === 'var') {
154
+ params.push({ name: child.text, kind: 'parameter', line: child.startPosition.row + 1 });
155
+ }
156
+ if (child.type === 'atom') {
157
+ params.push({ name: child.text, kind: 'parameter', line: child.startPosition.row + 1 });
158
+ }
159
+ }
160
+ return params;
161
+ }
162
+ function handleDefine(node, ctx) {
163
+ // pp_define: -define(NAME, value).
164
+ const nameNode = findChild(node, 'var') || findChild(node, 'atom') || findChild(node, 'macro_lhs');
165
+ if (!nameNode)
166
+ return;
167
+ const name = nameNode.type === 'macro_lhs'
168
+ ? (findChild(nameNode, 'var')?.text ?? nameNode.text)
169
+ : nameNode.text;
170
+ ctx.definitions.push({
171
+ name,
172
+ kind: 'variable',
173
+ line: node.startPosition.row + 1,
174
+ endLine: nodeEndLine(node),
175
+ });
176
+ }
177
+ function handleInclude(node, ctx) {
178
+ const strNode = findChild(node, 'string');
179
+ if (!strNode)
180
+ return;
181
+ const source = strNode.text.replace(/^"|"$/g, '');
182
+ ctx.imports.push({
183
+ source,
184
+ names: ['include'],
185
+ line: node.startPosition.row + 1,
186
+ });
187
+ }
188
+ function handleImportAttr(node, ctx) {
189
+ const moduleNode = findChild(node, 'atom');
190
+ if (!moduleNode)
191
+ return;
192
+ const names = [];
193
+ // Find exported function names
194
+ for (let i = 0; i < node.childCount; i++) {
195
+ const child = node.child(i);
196
+ if (!child)
197
+ continue;
198
+ if (child.type === 'fa') {
199
+ const fnName = findChild(child, 'atom');
200
+ if (fnName)
201
+ names.push(fnName.text);
202
+ }
203
+ }
204
+ ctx.imports.push({
205
+ source: moduleNode.text,
206
+ names: names.length > 0 ? names : [moduleNode.text],
207
+ line: node.startPosition.row + 1,
208
+ });
209
+ }
210
+ function handleCall(node, ctx) {
211
+ // call: first child is function ref (atom or remote), then expr_args
212
+ const funcNode = node.child(0);
213
+ if (!funcNode)
214
+ return;
215
+ if (funcNode.type === 'atom' || funcNode.type === 'identifier') {
216
+ ctx.calls.push({ name: funcNode.text, line: node.startPosition.row + 1 });
217
+ }
218
+ else if (funcNode.type === 'remote') {
219
+ // module:function — remote has atom : atom children
220
+ const atoms = [];
221
+ for (let i = 0; i < funcNode.childCount; i++) {
222
+ const child = funcNode.child(i);
223
+ if (child && (child.type === 'atom' || child.type === 'var')) {
224
+ atoms.push(child.text);
225
+ }
226
+ }
227
+ if (atoms.length >= 2) {
228
+ ctx.calls.push({
229
+ name: atoms[atoms.length - 1],
230
+ receiver: atoms.slice(0, -1).join(':'),
231
+ line: node.startPosition.row + 1,
232
+ });
233
+ }
234
+ else if (atoms.length === 1) {
235
+ ctx.calls.push({ name: atoms[0], line: node.startPosition.row + 1 });
236
+ }
237
+ }
238
+ }
239
+ //# sourceMappingURL=erlang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erlang.js","sourceRoot":"","sources":["../../src/extractors/erlang.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ExtractorOutput, TreeSitterTree } from '../types.js';
2
+ /**
3
+ * Extract symbols from F# files.
4
+ *
5
+ * tree-sitter-fsharp grammar notes:
6
+ * - named_module: top-level module declaration
7
+ * - function_declaration_left: LHS of `let name params = ...`
8
+ * - import_decl: `open Namespace`
9
+ * - type_definition > union_type_defn / record_type_defn
10
+ * - application_expression: function calls
11
+ */
12
+ export declare function extractFSharpSymbols(tree: TreeSitterTree, _filePath: string): ExtractorOutput;
13
+ //# sourceMappingURL=fsharp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsharp.d.ts","sourceRoot":"","sources":["../../src/extractors/fsharp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAGf,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAY7F"}