@colbymchenry/codegraph-darwin-arm64 1.2.0 → 1.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/bin/codegraph +5 -0
- package/lib/dist/bin/codegraph.d.ts +1 -1
- package/lib/dist/bin/codegraph.d.ts.map +1 -1
- package/lib/dist/bin/codegraph.js +232 -61
- package/lib/dist/bin/codegraph.js.map +1 -1
- package/lib/dist/bin/command-supervision.d.ts.map +1 -1
- package/lib/dist/bin/command-supervision.js +4 -1
- package/lib/dist/bin/command-supervision.js.map +1 -1
- package/lib/dist/db/migrations.d.ts +1 -1
- package/lib/dist/db/migrations.d.ts.map +1 -1
- package/lib/dist/db/migrations.js +19 -1
- package/lib/dist/db/migrations.js.map +1 -1
- package/lib/dist/db/queries.d.ts +51 -0
- package/lib/dist/db/queries.d.ts.map +1 -1
- package/lib/dist/db/queries.js +141 -0
- package/lib/dist/db/queries.js.map +1 -1
- package/lib/dist/db/schema.sql +19 -0
- package/lib/dist/directory.d.ts +9 -5
- package/lib/dist/directory.d.ts.map +1 -1
- package/lib/dist/directory.js +210 -19
- package/lib/dist/directory.js.map +1 -1
- package/lib/dist/extraction/cfml-extractor.d.ts +107 -0
- package/lib/dist/extraction/cfml-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/cfml-extractor.js +494 -0
- package/lib/dist/extraction/cfml-extractor.js.map +1 -0
- package/lib/dist/extraction/grammars.d.ts +9 -0
- package/lib/dist/extraction/grammars.d.ts.map +1 -1
- package/lib/dist/extraction/grammars.js +115 -3
- package/lib/dist/extraction/grammars.js.map +1 -1
- package/lib/dist/extraction/index.d.ts +46 -1
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +254 -3
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/languages/arkts.d.ts +3 -0
- package/lib/dist/extraction/languages/arkts.d.ts.map +1 -0
- package/lib/dist/extraction/languages/arkts.js +127 -0
- package/lib/dist/extraction/languages/arkts.js.map +1 -0
- package/lib/dist/extraction/languages/c-cpp.d.ts +42 -0
- package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/lib/dist/extraction/languages/c-cpp.js +369 -4
- package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
- package/lib/dist/extraction/languages/cfquery.d.ts +12 -0
- package/lib/dist/extraction/languages/cfquery.d.ts.map +1 -0
- package/lib/dist/extraction/languages/cfquery.js +28 -0
- package/lib/dist/extraction/languages/cfquery.js.map +1 -0
- package/lib/dist/extraction/languages/cfscript.d.ts +3 -0
- package/lib/dist/extraction/languages/cfscript.d.ts.map +1 -0
- package/lib/dist/extraction/languages/cfscript.js +73 -0
- package/lib/dist/extraction/languages/cfscript.js.map +1 -0
- package/lib/dist/extraction/languages/cobol.d.ts +33 -0
- package/lib/dist/extraction/languages/cobol.d.ts.map +1 -0
- package/lib/dist/extraction/languages/cobol.js +499 -0
- package/lib/dist/extraction/languages/cobol.js.map +1 -0
- package/lib/dist/extraction/languages/erlang.d.ts +3 -0
- package/lib/dist/extraction/languages/erlang.d.ts.map +1 -0
- package/lib/dist/extraction/languages/erlang.js +350 -0
- package/lib/dist/extraction/languages/erlang.js.map +1 -0
- package/lib/dist/extraction/languages/index.d.ts.map +1 -1
- package/lib/dist/extraction/languages/index.js +18 -0
- package/lib/dist/extraction/languages/index.js.map +1 -1
- package/lib/dist/extraction/languages/nix.d.ts +3 -0
- package/lib/dist/extraction/languages/nix.d.ts.map +1 -0
- package/lib/dist/extraction/languages/nix.js +294 -0
- package/lib/dist/extraction/languages/nix.js.map +1 -0
- package/lib/dist/extraction/languages/solidity.d.ts +3 -0
- package/lib/dist/extraction/languages/solidity.d.ts.map +1 -0
- package/lib/dist/extraction/languages/solidity.js +293 -0
- package/lib/dist/extraction/languages/solidity.js.map +1 -0
- package/lib/dist/extraction/languages/terraform.d.ts +3 -0
- package/lib/dist/extraction/languages/terraform.d.ts.map +1 -0
- package/lib/dist/extraction/languages/terraform.js +641 -0
- package/lib/dist/extraction/languages/terraform.js.map +1 -0
- package/lib/dist/extraction/languages/vbnet.d.ts +11 -0
- package/lib/dist/extraction/languages/vbnet.d.ts.map +1 -0
- package/lib/dist/extraction/languages/vbnet.js +141 -0
- package/lib/dist/extraction/languages/vbnet.js.map +1 -0
- package/lib/dist/extraction/mybatis-extractor.d.ts +30 -10
- package/lib/dist/extraction/mybatis-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/mybatis-extractor.js +140 -38
- package/lib/dist/extraction/mybatis-extractor.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.js +1 -0
- package/lib/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-types.d.ts +3 -1
- package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.d.ts +38 -0
- package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.js +753 -10
- package/lib/dist/extraction/tree-sitter.js.map +1 -1
- package/lib/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
- package/lib/dist/index.d.ts +63 -1
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +306 -2
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/installer/index.d.ts.map +1 -1
- package/lib/dist/installer/index.js +3 -1
- package/lib/dist/installer/index.js.map +1 -1
- package/lib/dist/mcp/daemon.d.ts +25 -3
- package/lib/dist/mcp/daemon.d.ts.map +1 -1
- package/lib/dist/mcp/daemon.js +39 -7
- package/lib/dist/mcp/daemon.js.map +1 -1
- package/lib/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
- package/lib/dist/mcp/dynamic-boundaries.js +2 -1
- package/lib/dist/mcp/dynamic-boundaries.js.map +1 -1
- package/lib/dist/mcp/early-ppid.d.ts +26 -0
- package/lib/dist/mcp/early-ppid.d.ts.map +1 -0
- package/lib/dist/mcp/early-ppid.js +29 -0
- package/lib/dist/mcp/early-ppid.js.map +1 -0
- package/lib/dist/mcp/index.d.ts.map +1 -1
- package/lib/dist/mcp/index.js +21 -4
- package/lib/dist/mcp/index.js.map +1 -1
- package/lib/dist/mcp/proxy.d.ts.map +1 -1
- package/lib/dist/mcp/proxy.js +21 -3
- package/lib/dist/mcp/proxy.js.map +1 -1
- package/lib/dist/mcp/startup-handshake.d.ts +44 -0
- package/lib/dist/mcp/startup-handshake.d.ts.map +1 -0
- package/lib/dist/mcp/startup-handshake.js +73 -0
- package/lib/dist/mcp/startup-handshake.js.map +1 -0
- package/lib/dist/mcp/tools.d.ts +22 -0
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +74 -9
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/project-config.d.ts +38 -0
- package/lib/dist/project-config.d.ts.map +1 -1
- package/lib/dist/project-config.js +101 -2
- package/lib/dist/project-config.js.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.js +672 -0
- package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
- package/lib/dist/resolution/frameworks/cics.d.ts +20 -0
- package/lib/dist/resolution/frameworks/cics.d.ts.map +1 -0
- package/lib/dist/resolution/frameworks/cics.js +90 -0
- package/lib/dist/resolution/frameworks/cics.js.map +1 -0
- package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/index.js +6 -0
- package/lib/dist/resolution/frameworks/index.js.map +1 -1
- package/lib/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/java.js +14 -6
- package/lib/dist/resolution/frameworks/java.js.map +1 -1
- package/lib/dist/resolution/frameworks/terraform.d.ts +38 -0
- package/lib/dist/resolution/frameworks/terraform.d.ts.map +1 -0
- package/lib/dist/resolution/frameworks/terraform.js +277 -0
- package/lib/dist/resolution/frameworks/terraform.js.map +1 -0
- package/lib/dist/resolution/import-resolver.d.ts +7 -0
- package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
- package/lib/dist/resolution/import-resolver.js +129 -4
- package/lib/dist/resolution/import-resolver.js.map +1 -1
- package/lib/dist/resolution/index.d.ts +39 -6
- package/lib/dist/resolution/index.d.ts.map +1 -1
- package/lib/dist/resolution/index.js +287 -50
- package/lib/dist/resolution/index.js.map +1 -1
- package/lib/dist/resolution/name-matcher.d.ts +0 -3
- package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
- package/lib/dist/resolution/name-matcher.js +225 -33
- package/lib/dist/resolution/name-matcher.js.map +1 -1
- package/lib/dist/resolution/strip-comments.d.ts +1 -1
- package/lib/dist/resolution/strip-comments.d.ts.map +1 -1
- package/lib/dist/resolution/strip-comments.js +49 -0
- package/lib/dist/resolution/strip-comments.js.map +1 -1
- package/lib/dist/resolution/types.d.ts +20 -0
- package/lib/dist/resolution/types.d.ts.map +1 -1
- package/lib/dist/resolution/workspace-packages.d.ts +10 -0
- package/lib/dist/resolution/workspace-packages.d.ts.map +1 -1
- package/lib/dist/resolution/workspace-packages.js +142 -4
- package/lib/dist/resolution/workspace-packages.js.map +1 -1
- package/lib/dist/search/identifier-segments.d.ts +60 -0
- package/lib/dist/search/identifier-segments.d.ts.map +1 -0
- package/lib/dist/search/identifier-segments.js +176 -0
- package/lib/dist/search/identifier-segments.js.map +1 -0
- package/lib/dist/sync/git-hooks.d.ts.map +1 -1
- package/lib/dist/sync/git-hooks.js +2 -0
- package/lib/dist/sync/git-hooks.js.map +1 -1
- package/lib/dist/sync/watcher.d.ts +10 -5
- package/lib/dist/sync/watcher.d.ts.map +1 -1
- package/lib/dist/sync/watcher.js +51 -14
- package/lib/dist/sync/watcher.js.map +1 -1
- package/lib/dist/sync/worktree.d.ts.map +1 -1
- package/lib/dist/sync/worktree.js +5 -0
- package/lib/dist/sync/worktree.js.map +1 -1
- package/lib/dist/types.d.ts +19 -1
- package/lib/dist/types.d.ts.map +1 -1
- package/lib/dist/types.js +10 -0
- package/lib/dist/types.js.map +1 -1
- package/lib/node_modules/.package-lock.json +1 -1
- package/lib/package.json +1 -1
- package/package.json +1 -1
- package/lib/dist/reasoning/config.d.ts +0 -45
- package/lib/dist/reasoning/config.d.ts.map +0 -1
- package/lib/dist/reasoning/config.js +0 -171
- package/lib/dist/reasoning/config.js.map +0 -1
- package/lib/dist/reasoning/credentials.d.ts +0 -5
- package/lib/dist/reasoning/credentials.d.ts.map +0 -1
- package/lib/dist/reasoning/credentials.js +0 -83
- package/lib/dist/reasoning/credentials.js.map +0 -1
- package/lib/dist/reasoning/login.d.ts +0 -21
- package/lib/dist/reasoning/login.d.ts.map +0 -1
- package/lib/dist/reasoning/login.js +0 -85
- package/lib/dist/reasoning/login.js.map +0 -1
- package/lib/dist/reasoning/reasoner.d.ts +0 -43
- package/lib/dist/reasoning/reasoner.d.ts.map +0 -1
- package/lib/dist/reasoning/reasoner.js +0 -308
- package/lib/dist/reasoning/reasoner.js.map +0 -1
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nixExtractor = void 0;
|
|
4
|
+
const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
|
|
5
|
+
function unwrapVariableExpression(node) {
|
|
6
|
+
if (node.type !== 'variable_expression')
|
|
7
|
+
return node;
|
|
8
|
+
return node.namedChild(0) ?? node;
|
|
9
|
+
}
|
|
10
|
+
function getCalleeName(node, source) {
|
|
11
|
+
let current = node;
|
|
12
|
+
while (current.type === 'apply_expression') {
|
|
13
|
+
const funcNode = current.childForFieldName('function') || current.namedChild(0);
|
|
14
|
+
if (!funcNode)
|
|
15
|
+
break;
|
|
16
|
+
current = funcNode;
|
|
17
|
+
}
|
|
18
|
+
current = unwrapVariableExpression(current);
|
|
19
|
+
if (current.type === 'identifier' || current.type === 'select_expression') {
|
|
20
|
+
return (0, tree_sitter_helpers_1.getNodeText)(current, source).trim();
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function getDirectCalleeName(node, source) {
|
|
25
|
+
let funcNode = node.childForFieldName('function') || node.namedChild(0);
|
|
26
|
+
if (!funcNode)
|
|
27
|
+
return null;
|
|
28
|
+
funcNode = unwrapVariableExpression(funcNode);
|
|
29
|
+
return (0, tree_sitter_helpers_1.getNodeText)(funcNode, source).trim();
|
|
30
|
+
}
|
|
31
|
+
function isStaticProjectPath(value) {
|
|
32
|
+
return ((value.startsWith('./') || value.startsWith('../')) &&
|
|
33
|
+
!/[\s{}()[\];"'<>$]/.test(value));
|
|
34
|
+
}
|
|
35
|
+
function getStaticImportPath(argNode, source) {
|
|
36
|
+
let current = argNode;
|
|
37
|
+
while (current.type === 'parenthesized_expression') {
|
|
38
|
+
const inner = current.namedChild(0);
|
|
39
|
+
if (!inner)
|
|
40
|
+
break;
|
|
41
|
+
current = inner;
|
|
42
|
+
}
|
|
43
|
+
let text = (0, tree_sitter_helpers_1.getNodeText)(current, source).trim();
|
|
44
|
+
if (((text.startsWith('"') && text.endsWith('"')) ||
|
|
45
|
+
(text.startsWith("'") && text.endsWith("'"))) &&
|
|
46
|
+
text.length >= 2) {
|
|
47
|
+
text = text.slice(1, -1);
|
|
48
|
+
}
|
|
49
|
+
return isStaticProjectPath(text) ? text : null;
|
|
50
|
+
}
|
|
51
|
+
function isReturnedAttrsetMember(node) {
|
|
52
|
+
let current = node;
|
|
53
|
+
let seenReturnedAttrset = false;
|
|
54
|
+
while (current) {
|
|
55
|
+
const parent = current.parent;
|
|
56
|
+
if (!parent)
|
|
57
|
+
break;
|
|
58
|
+
if (parent.type === 'let_expression') {
|
|
59
|
+
const bodyNode = parent.childForFieldName('body') || parent.childForFieldName('expression');
|
|
60
|
+
if (!bodyNode || !bodyNode.equals(current))
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (parent.type === 'binding' && !current.equals(node))
|
|
64
|
+
return false;
|
|
65
|
+
if (parent.type === 'formal_parameters' || parent.type === 'formals')
|
|
66
|
+
return false;
|
|
67
|
+
if (parent.type === 'attrset' ||
|
|
68
|
+
parent.type === 'rec_attrset' ||
|
|
69
|
+
parent.type === 'attrset_expression' ||
|
|
70
|
+
parent.type === 'rec_attrset_expression') {
|
|
71
|
+
seenReturnedAttrset = true;
|
|
72
|
+
}
|
|
73
|
+
current = parent;
|
|
74
|
+
}
|
|
75
|
+
return seenReturnedAttrset;
|
|
76
|
+
}
|
|
77
|
+
function getCurriedParamsAndBody(node, source) {
|
|
78
|
+
const params = [];
|
|
79
|
+
let current = node;
|
|
80
|
+
while (current.type === 'function_expression' && current.namedChildCount > 0) {
|
|
81
|
+
const bodyNode = current.namedChild(current.namedChildCount - 1);
|
|
82
|
+
if (!bodyNode)
|
|
83
|
+
break;
|
|
84
|
+
const paramPart = source.substring(current.startIndex, bodyNode.startIndex).trim();
|
|
85
|
+
const paramText = paramPart.endsWith(':') ? paramPart.slice(0, -1).trim() : paramPart;
|
|
86
|
+
if (paramText)
|
|
87
|
+
params.push(paramText);
|
|
88
|
+
if (bodyNode.type === 'function_expression') {
|
|
89
|
+
current = bodyNode;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return { params, bodyNode };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
params,
|
|
97
|
+
bodyNode: current.namedChildCount > 0 ? current.namedChild(current.namedChildCount - 1) : null,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function formatFunctionSignature(params) {
|
|
101
|
+
if (params.length === 0)
|
|
102
|
+
return '()';
|
|
103
|
+
if (params.length > 1)
|
|
104
|
+
return params.join(' : ');
|
|
105
|
+
const [param] = params;
|
|
106
|
+
if (!param)
|
|
107
|
+
return '()';
|
|
108
|
+
return param.startsWith('(') || param.includes('{') || param.includes('@') ? param : `(${param})`;
|
|
109
|
+
}
|
|
110
|
+
function inheritedAttrs(node) {
|
|
111
|
+
return node.namedChildren.find((child) => child.type === 'inherited_attrs') ?? null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* `callPackage ./pkg.nix { }` and `pkgs.callPackage ../tools/foo { }` — the
|
|
115
|
+
* nixpkgs auto-wiring idiom — reference a file the same way `import` does.
|
|
116
|
+
*/
|
|
117
|
+
function isCallPackageName(name) {
|
|
118
|
+
return (name === 'callPackage' ||
|
|
119
|
+
name === 'callPackages' ||
|
|
120
|
+
name.endsWith('.callPackage') ||
|
|
121
|
+
name.endsWith('.callPackages'));
|
|
122
|
+
}
|
|
123
|
+
/** Innermost argument of a curried apply chain: `f a b` → `a`. */
|
|
124
|
+
function getFirstApplyArgument(node) {
|
|
125
|
+
let inner = node;
|
|
126
|
+
for (;;) {
|
|
127
|
+
const fn = inner.childForFieldName('function') || inner.namedChild(0);
|
|
128
|
+
if (fn && fn.type === 'apply_expression') {
|
|
129
|
+
inner = fn;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
return inner.childForFieldName('argument') || inner.namedChild(1);
|
|
135
|
+
}
|
|
136
|
+
/** Import node + unresolved `imports` ref for a static project path. */
|
|
137
|
+
function emitFileImport(ctx, importPath, anchorNode, source) {
|
|
138
|
+
const impNode = ctx.createNode('import', importPath, anchorNode, {
|
|
139
|
+
signature: (0, tree_sitter_helpers_1.getNodeText)(anchorNode, source).trim().slice(0, 100),
|
|
140
|
+
});
|
|
141
|
+
if (impNode && ctx.nodeStack.length > 0) {
|
|
142
|
+
const fromNodeId = ctx.nodeStack[ctx.nodeStack.length - 1];
|
|
143
|
+
if (fromNodeId) {
|
|
144
|
+
ctx.addUnresolvedReference({
|
|
145
|
+
fromNodeId,
|
|
146
|
+
referenceName: importPath,
|
|
147
|
+
referenceKind: 'imports',
|
|
148
|
+
line: anchorNode.startPosition.row + 1,
|
|
149
|
+
column: anchorNode.startPosition.column,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.nixExtractor = {
|
|
155
|
+
functionTypes: [],
|
|
156
|
+
classTypes: [],
|
|
157
|
+
methodTypes: [],
|
|
158
|
+
interfaceTypes: [],
|
|
159
|
+
structTypes: [],
|
|
160
|
+
enumTypes: [],
|
|
161
|
+
typeAliasTypes: [],
|
|
162
|
+
importTypes: [],
|
|
163
|
+
callTypes: [],
|
|
164
|
+
variableTypes: [],
|
|
165
|
+
nameField: '',
|
|
166
|
+
bodyField: '',
|
|
167
|
+
paramsField: '',
|
|
168
|
+
visitNode: (node, ctx) => {
|
|
169
|
+
const { source } = ctx;
|
|
170
|
+
if (node.type === 'binding') {
|
|
171
|
+
const attrpath = node.childForFieldName('attrpath') || node.namedChild(0);
|
|
172
|
+
if (!attrpath)
|
|
173
|
+
return false;
|
|
174
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(attrpath, source).trim();
|
|
175
|
+
if (!name)
|
|
176
|
+
return false;
|
|
177
|
+
const valueNode = node.childForFieldName('expression') || node.childForFieldName('value') || node.namedChild(1);
|
|
178
|
+
if (!valueNode)
|
|
179
|
+
return false;
|
|
180
|
+
if (valueNode.type === 'function_expression') {
|
|
181
|
+
const { params, bodyNode } = getCurriedParamsAndBody(valueNode, source);
|
|
182
|
+
const funcNode = ctx.createNode('function', name, node, {
|
|
183
|
+
signature: formatFunctionSignature(params),
|
|
184
|
+
isExported: isReturnedAttrsetMember(node),
|
|
185
|
+
});
|
|
186
|
+
if (funcNode) {
|
|
187
|
+
ctx.pushScope(funcNode.id);
|
|
188
|
+
if (bodyNode)
|
|
189
|
+
ctx.visitNode(bodyNode);
|
|
190
|
+
ctx.popScope();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const initValue = (0, tree_sitter_helpers_1.getNodeText)(valueNode, source).slice(0, 100);
|
|
195
|
+
ctx.createNode('variable', name, node, {
|
|
196
|
+
signature: initValue ? `= ${initValue}${initValue.length >= 100 ? '...' : ''}` : undefined,
|
|
197
|
+
isExported: isReturnedAttrsetMember(node),
|
|
198
|
+
});
|
|
199
|
+
// NixOS/home-manager module lists: `imports = [ ./hardware.nix ../common ]`
|
|
200
|
+
// (and the flake-era `modules = [ ./configuration.nix ]`) reference files
|
|
201
|
+
// without an `import` call. Only literal `path_expression` entries count —
|
|
202
|
+
// variables and interpolations stay dynamic (silent beats wrong).
|
|
203
|
+
const finalSegment = name.split('.').pop();
|
|
204
|
+
if ((finalSegment === 'imports' || finalSegment === 'modules') && valueNode.type === 'list_expression') {
|
|
205
|
+
for (const child of valueNode.namedChildren) {
|
|
206
|
+
if (child.type === 'path_expression') {
|
|
207
|
+
const entryPath = (0, tree_sitter_helpers_1.getNodeText)(child, source).trim();
|
|
208
|
+
if (isStaticProjectPath(entryPath)) {
|
|
209
|
+
emitFileImport(ctx, entryPath, child, source);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
ctx.visitNode(valueNode);
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
if (node.type === 'function_expression') {
|
|
219
|
+
const bodyNode = node.namedChild(node.namedChildCount - 1);
|
|
220
|
+
if (bodyNode)
|
|
221
|
+
ctx.visitNode(bodyNode);
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
if (node.type === 'inherit' || node.type === 'inherit_from') {
|
|
225
|
+
const attrs = inheritedAttrs(node);
|
|
226
|
+
if (attrs) {
|
|
227
|
+
for (const child of attrs.namedChildren) {
|
|
228
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(child, source).trim();
|
|
229
|
+
if (name) {
|
|
230
|
+
ctx.createNode('variable', name, child, {
|
|
231
|
+
isExported: isReturnedAttrsetMember(child),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
for (const child of node.namedChildren) {
|
|
237
|
+
if (child.type !== 'inherited_attrs')
|
|
238
|
+
ctx.visitNode(child);
|
|
239
|
+
}
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
if (node.type === 'apply_expression') {
|
|
243
|
+
const directCallee = getDirectCalleeName(node, source);
|
|
244
|
+
const isDirectImport = directCallee === 'import' || directCallee === 'builtins.import';
|
|
245
|
+
// Wrapper objects are re-created per access, so compare with .equals(),
|
|
246
|
+
// never === — otherwise every level of a curried chain (`f a b`)
|
|
247
|
+
// re-emits the same refs.
|
|
248
|
+
const parentFn = node.parent?.type === 'apply_expression'
|
|
249
|
+
? (node.parent.childForFieldName('function') ?? node.parent.namedChild(0))
|
|
250
|
+
: null;
|
|
251
|
+
const isCalleeOfParent = parentFn ? parentFn.equals(node) : false;
|
|
252
|
+
if (!(isCalleeOfParent && !isDirectImport)) {
|
|
253
|
+
if (isDirectImport) {
|
|
254
|
+
const argNode = node.childForFieldName('argument') || node.namedChild(1);
|
|
255
|
+
const importPath = argNode ? getStaticImportPath(argNode, source) : null;
|
|
256
|
+
if (importPath) {
|
|
257
|
+
emitFileImport(ctx, importPath, node, source);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
const calleeName = getCalleeName(node, source);
|
|
262
|
+
if (calleeName && calleeName !== 'import' && calleeName !== 'builtins.import' && ctx.nodeStack.length > 0) {
|
|
263
|
+
const fromNodeId = ctx.nodeStack[ctx.nodeStack.length - 1];
|
|
264
|
+
if (fromNodeId) {
|
|
265
|
+
ctx.addUnresolvedReference({
|
|
266
|
+
fromNodeId,
|
|
267
|
+
referenceName: calleeName,
|
|
268
|
+
referenceKind: 'calls',
|
|
269
|
+
line: node.startPosition.row + 1,
|
|
270
|
+
column: node.startPosition.column,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// `callPackage ./pkg.nix { }` loads the file like `import` does; the
|
|
275
|
+
// first argument of the apply chain is the package file. Only a
|
|
276
|
+
// literal static path counts (`callPackage pkgPath { }` stays dynamic).
|
|
277
|
+
if (calleeName && isCallPackageName(calleeName)) {
|
|
278
|
+
const firstArg = getFirstApplyArgument(node);
|
|
279
|
+
const importPath = firstArg ? getStaticImportPath(firstArg, source) : null;
|
|
280
|
+
if (importPath) {
|
|
281
|
+
emitFileImport(ctx, importPath, node, source);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
for (const child of node.namedChildren) {
|
|
287
|
+
ctx.visitNode(child);
|
|
288
|
+
}
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=nix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nix.js","sourceRoot":"","sources":["../../../src/extraction/languages/nix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solidity.d.ts","sourceRoot":"","sources":["../../../src/extraction/languages/solidity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAsD9D,eAAO,MAAM,iBAAiB,EAAE,iBAiO/B,CAAC"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.solidityExtractor = void 0;
|
|
4
|
+
const tree_sitter_helpers_1 = require("../tree-sitter-helpers");
|
|
5
|
+
/**
|
|
6
|
+
* Solidity extractor — tree-sitter-solidity (ABI 14).
|
|
7
|
+
*
|
|
8
|
+
* Solidity has multiple top-level "contract-like" containers (contract /
|
|
9
|
+
* interface / library) and several callable forms that don't have a `name:`
|
|
10
|
+
* field (constructor, fallback, receive). We map:
|
|
11
|
+
* - contract_declaration → class (also library_declaration)
|
|
12
|
+
* - interface_declaration → interface
|
|
13
|
+
* - struct_declaration → struct
|
|
14
|
+
* - enum_declaration → enum (enum_value is the bare ident — no
|
|
15
|
+
* name field, so handled in visitNode)
|
|
16
|
+
* - function_definition / modifier_definition → function|method
|
|
17
|
+
* - constructor_definition / fallback_receive_definition → method (synthetic
|
|
18
|
+
* name: "constructor" / "fallback" / "receive" — these are nameless in AST)
|
|
19
|
+
* - state_variable_declaration / struct_member → field (inside contract/struct)
|
|
20
|
+
* - event_definition / error_declaration → field-shaped node carrying
|
|
21
|
+
* the event/error name so callers/refs can resolve emit X / revert X
|
|
22
|
+
* - import_directive → import
|
|
23
|
+
* - call_expression / emit_statement / revert_statement / modifier_invocation
|
|
24
|
+
* → calls (the latter three are call-shaped but use distinct AST nodes)
|
|
25
|
+
*/
|
|
26
|
+
function getInheritanceAncestors(node, source) {
|
|
27
|
+
const ancestors = [];
|
|
28
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
29
|
+
const child = node.namedChild(i);
|
|
30
|
+
if (!child || child.type !== 'inheritance_specifier')
|
|
31
|
+
continue;
|
|
32
|
+
const ancestor = (0, tree_sitter_helpers_1.getChildByField)(child, 'ancestor');
|
|
33
|
+
if (!ancestor)
|
|
34
|
+
continue;
|
|
35
|
+
// ancestor is user_defined_type → contains identifier (or scoped path)
|
|
36
|
+
const id = ancestor.descendantsOfType('identifier');
|
|
37
|
+
if (id.length > 0) {
|
|
38
|
+
const last = id[id.length - 1];
|
|
39
|
+
ancestors.push((0, tree_sitter_helpers_1.getNodeText)(last, source));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return ancestors;
|
|
43
|
+
}
|
|
44
|
+
function fallbackReceiveName(node) {
|
|
45
|
+
// tree-sitter-solidity reuses one node type for both `fallback() ...` and
|
|
46
|
+
// `receive() ...` — the keyword is an unnamed/anonymous child. Walk all
|
|
47
|
+
// children (named + unnamed) and pick the first whose text is one of these.
|
|
48
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
49
|
+
const child = node.child(i);
|
|
50
|
+
if (!child)
|
|
51
|
+
continue;
|
|
52
|
+
const t = child.text;
|
|
53
|
+
if (t === 'fallback' || t === 'receive')
|
|
54
|
+
return t;
|
|
55
|
+
}
|
|
56
|
+
return 'fallback';
|
|
57
|
+
}
|
|
58
|
+
exports.solidityExtractor = {
|
|
59
|
+
// Free functions (file-level) AND methods inside contracts use the same
|
|
60
|
+
// function_definition node — the dispatcher routes by isInsideClassLikeNode.
|
|
61
|
+
functionTypes: ['function_definition', 'modifier_definition'],
|
|
62
|
+
classTypes: ['contract_declaration', 'library_declaration'],
|
|
63
|
+
methodTypes: [
|
|
64
|
+
'function_definition',
|
|
65
|
+
'modifier_definition',
|
|
66
|
+
'constructor_definition',
|
|
67
|
+
'fallback_receive_definition',
|
|
68
|
+
],
|
|
69
|
+
interfaceTypes: ['interface_declaration'],
|
|
70
|
+
structTypes: ['struct_declaration'],
|
|
71
|
+
enumTypes: ['enum_declaration'],
|
|
72
|
+
enumMemberTypes: [], // enum_value has no name field; handled in visitNode
|
|
73
|
+
typeAliasTypes: ['user_defined_type_definition'],
|
|
74
|
+
importTypes: ['import_directive'],
|
|
75
|
+
// emit / revert / modifier_invocation are call-shaped but distinct AST nodes
|
|
76
|
+
callTypes: ['call_expression', 'emit_statement', 'revert_statement', 'modifier_invocation'],
|
|
77
|
+
// top-level state vars are file-scope constants/variables; struct_member
|
|
78
|
+
// and state_variable_declaration inside a contract are fields (handled via
|
|
79
|
+
// fieldTypes + isInsideClassLikeNode).
|
|
80
|
+
variableTypes: ['state_variable_declaration', 'constant_variable_declaration'],
|
|
81
|
+
fieldTypes: ['state_variable_declaration', 'struct_member'],
|
|
82
|
+
nameField: 'name',
|
|
83
|
+
bodyField: 'body',
|
|
84
|
+
paramsField: 'parameters',
|
|
85
|
+
returnField: 'return_type',
|
|
86
|
+
// constructor / fallback / receive have no `name:` field — synthesize one.
|
|
87
|
+
resolveName: (node, _source) => {
|
|
88
|
+
if (node.type === 'constructor_definition')
|
|
89
|
+
return 'constructor';
|
|
90
|
+
if (node.type === 'fallback_receive_definition')
|
|
91
|
+
return fallbackReceiveName(node);
|
|
92
|
+
return undefined;
|
|
93
|
+
},
|
|
94
|
+
getSignature: (node, source) => {
|
|
95
|
+
// tree-sitter-solidity does NOT wrap params in a `parameters:` field — each
|
|
96
|
+
// `parameter` node is a direct child of function/modifier/constructor. We
|
|
97
|
+
// reconstruct `(t1 a, t2 b)` by walking those siblings; getChildByField
|
|
98
|
+
// would return null and lose the entire param list.
|
|
99
|
+
const params = [];
|
|
100
|
+
let returnType;
|
|
101
|
+
let visibility;
|
|
102
|
+
let mutability;
|
|
103
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
104
|
+
const child = node.namedChild(i);
|
|
105
|
+
if (!child)
|
|
106
|
+
continue;
|
|
107
|
+
const fieldName = node.fieldNameForNamedChild(i);
|
|
108
|
+
if (child.type === 'parameter' && fieldName !== 'return_type') {
|
|
109
|
+
params.push((0, tree_sitter_helpers_1.getNodeText)(child, source));
|
|
110
|
+
}
|
|
111
|
+
else if (child.type === 'return_type_definition' || fieldName === 'return_type') {
|
|
112
|
+
returnType = child;
|
|
113
|
+
}
|
|
114
|
+
else if (child.type === 'visibility') {
|
|
115
|
+
visibility = child;
|
|
116
|
+
}
|
|
117
|
+
else if (child.type === 'state_mutability') {
|
|
118
|
+
mutability = child;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const parts = [];
|
|
122
|
+
parts.push(`(${params.join(', ')})`);
|
|
123
|
+
if (visibility)
|
|
124
|
+
parts.push((0, tree_sitter_helpers_1.getNodeText)(visibility, source));
|
|
125
|
+
if (mutability)
|
|
126
|
+
parts.push((0, tree_sitter_helpers_1.getNodeText)(mutability, source));
|
|
127
|
+
if (returnType)
|
|
128
|
+
parts.push((0, tree_sitter_helpers_1.getNodeText)(returnType, source));
|
|
129
|
+
return parts.join(' ');
|
|
130
|
+
},
|
|
131
|
+
getVisibility: (node) => {
|
|
132
|
+
// Solidity functions: public/private/internal/external — `external` maps
|
|
133
|
+
// to 'public' for our purposes (callable from outside the contract).
|
|
134
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
135
|
+
const child = node.namedChild(i);
|
|
136
|
+
if (child?.type !== 'visibility')
|
|
137
|
+
continue;
|
|
138
|
+
const t = child.text.trim();
|
|
139
|
+
if (t === 'public' || t === 'external')
|
|
140
|
+
return 'public';
|
|
141
|
+
if (t === 'private')
|
|
142
|
+
return 'private';
|
|
143
|
+
if (t === 'internal')
|
|
144
|
+
return 'internal';
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
147
|
+
},
|
|
148
|
+
// `constant_variable_declaration` is by definition a constant; the generic
|
|
149
|
+
// variable extractor defaults to kind:'variable' otherwise.
|
|
150
|
+
isConst: (node) => node.type === 'constant_variable_declaration',
|
|
151
|
+
visitNode: (node, ctx) => {
|
|
152
|
+
const t = node.type;
|
|
153
|
+
// Solidity inheritance: `contract MyToken is Token, IERC20 { ... }`. The
|
|
154
|
+
// core's extractInheritance walks for `extends_clause`/`base_class_clause`
|
|
155
|
+
// shaped children, which Solidity doesn't have — its `inheritance_specifier`
|
|
156
|
+
// children are direct siblings of the `body:` field. We piggyback on the
|
|
157
|
+
// standard contract/library/interface dispatch (which fires AFTER this
|
|
158
|
+
// hook returns false) by emitting the extends references here, then
|
|
159
|
+
// returning false so the generic class extractor still creates the node.
|
|
160
|
+
// Each ancestor → one `extends` reference; the resolver then upgrades it
|
|
161
|
+
// to a real edge. Without these refs, "what inherits from Ownable" /
|
|
162
|
+
// "trace inherited onlyOwner" can't traverse the contract graph and the
|
|
163
|
+
// agent has to Read each file to reconstruct the hierarchy.
|
|
164
|
+
if (t === 'contract_declaration' ||
|
|
165
|
+
t === 'library_declaration' ||
|
|
166
|
+
t === 'interface_declaration') {
|
|
167
|
+
// Mirror the generic class path — create the node (the extends refs
|
|
168
|
+
// need its id), emit the refs, walk the body — then return true to
|
|
169
|
+
// short-circuit the generic dispatch so nothing is doubled.
|
|
170
|
+
const ancestors = getInheritanceAncestors(node, ctx.source);
|
|
171
|
+
const nameNode = (0, tree_sitter_helpers_1.getChildByField)(node, 'name');
|
|
172
|
+
const body = (0, tree_sitter_helpers_1.getChildByField)(node, 'body');
|
|
173
|
+
if (!nameNode)
|
|
174
|
+
return false;
|
|
175
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(nameNode, ctx.source);
|
|
176
|
+
const kind = t === 'interface_declaration' ? 'interface' : 'class';
|
|
177
|
+
const created = ctx.createNode(kind, name, node);
|
|
178
|
+
if (!created)
|
|
179
|
+
return true;
|
|
180
|
+
// Solidity uses one keyword (`is`) for both class-extends-class and
|
|
181
|
+
// class-implements-interface, indistinguishable at parse time. Emit
|
|
182
|
+
// `extends` for every ancestor — the resolver's interface-impl synthesizer
|
|
183
|
+
// (Phase 5.5) reclassifies a class→interface edge as `implements` based
|
|
184
|
+
// on the target node kind, matching how Java/C# extractors do it.
|
|
185
|
+
for (const ancestor of ancestors) {
|
|
186
|
+
ctx.addUnresolvedReference({
|
|
187
|
+
fromNodeId: created.id,
|
|
188
|
+
referenceName: ancestor,
|
|
189
|
+
referenceKind: 'extends',
|
|
190
|
+
line: node.startPosition.row + 1,
|
|
191
|
+
column: node.startPosition.column,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
ctx.pushScope(created.id);
|
|
195
|
+
if (body) {
|
|
196
|
+
for (let i = 0; i < body.namedChildCount; i++) {
|
|
197
|
+
const child = body.namedChild(i);
|
|
198
|
+
if (child)
|
|
199
|
+
ctx.visitNode(child);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
ctx.popScope();
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
// tree-sitter-solidity puts struct_member / enum_value as DIRECT children
|
|
206
|
+
// of struct_declaration / enum_declaration — there is no `body:` field, so
|
|
207
|
+
// the core's extractStruct/extractEnum (which require a body field) bails.
|
|
208
|
+
// We extract these here, push the parent on the scope stack, walk the
|
|
209
|
+
// direct children, and emit one struct/enum node + its members.
|
|
210
|
+
if (t === 'struct_declaration' || t === 'enum_declaration') {
|
|
211
|
+
const nameNode = (0, tree_sitter_helpers_1.getChildByField)(node, 'name');
|
|
212
|
+
if (!nameNode)
|
|
213
|
+
return true;
|
|
214
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(nameNode, ctx.source);
|
|
215
|
+
const kind = t === 'struct_declaration' ? 'struct' : 'enum';
|
|
216
|
+
const created = ctx.createNode(kind, name, node);
|
|
217
|
+
if (!created)
|
|
218
|
+
return true;
|
|
219
|
+
ctx.pushScope(created.id);
|
|
220
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
221
|
+
const child = node.namedChild(i);
|
|
222
|
+
if (!child)
|
|
223
|
+
continue;
|
|
224
|
+
if (child === nameNode)
|
|
225
|
+
continue;
|
|
226
|
+
ctx.visitNode(child);
|
|
227
|
+
}
|
|
228
|
+
ctx.popScope();
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// enum_value is the bare identifier of an enum case — no `name:` field, so
|
|
232
|
+
// the generic enum-member dispatch can't find it. Use the node's own text.
|
|
233
|
+
if (t === 'enum_value') {
|
|
234
|
+
ctx.createNode('enum_member', (0, tree_sitter_helpers_1.getNodeText)(node, ctx.source), node);
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
// event SomeEvent(...) — preserve event name as a field-shaped node so
|
|
238
|
+
// `emit SomeEvent(...)` (an emit_statement) can resolve to it. We use
|
|
239
|
+
// `field` kind because Solidity events are member declarations of a
|
|
240
|
+
// contract, similar in spirit to fields, and `field` reuses the FTS index
|
|
241
|
+
// without adding a new NodeKind.
|
|
242
|
+
if (t === 'event_definition') {
|
|
243
|
+
const nameNode = (0, tree_sitter_helpers_1.getChildByField)(node, 'name');
|
|
244
|
+
if (!nameNode)
|
|
245
|
+
return true;
|
|
246
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(nameNode, ctx.source);
|
|
247
|
+
ctx.createNode('field', name, node, {
|
|
248
|
+
signature: (0, tree_sitter_helpers_1.getNodeText)(node, ctx.source).trim().slice(0, 200),
|
|
249
|
+
});
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
// error MyError(...) — same reasoning as event_definition. revert MyError()
|
|
253
|
+
// (a revert_statement) is captured via callTypes and resolves by name.
|
|
254
|
+
if (t === 'error_declaration') {
|
|
255
|
+
const nameNode = (0, tree_sitter_helpers_1.getChildByField)(node, 'name');
|
|
256
|
+
if (!nameNode)
|
|
257
|
+
return true;
|
|
258
|
+
const name = (0, tree_sitter_helpers_1.getNodeText)(nameNode, ctx.source);
|
|
259
|
+
ctx.createNode('field', name, node, {
|
|
260
|
+
signature: (0, tree_sitter_helpers_1.getNodeText)(node, ctx.source).trim().slice(0, 200),
|
|
261
|
+
});
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
// struct_member: named field inside a struct. It has `name:` + `type:` —
|
|
265
|
+
// the generic field dispatch handles it via fieldTypes, so no custom code.
|
|
266
|
+
return false;
|
|
267
|
+
},
|
|
268
|
+
// import "X"; / import {A, B} from "X"; / import * as X from "Y";
|
|
269
|
+
// We surface the SOURCE path as the moduleName — that's what
|
|
270
|
+
// import-resolver matches against on disk. The `import_name:` field (if
|
|
271
|
+
// present, for the symbolic-import form) is intentionally ignored here; the
|
|
272
|
+
// SOURCE is the file being imported from.
|
|
273
|
+
extractImport: (node, source) => {
|
|
274
|
+
const importText = source.substring(node.startIndex, node.endIndex).trim();
|
|
275
|
+
const sourceField = (0, tree_sitter_helpers_1.getChildByField)(node, 'source');
|
|
276
|
+
if (!sourceField)
|
|
277
|
+
return null;
|
|
278
|
+
// source is a `string` node — strip quotes via descendantsOfType lookup.
|
|
279
|
+
const stringContent = sourceField.descendantsOfType('string_literal');
|
|
280
|
+
let moduleName;
|
|
281
|
+
if (stringContent.length > 0) {
|
|
282
|
+
moduleName = (0, tree_sitter_helpers_1.getNodeText)(stringContent[0], source);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
moduleName = (0, tree_sitter_helpers_1.getNodeText)(sourceField, source);
|
|
286
|
+
}
|
|
287
|
+
moduleName = moduleName.replace(/^["']|["']$/g, '').trim();
|
|
288
|
+
if (!moduleName)
|
|
289
|
+
return null;
|
|
290
|
+
return { moduleName, signature: importText };
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
//# sourceMappingURL=solidity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solidity.js","sourceRoot":"","sources":["../../../src/extraction/languages/solidity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/extraction/languages/terraform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAsL9D,eAAO,MAAM,kBAAkB,EAAE,iBAiJhC,CAAC"}
|