@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,251 @@
1
+ import { findChild, nodeEndLine } from './helpers.js';
2
+ /**
3
+ * Extract symbols from R files.
4
+ *
5
+ * tree-sitter-r grammar (r-lib/tree-sitter-r) notes:
6
+ * - Assignments: binary_operator with `<-` or `=` operator
7
+ * - Functions: function_definition as RHS of assignment
8
+ * - Calls: call node with function/arguments fields
9
+ * - Imports: library() and require() calls
10
+ * - S4 classes: setClass(), setRefClass()
11
+ */
12
+ export function extractRSymbols(tree, _filePath) {
13
+ const ctx = {
14
+ definitions: [],
15
+ calls: [],
16
+ imports: [],
17
+ classes: [],
18
+ exports: [],
19
+ typeMap: new Map(),
20
+ };
21
+ walkRNode(tree.rootNode, ctx);
22
+ return ctx;
23
+ }
24
+ function walkRNode(node, ctx) {
25
+ switch (node.type) {
26
+ case 'binary_operator':
27
+ handleBinaryOp(node, ctx);
28
+ break;
29
+ case 'call':
30
+ handleCall(node, ctx);
31
+ break;
32
+ }
33
+ for (let i = 0; i < node.childCount; i++) {
34
+ const child = node.child(i);
35
+ if (child)
36
+ walkRNode(child, ctx);
37
+ }
38
+ }
39
+ function handleBinaryOp(node, ctx) {
40
+ // binary_operator: child[0]=LHS, child[1]=operator (<- or =), child[2]=RHS
41
+ if (node.childCount < 3)
42
+ return;
43
+ const lhs = node.child(0);
44
+ const op = node.child(1);
45
+ const rhs = node.child(2);
46
+ if (!lhs || !op || !rhs)
47
+ return;
48
+ if (op.text !== '<-' && op.text !== '=' && op.text !== '<<-')
49
+ return;
50
+ if (lhs.type !== 'identifier')
51
+ return;
52
+ if (rhs.type === 'function_definition') {
53
+ const params = extractRParams(rhs);
54
+ ctx.definitions.push({
55
+ name: lhs.text,
56
+ kind: 'function',
57
+ line: node.startPosition.row + 1,
58
+ endLine: nodeEndLine(node),
59
+ children: params.length > 0 ? params : undefined,
60
+ });
61
+ }
62
+ else {
63
+ // Variable assignment — only record top-level
64
+ if (node.parent?.type === 'program') {
65
+ ctx.definitions.push({
66
+ name: lhs.text,
67
+ kind: 'variable',
68
+ line: node.startPosition.row + 1,
69
+ endLine: nodeEndLine(node),
70
+ });
71
+ }
72
+ }
73
+ }
74
+ function extractRParams(funcDef) {
75
+ const params = [];
76
+ const paramsNode = findChild(funcDef, 'parameters');
77
+ if (!paramsNode)
78
+ return params;
79
+ for (let i = 0; i < paramsNode.childCount; i++) {
80
+ const child = paramsNode.child(i);
81
+ if (!child)
82
+ continue;
83
+ if (child.type === 'parameter') {
84
+ // parameter node has name and possibly default value
85
+ const nameNode = child.childForFieldName('name') || findChild(child, 'identifier');
86
+ if (nameNode) {
87
+ params.push({ name: nameNode.text, kind: 'parameter', line: child.startPosition.row + 1 });
88
+ }
89
+ else if (child.text && child.text !== ',' && child.text !== '(' && child.text !== ')') {
90
+ // Some grammars have the param as plain text
91
+ params.push({ name: child.text, kind: 'parameter', line: child.startPosition.row + 1 });
92
+ }
93
+ }
94
+ if (child.type === 'identifier') {
95
+ params.push({ name: child.text, kind: 'parameter', line: child.startPosition.row + 1 });
96
+ }
97
+ }
98
+ return params;
99
+ }
100
+ function handleCall(node, ctx) {
101
+ // call: child[0]=function, then arguments
102
+ const funcNode = node.child(0);
103
+ if (!funcNode)
104
+ return;
105
+ const funcName = funcNode.text;
106
+ // library() and require() are imports
107
+ if (funcName === 'library' || funcName === 'require') {
108
+ handleLibraryCall(node, ctx);
109
+ return;
110
+ }
111
+ // source() is a file import
112
+ if (funcName === 'source') {
113
+ handleSourceCall(node, ctx);
114
+ return;
115
+ }
116
+ // setClass / setRefClass for S4
117
+ if (funcName === 'setClass' || funcName === 'setRefClass') {
118
+ handleSetClass(node, ctx);
119
+ return;
120
+ }
121
+ if (funcName === 'setGeneric' || funcName === 'setMethod') {
122
+ handleSetGeneric(node, ctx);
123
+ return;
124
+ }
125
+ // Regular call
126
+ if (funcNode.type === 'identifier') {
127
+ ctx.calls.push({ name: funcName, line: node.startPosition.row + 1 });
128
+ }
129
+ else if (funcNode.type === 'namespace_operator') {
130
+ // pkg::func
131
+ const parts = funcName.split('::');
132
+ if (parts.length >= 2) {
133
+ ctx.calls.push({
134
+ name: parts[parts.length - 1],
135
+ receiver: parts.slice(0, -1).join('::'),
136
+ line: node.startPosition.row + 1,
137
+ });
138
+ }
139
+ }
140
+ }
141
+ function handleLibraryCall(node, ctx) {
142
+ // Find the package name in arguments
143
+ for (let i = 0; i < node.childCount; i++) {
144
+ const child = node.child(i);
145
+ if (!child)
146
+ continue;
147
+ if (child.type === 'arguments') {
148
+ for (let j = 0; j < child.childCount; j++) {
149
+ const arg = child.child(j);
150
+ if (!arg)
151
+ continue;
152
+ if (arg.type === 'identifier') {
153
+ ctx.imports.push({
154
+ source: arg.text,
155
+ names: [arg.text],
156
+ line: node.startPosition.row + 1,
157
+ });
158
+ return;
159
+ }
160
+ if (arg.type === 'string' || arg.type === 'string_content') {
161
+ const text = arg.text.replace(/^["']|["']$/g, '');
162
+ ctx.imports.push({
163
+ source: text,
164
+ names: [text],
165
+ line: node.startPosition.row + 1,
166
+ });
167
+ return;
168
+ }
169
+ // Argument might be wrapped
170
+ if (arg.type === 'argument') {
171
+ const id = findChild(arg, 'identifier') || findChild(arg, 'string');
172
+ if (id) {
173
+ const text = id.text.replace(/^["']|["']$/g, '');
174
+ ctx.imports.push({
175
+ source: text,
176
+ names: [text],
177
+ line: node.startPosition.row + 1,
178
+ });
179
+ return;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ function handleSourceCall(node, ctx) {
187
+ for (let i = 0; i < node.childCount; i++) {
188
+ const child = node.child(i);
189
+ if (!child || child.type !== 'arguments')
190
+ continue;
191
+ for (let j = 0; j < child.childCount; j++) {
192
+ const arg = child.child(j);
193
+ if (!arg)
194
+ continue;
195
+ if (arg.type === 'string') {
196
+ const text = arg.text.replace(/^["']|["']$/g, '');
197
+ ctx.imports.push({
198
+ source: text,
199
+ names: ['source'],
200
+ line: node.startPosition.row + 1,
201
+ });
202
+ return;
203
+ }
204
+ }
205
+ }
206
+ }
207
+ function handleSetClass(node, ctx) {
208
+ for (let i = 0; i < node.childCount; i++) {
209
+ const child = node.child(i);
210
+ if (!child || child.type !== 'arguments')
211
+ continue;
212
+ for (let j = 0; j < child.childCount; j++) {
213
+ const arg = child.child(j);
214
+ if (!arg)
215
+ continue;
216
+ if (arg.type === 'string') {
217
+ const name = arg.text.replace(/^["']|["']$/g, '');
218
+ ctx.definitions.push({
219
+ name,
220
+ kind: 'class',
221
+ line: node.startPosition.row + 1,
222
+ endLine: nodeEndLine(node),
223
+ });
224
+ return;
225
+ }
226
+ }
227
+ }
228
+ }
229
+ function handleSetGeneric(node, ctx) {
230
+ for (let i = 0; i < node.childCount; i++) {
231
+ const child = node.child(i);
232
+ if (!child || child.type !== 'arguments')
233
+ continue;
234
+ for (let j = 0; j < child.childCount; j++) {
235
+ const arg = child.child(j);
236
+ if (!arg)
237
+ continue;
238
+ if (arg.type === 'string') {
239
+ const name = arg.text.replace(/^["']|["']$/g, '');
240
+ ctx.definitions.push({
241
+ name,
242
+ kind: 'function',
243
+ line: node.startPosition.row + 1,
244
+ endLine: nodeEndLine(node),
245
+ });
246
+ return;
247
+ }
248
+ }
249
+ }
250
+ }
251
+ //# sourceMappingURL=r.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r.js","sourceRoot":"","sources":["../../src/extractors/r.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ExtractorOutput, TreeSitterTree } from '../types.js';
2
+ /**
3
+ * Extract symbols from Solidity files.
4
+ *
5
+ * Solidity's tree-sitter grammar covers contracts, interfaces, libraries,
6
+ * structs, enums, events, errors, functions, modifiers, and import paths.
7
+ */
8
+ export declare function extractSoliditySymbols(tree: TreeSitterTree, _filePath: string): ExtractorOutput;
9
+ //# sourceMappingURL=solidity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidity.d.ts","sourceRoot":"","sources":["../../src/extractors/solidity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAGf,cAAc,EACf,MAAM,aAAa,CAAC;AASrB;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAY/F"}
@@ -0,0 +1,374 @@
1
+ import { extractModifierVisibility, findChild, findParentNode, nodeEndLine, stripQuotes, } from './helpers.js';
2
+ /**
3
+ * Extract symbols from Solidity files.
4
+ *
5
+ * Solidity's tree-sitter grammar covers contracts, interfaces, libraries,
6
+ * structs, enums, events, errors, functions, modifiers, and import paths.
7
+ */
8
+ export function extractSoliditySymbols(tree, _filePath) {
9
+ const ctx = {
10
+ definitions: [],
11
+ calls: [],
12
+ imports: [],
13
+ classes: [],
14
+ exports: [],
15
+ typeMap: new Map(),
16
+ };
17
+ walkSolidityNode(tree.rootNode, ctx);
18
+ return ctx;
19
+ }
20
+ function walkSolidityNode(node, ctx) {
21
+ switch (node.type) {
22
+ case 'contract_declaration':
23
+ handleContractDecl(node, ctx, 'class');
24
+ break;
25
+ case 'interface_declaration':
26
+ handleContractDecl(node, ctx, 'interface');
27
+ break;
28
+ case 'library_declaration':
29
+ handleContractDecl(node, ctx, 'module');
30
+ break;
31
+ case 'struct_declaration':
32
+ handleStructDecl(node, ctx);
33
+ break;
34
+ case 'enum_declaration':
35
+ handleEnumDecl(node, ctx);
36
+ break;
37
+ case 'function_definition':
38
+ handleFunctionDef(node, ctx);
39
+ break;
40
+ case 'modifier_definition':
41
+ handleModifierDef(node, ctx);
42
+ break;
43
+ case 'event_definition':
44
+ handleEventDef(node, ctx);
45
+ break;
46
+ case 'error_declaration':
47
+ handleErrorDecl(node, ctx);
48
+ break;
49
+ case 'state_variable_declaration':
50
+ handleStateVarDecl(node, ctx);
51
+ break;
52
+ case 'import_directive':
53
+ handleImportDirective(node, ctx);
54
+ break;
55
+ case 'call_expression':
56
+ case 'function_call':
57
+ handleCallExpression(node, ctx);
58
+ break;
59
+ }
60
+ for (let i = 0; i < node.childCount; i++) {
61
+ const child = node.child(i);
62
+ if (child)
63
+ walkSolidityNode(child, ctx);
64
+ }
65
+ }
66
+ // ── Handlers ───────────────────────────────────────────────────────────────
67
+ const SOL_PARENT_TYPES = [
68
+ 'contract_declaration',
69
+ 'interface_declaration',
70
+ 'library_declaration',
71
+ ];
72
+ function handleContractDecl(node, ctx, kind) {
73
+ const nameNode = node.childForFieldName('name');
74
+ if (!nameNode)
75
+ return;
76
+ const name = nameNode.text;
77
+ const members = [];
78
+ const body = node.childForFieldName('body') || findChild(node, 'contract_body');
79
+ if (body) {
80
+ for (let i = 0; i < body.childCount; i++) {
81
+ const child = body.child(i);
82
+ if (!child)
83
+ continue;
84
+ if (child.type === 'function_definition') {
85
+ const fnName = child.childForFieldName('name');
86
+ if (fnName) {
87
+ members.push({ name: fnName.text, kind: 'method', line: child.startPosition.row + 1 });
88
+ }
89
+ }
90
+ else if (child.type === 'state_variable_declaration') {
91
+ const varName = child.childForFieldName('name');
92
+ if (varName) {
93
+ members.push({
94
+ name: varName.text,
95
+ kind: 'property',
96
+ line: child.startPosition.row + 1,
97
+ visibility: extractSolVisibility(child),
98
+ });
99
+ }
100
+ }
101
+ else if (child.type === 'event_definition') {
102
+ const evName = child.childForFieldName('name');
103
+ if (evName) {
104
+ members.push({
105
+ name: evName.text,
106
+ kind: 'property',
107
+ decorators: ['event'],
108
+ line: child.startPosition.row + 1,
109
+ });
110
+ }
111
+ }
112
+ else if (child.type === 'error_declaration') {
113
+ const errName = child.childForFieldName('name');
114
+ if (errName) {
115
+ members.push({
116
+ name: errName.text,
117
+ kind: 'property',
118
+ decorators: ['error'],
119
+ line: child.startPosition.row + 1,
120
+ });
121
+ }
122
+ }
123
+ else if (child.type === 'modifier_definition') {
124
+ const modName = child.childForFieldName('name');
125
+ if (modName) {
126
+ members.push({
127
+ name: modName.text,
128
+ kind: 'method',
129
+ decorators: ['modifier'],
130
+ line: child.startPosition.row + 1,
131
+ });
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ctx.definitions.push({
137
+ name,
138
+ kind,
139
+ line: node.startPosition.row + 1,
140
+ endLine: nodeEndLine(node),
141
+ children: members.length > 0 ? members : undefined,
142
+ });
143
+ // Inheritance
144
+ const inheritance = findChild(node, 'inheritance_specifier');
145
+ if (inheritance) {
146
+ for (let i = 0; i < inheritance.childCount; i++) {
147
+ const child = inheritance.child(i);
148
+ if (!child)
149
+ continue;
150
+ if (child.type === 'user_defined_type' || child.type === 'identifier') {
151
+ ctx.classes.push({ name, extends: child.text, line: node.startPosition.row + 1 });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ function handleStructDecl(node, ctx) {
157
+ const nameNode = node.childForFieldName('name');
158
+ if (!nameNode)
159
+ return;
160
+ const members = [];
161
+ for (let i = 0; i < node.childCount; i++) {
162
+ const child = node.child(i);
163
+ if (child && child.type === 'struct_member') {
164
+ const memberName = child.childForFieldName('name');
165
+ if (memberName) {
166
+ members.push({
167
+ name: memberName.text,
168
+ kind: 'property',
169
+ line: child.startPosition.row + 1,
170
+ });
171
+ }
172
+ }
173
+ }
174
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
175
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
176
+ ctx.definitions.push({
177
+ name: fullName,
178
+ kind: 'struct',
179
+ line: node.startPosition.row + 1,
180
+ endLine: nodeEndLine(node),
181
+ children: members.length > 0 ? members : undefined,
182
+ });
183
+ }
184
+ function handleEnumDecl(node, ctx) {
185
+ const nameNode = node.childForFieldName('name');
186
+ if (!nameNode)
187
+ return;
188
+ const members = [];
189
+ for (let i = 0; i < node.childCount; i++) {
190
+ const child = node.child(i);
191
+ if (child && child.type === 'enum_value') {
192
+ members.push({ name: child.text, kind: 'constant', line: child.startPosition.row + 1 });
193
+ }
194
+ }
195
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
196
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
197
+ ctx.definitions.push({
198
+ name: fullName,
199
+ kind: 'enum',
200
+ line: node.startPosition.row + 1,
201
+ endLine: nodeEndLine(node),
202
+ children: members.length > 0 ? members : undefined,
203
+ });
204
+ }
205
+ function handleFunctionDef(node, ctx) {
206
+ const nameNode = node.childForFieldName('name');
207
+ if (!nameNode)
208
+ return;
209
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
210
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
211
+ const kind = parent ? 'method' : 'function';
212
+ const params = extractSolParams(node);
213
+ ctx.definitions.push({
214
+ name: fullName,
215
+ kind,
216
+ line: node.startPosition.row + 1,
217
+ endLine: nodeEndLine(node),
218
+ children: params.length > 0 ? params : undefined,
219
+ visibility: extractSolVisibility(node),
220
+ });
221
+ }
222
+ function handleModifierDef(node, ctx) {
223
+ const nameNode = node.childForFieldName('name');
224
+ if (!nameNode)
225
+ return;
226
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
227
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
228
+ ctx.definitions.push({
229
+ name: fullName,
230
+ kind: 'function',
231
+ line: node.startPosition.row + 1,
232
+ endLine: nodeEndLine(node),
233
+ decorators: ['modifier'],
234
+ });
235
+ }
236
+ function handleEventDef(node, ctx) {
237
+ const nameNode = node.childForFieldName('name');
238
+ if (!nameNode)
239
+ return;
240
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
241
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
242
+ ctx.definitions.push({
243
+ name: fullName,
244
+ kind: 'type',
245
+ line: node.startPosition.row + 1,
246
+ endLine: nodeEndLine(node),
247
+ decorators: ['event'],
248
+ });
249
+ }
250
+ function handleErrorDecl(node, ctx) {
251
+ const nameNode = node.childForFieldName('name');
252
+ if (!nameNode)
253
+ return;
254
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
255
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
256
+ ctx.definitions.push({
257
+ name: fullName,
258
+ kind: 'type',
259
+ line: node.startPosition.row + 1,
260
+ endLine: nodeEndLine(node),
261
+ decorators: ['error'],
262
+ });
263
+ }
264
+ function handleStateVarDecl(node, ctx) {
265
+ const nameNode = node.childForFieldName('name');
266
+ if (!nameNode)
267
+ return;
268
+ const parent = findParentNode(node, SOL_PARENT_TYPES);
269
+ const fullName = parent ? `${parent}.${nameNode.text}` : nameNode.text;
270
+ ctx.definitions.push({
271
+ name: fullName,
272
+ kind: 'variable',
273
+ line: node.startPosition.row + 1,
274
+ endLine: nodeEndLine(node),
275
+ visibility: extractSolVisibility(node),
276
+ });
277
+ }
278
+ function handleImportDirective(node, ctx) {
279
+ // import "path"; or import { X } from "path"; or import "path" as Alias;
280
+ for (let i = 0; i < node.childCount; i++) {
281
+ const child = node.child(i);
282
+ if (!child)
283
+ continue;
284
+ if (child.type === 'string' || child.type === 'string_literal') {
285
+ const source = stripQuotes(child.text);
286
+ const names = [];
287
+ // Look for imported symbols
288
+ for (let j = 0; j < node.childCount; j++) {
289
+ const sibling = node.child(j);
290
+ if (sibling && sibling.type === 'identifier')
291
+ names.push(sibling.text);
292
+ if (sibling && sibling.type === 'import_declaration') {
293
+ const id = findChild(sibling, 'identifier');
294
+ if (id)
295
+ names.push(id.text);
296
+ }
297
+ }
298
+ ctx.imports.push({
299
+ source,
300
+ names: names.length > 0 ? names : ['*'],
301
+ line: node.startPosition.row + 1,
302
+ });
303
+ return;
304
+ }
305
+ // source_import: handles `import * as X from "path"`
306
+ if (child.type === 'source_import' || child.type === 'import_clause') {
307
+ const strNode = findChild(child, 'string') || findChild(child, 'string_literal');
308
+ if (strNode) {
309
+ ctx.imports.push({
310
+ source: stripQuotes(strNode.text),
311
+ names: ['*'],
312
+ line: node.startPosition.row + 1,
313
+ });
314
+ return;
315
+ }
316
+ }
317
+ }
318
+ }
319
+ function handleCallExpression(node, ctx) {
320
+ const funcNode = node.childForFieldName('function') || node.childForFieldName('callee');
321
+ if (!funcNode)
322
+ return;
323
+ const call = { name: '', line: node.startPosition.row + 1 };
324
+ if (funcNode.type === 'member_expression' || funcNode.type === 'member_access') {
325
+ const prop = funcNode.childForFieldName('property') || funcNode.childForFieldName('member');
326
+ const obj = funcNode.childForFieldName('object') || funcNode.childForFieldName('expression');
327
+ if (prop)
328
+ call.name = prop.text;
329
+ if (obj)
330
+ call.receiver = obj.text;
331
+ }
332
+ else {
333
+ call.name = funcNode.text;
334
+ }
335
+ if (call.name)
336
+ ctx.calls.push(call);
337
+ }
338
+ // ── Helpers ────────────────────────────────────────────────────────────────
339
+ function extractSolParams(funcNode) {
340
+ const params = [];
341
+ const paramList = funcNode.childForFieldName('parameters') || findChild(funcNode, 'parameter_list');
342
+ if (!paramList)
343
+ return params;
344
+ for (let i = 0; i < paramList.childCount; i++) {
345
+ const param = paramList.child(i);
346
+ if (!param || param.type !== 'parameter')
347
+ continue;
348
+ const nameNode = param.childForFieldName('name');
349
+ if (nameNode) {
350
+ params.push({ name: nameNode.text, kind: 'parameter', line: param.startPosition.row + 1 });
351
+ }
352
+ }
353
+ return params;
354
+ }
355
+ function extractSolVisibility(node) {
356
+ // Solidity visibility is embedded as child keywords or visibility nodes
357
+ const vis = extractModifierVisibility(node);
358
+ if (vis)
359
+ return vis;
360
+ for (let i = 0; i < node.childCount; i++) {
361
+ const child = node.child(i);
362
+ if (!child)
363
+ continue;
364
+ const t = child.text;
365
+ if (t === 'public' || t === 'external')
366
+ return 'public';
367
+ if (t === 'private')
368
+ return 'private';
369
+ if (t === 'internal')
370
+ return 'protected';
371
+ }
372
+ return undefined;
373
+ }
374
+ //# sourceMappingURL=solidity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidity.js","sourceRoot":"","sources":["../../src/extractors/solidity.ts"],"names":[],"mappings":"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"}