@nithin554/code-crawler 0.1.38 → 0.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +206 -33
- package/dist/crawler.d.ts +27 -1
- package/dist/crawler.js +360 -11
- package/dist/crawler.js.map +1 -1
- package/dist/graph/queries.d.ts +70 -4
- package/dist/graph/queries.js +125 -1
- package/dist/graph/queries.js.map +1 -1
- package/dist/graph/schema.d.ts +24 -2
- package/dist/graph/schema.js +9 -0
- package/dist/graph/schema.js.map +1 -1
- package/dist/parser/controlFlow.d.ts +27 -0
- package/dist/parser/controlFlow.js +82 -0
- package/dist/parser/controlFlow.js.map +1 -0
- package/dist/parser/language.d.ts +101 -2
- package/dist/parser/languages/index.js +4 -0
- package/dist/parser/languages/index.js.map +1 -1
- package/dist/parser/languages/java.js +160 -6
- package/dist/parser/languages/java.js.map +1 -1
- package/dist/parser/languages/python.d.ts +2 -0
- package/dist/parser/languages/python.js +956 -0
- package/dist/parser/languages/python.js.map +1 -0
- package/dist/parser/languages/typescript.d.ts +2 -0
- package/dist/parser/languages/typescript.js +1111 -0
- package/dist/parser/languages/typescript.js.map +1 -0
- package/dist/parser/moduleId.d.ts +35 -0
- package/dist/parser/moduleId.js +93 -0
- package/dist/parser/moduleId.js.map +1 -0
- package/dist/parser/treeSitter.d.ts +6 -0
- package/dist/parser/treeSitter.js +13 -2
- package/dist/parser/treeSitter.js.map +1 -1
- package/dist/resolver/common.d.ts +52 -0
- package/dist/resolver/common.js +624 -0
- package/dist/resolver/common.js.map +1 -0
- package/dist/resolver/dynamic.js +66 -1
- package/dist/resolver/dynamic.js.map +1 -1
- package/dist/resolver/genericResolver.d.ts +45 -0
- package/dist/resolver/genericResolver.js +235 -0
- package/dist/resolver/genericResolver.js.map +1 -0
- package/dist/resolver/types.d.ts +24 -1
- package/dist/resolver/types.js +50 -0
- package/dist/resolver/types.js.map +1 -1
- package/dist/server.js +108 -5
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
import { DEFAULT_EXPORT_SUFFIX, MODULE_ID_PREFIX, moduleNodeId, unwrapModuleNodeId } from "../parser/moduleId.js";
|
|
2
|
+
/**
|
|
3
|
+
* Language-neutral helpers shared by the Java and generic resolvers:
|
|
4
|
+
* type-text normalization, scope/import resolution, receiver inference and
|
|
5
|
+
* method lookup. Keeping them here means the Python/TypeScript resolver only
|
|
6
|
+
* has to encode the language's dispatch rules.
|
|
7
|
+
*/
|
|
8
|
+
/** Globals that never live in the project (browser/Node/JS built-ins). */
|
|
9
|
+
const GLOBAL_OBJECTS = new Set([
|
|
10
|
+
"console",
|
|
11
|
+
"process",
|
|
12
|
+
"global",
|
|
13
|
+
"globalThis",
|
|
14
|
+
"window",
|
|
15
|
+
"document",
|
|
16
|
+
"navigator",
|
|
17
|
+
"localStorage",
|
|
18
|
+
"sessionStorage",
|
|
19
|
+
"Math",
|
|
20
|
+
"JSON",
|
|
21
|
+
"Object",
|
|
22
|
+
"Array",
|
|
23
|
+
"Promise",
|
|
24
|
+
"Date",
|
|
25
|
+
"Number",
|
|
26
|
+
"String",
|
|
27
|
+
"Boolean",
|
|
28
|
+
"Symbol",
|
|
29
|
+
"RegExp",
|
|
30
|
+
"Error",
|
|
31
|
+
"Reflect",
|
|
32
|
+
"Proxy",
|
|
33
|
+
"Intl",
|
|
34
|
+
"Buffer",
|
|
35
|
+
"URL",
|
|
36
|
+
"URLSearchParams",
|
|
37
|
+
"fetch",
|
|
38
|
+
"setTimeout",
|
|
39
|
+
"setInterval",
|
|
40
|
+
"clearTimeout",
|
|
41
|
+
"clearInterval",
|
|
42
|
+
"structuredClone",
|
|
43
|
+
"queueMicrotask",
|
|
44
|
+
]);
|
|
45
|
+
/** Python builtins that are not project code. */
|
|
46
|
+
const PYTHON_BUILTINS = new Set([
|
|
47
|
+
"print",
|
|
48
|
+
"len",
|
|
49
|
+
"range",
|
|
50
|
+
"enumerate",
|
|
51
|
+
"zip",
|
|
52
|
+
"map",
|
|
53
|
+
"filter",
|
|
54
|
+
"sorted",
|
|
55
|
+
"reversed",
|
|
56
|
+
"sum",
|
|
57
|
+
"min",
|
|
58
|
+
"max",
|
|
59
|
+
"abs",
|
|
60
|
+
"any",
|
|
61
|
+
"all",
|
|
62
|
+
"isinstance",
|
|
63
|
+
"issubclass",
|
|
64
|
+
"getattr",
|
|
65
|
+
"setattr",
|
|
66
|
+
"hasattr",
|
|
67
|
+
"delattr",
|
|
68
|
+
"open",
|
|
69
|
+
"input",
|
|
70
|
+
"repr",
|
|
71
|
+
"id",
|
|
72
|
+
"hash",
|
|
73
|
+
"iter",
|
|
74
|
+
"next",
|
|
75
|
+
"dir",
|
|
76
|
+
"vars",
|
|
77
|
+
"callable",
|
|
78
|
+
"round",
|
|
79
|
+
"format",
|
|
80
|
+
"type",
|
|
81
|
+
"super",
|
|
82
|
+
"object",
|
|
83
|
+
"str",
|
|
84
|
+
"int",
|
|
85
|
+
"float",
|
|
86
|
+
"bool",
|
|
87
|
+
"bytes",
|
|
88
|
+
"bytearray",
|
|
89
|
+
"list",
|
|
90
|
+
"dict",
|
|
91
|
+
"set",
|
|
92
|
+
"tuple",
|
|
93
|
+
"frozenset",
|
|
94
|
+
"Exception",
|
|
95
|
+
"ValueError",
|
|
96
|
+
"TypeError",
|
|
97
|
+
"KeyError",
|
|
98
|
+
"RuntimeError",
|
|
99
|
+
"NotImplementedError",
|
|
100
|
+
]);
|
|
101
|
+
/** Wrappers whose inner type is the interesting one for dispatch. */
|
|
102
|
+
const TRANSPARENT_WRAPPERS = new Set([
|
|
103
|
+
"Optional",
|
|
104
|
+
"Awaitable",
|
|
105
|
+
"Coroutine",
|
|
106
|
+
"Promise",
|
|
107
|
+
"PromiseLike",
|
|
108
|
+
"List",
|
|
109
|
+
"Array",
|
|
110
|
+
"ReadonlyArray",
|
|
111
|
+
"Readonly",
|
|
112
|
+
"Partial",
|
|
113
|
+
"Required",
|
|
114
|
+
"Set",
|
|
115
|
+
"FrozenSet",
|
|
116
|
+
"Sequence",
|
|
117
|
+
"Iterable",
|
|
118
|
+
"Iterator",
|
|
119
|
+
"Generator",
|
|
120
|
+
"AsyncIterable",
|
|
121
|
+
"Collection",
|
|
122
|
+
"Type",
|
|
123
|
+
"ClassVar",
|
|
124
|
+
"Ref",
|
|
125
|
+
"RefObject",
|
|
126
|
+
"Signal",
|
|
127
|
+
"ComputedRef",
|
|
128
|
+
"Observable",
|
|
129
|
+
"Future",
|
|
130
|
+
"Task",
|
|
131
|
+
"Repository",
|
|
132
|
+
"Maybe",
|
|
133
|
+
"Annotated",
|
|
134
|
+
"Final",
|
|
135
|
+
]);
|
|
136
|
+
/** Split `text` on top-level occurrences of `separator`. */
|
|
137
|
+
export function splitTopLevel(text, separator) {
|
|
138
|
+
const parts = [];
|
|
139
|
+
let depth = 0;
|
|
140
|
+
let quote = null;
|
|
141
|
+
let current = "";
|
|
142
|
+
for (let i = 0; i < text.length; i++) {
|
|
143
|
+
const ch = text[i];
|
|
144
|
+
if (quote) {
|
|
145
|
+
current += ch;
|
|
146
|
+
if (ch === quote && text[i - 1] !== "\\")
|
|
147
|
+
quote = null;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
151
|
+
quote = ch;
|
|
152
|
+
current += ch;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (ch === "(" || ch === "[" || ch === "{" || ch === "<")
|
|
156
|
+
depth++;
|
|
157
|
+
if (ch === ")" || ch === "]" || ch === "}" || ch === ">")
|
|
158
|
+
depth--;
|
|
159
|
+
if (depth === 0 && text.startsWith(separator, i)) {
|
|
160
|
+
parts.push(current);
|
|
161
|
+
current = "";
|
|
162
|
+
i += separator.length - 1;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
current += ch;
|
|
166
|
+
}
|
|
167
|
+
parts.push(current);
|
|
168
|
+
return parts;
|
|
169
|
+
}
|
|
170
|
+
/** Strip TS/Python type syntax down to a dispatchable type name. */
|
|
171
|
+
export function normalizeTypeText(raw) {
|
|
172
|
+
let text = (raw ?? "").trim();
|
|
173
|
+
if (!text)
|
|
174
|
+
return "";
|
|
175
|
+
text = text.replace(/^->\s*/, "").replace(/^:\s*/, "");
|
|
176
|
+
text = text.replace(/^(readonly|typeof|final|val|var)\s+/i, "");
|
|
177
|
+
text = splitTopLevel(text, "&").slice(0, 1).join("&").trim();
|
|
178
|
+
const union = splitTopLevel(text, "|").map((p) => p.trim()).filter((p) => p && !/^(null|undefined|None|nil)$/i.test(p));
|
|
179
|
+
text = union[0] ?? "";
|
|
180
|
+
text = text.replace(/\[\s*\]$/, "");
|
|
181
|
+
text = text.replace(/^["']|["']$/g, "");
|
|
182
|
+
const wrapper = /^([A-Za-z_$][\w$.]*)\s*[<[[](.*)[>\]]\s*$/.exec(text);
|
|
183
|
+
if (wrapper) {
|
|
184
|
+
const base = (wrapper[1] ?? "").split(".").pop() ?? "";
|
|
185
|
+
if (TRANSPARENT_WRAPPERS.has(base)) {
|
|
186
|
+
const inner = splitTopLevel(wrapper[2] ?? "", ",")[0] ?? "";
|
|
187
|
+
return normalizeTypeText(inner);
|
|
188
|
+
}
|
|
189
|
+
return base;
|
|
190
|
+
}
|
|
191
|
+
return text.replace(/\s+/g, "");
|
|
192
|
+
}
|
|
193
|
+
/** The enclosing type id plus all resolvable ancestors (breadth-first). */
|
|
194
|
+
export function enclosingChain(index, typeId) {
|
|
195
|
+
const out = [];
|
|
196
|
+
const seen = new Set();
|
|
197
|
+
let frontier = [typeId];
|
|
198
|
+
for (let depth = 0; depth < 10 && frontier.length > 0; depth++) {
|
|
199
|
+
const next = [];
|
|
200
|
+
for (const current of frontier) {
|
|
201
|
+
if (seen.has(current))
|
|
202
|
+
continue;
|
|
203
|
+
seen.add(current);
|
|
204
|
+
out.push(current);
|
|
205
|
+
for (const parentName of index.parentsByFqn.get(current) ?? []) {
|
|
206
|
+
for (const parent of index.resolveType(parentName))
|
|
207
|
+
next.push(parent);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
frontier = next;
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
/** Owning module id of a type or module-level function id, if any. */
|
|
215
|
+
export function moduleIdOf(typeId) {
|
|
216
|
+
if (typeId.startsWith(MODULE_ID_PREFIX)) {
|
|
217
|
+
return unwrapModuleNodeId(typeId.split("#")[0] ?? "") ?? null;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
/** Resolve an imported binding (scope value) to type or module node ids. */
|
|
222
|
+
export function resolveScopeValue(file, index, value, depth = 0) {
|
|
223
|
+
if (!value || depth > 5)
|
|
224
|
+
return [];
|
|
225
|
+
if (value.endsWith(DEFAULT_EXPORT_SUFFIX)) {
|
|
226
|
+
const moduleId = index.resolveModuleId(value.slice(0, -DEFAULT_EXPORT_SUFFIX.length));
|
|
227
|
+
if (!moduleId)
|
|
228
|
+
return [];
|
|
229
|
+
const target = index.defaultExports.get(moduleId);
|
|
230
|
+
return target ? [target] : [moduleNodeId(moduleId)];
|
|
231
|
+
}
|
|
232
|
+
if (value.startsWith("?suffix:")) {
|
|
233
|
+
const first = index.matchModuleSuffix(value.slice("?suffix:".length))[0];
|
|
234
|
+
return first ? [moduleNodeId(first)] : [];
|
|
235
|
+
}
|
|
236
|
+
if (index.kindByFqn.has(value))
|
|
237
|
+
return [value];
|
|
238
|
+
if (index.moduleExists(value))
|
|
239
|
+
return [moduleNodeId(value)];
|
|
240
|
+
const scopedType = file.scopeTypes?.get(value);
|
|
241
|
+
if (scopedType && scopedType !== value)
|
|
242
|
+
return resolveScopeValue(file, index, scopedType, depth + 1);
|
|
243
|
+
const scopedModule = file.scopeModules?.get(value);
|
|
244
|
+
if (scopedModule) {
|
|
245
|
+
const matches = scopedModule.startsWith("?suffix:")
|
|
246
|
+
? index.matchModuleSuffix(scopedModule.slice("?suffix:".length))
|
|
247
|
+
: [];
|
|
248
|
+
const moduleId = matches[0] ?? index.resolveModuleId(scopedModule);
|
|
249
|
+
return moduleId ? [moduleNodeId(moduleId)] : [];
|
|
250
|
+
}
|
|
251
|
+
const external = file.externalModules?.get(value);
|
|
252
|
+
if (external)
|
|
253
|
+
return [];
|
|
254
|
+
return [];
|
|
255
|
+
}
|
|
256
|
+
/** True when the dotted path names a module declared in the project. */
|
|
257
|
+
export function belongsToProject(index, dotted) {
|
|
258
|
+
const parts = dotted.split(".").filter(Boolean);
|
|
259
|
+
for (let i = parts.length; i > 0; i--) {
|
|
260
|
+
const prefix = parts.slice(0, i).join(".");
|
|
261
|
+
if (index.moduleExists(prefix))
|
|
262
|
+
return true;
|
|
263
|
+
if (index.resolveModuleId(prefix))
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
/** External package for an unresolved dotted reference (`fastapi.Depends` -> `fastapi`). */
|
|
269
|
+
export function externalPackageOf(file, index, dotted) {
|
|
270
|
+
const root = dotted.split(".")[0] ?? "";
|
|
271
|
+
const explicit = file.externalModules?.get(root) ?? file.externalModules?.get(dotted);
|
|
272
|
+
if (explicit)
|
|
273
|
+
return explicit;
|
|
274
|
+
if (!root || GLOBAL_OBJECTS.has(root))
|
|
275
|
+
return root || null;
|
|
276
|
+
// `my_list.append` on a container value is stdlib, not a package named after
|
|
277
|
+
// its type.
|
|
278
|
+
if (file.language === "python" && isBuiltinTypeName(root))
|
|
279
|
+
return "builtins";
|
|
280
|
+
if (belongsToProject(index, dotted))
|
|
281
|
+
return null;
|
|
282
|
+
return root;
|
|
283
|
+
}
|
|
284
|
+
/** Resolve a raw type name to candidate type ids declared in the project. */
|
|
285
|
+
export function resolveTypeCandidates(file, index, raw, depth = 0) {
|
|
286
|
+
if (!raw || depth > 4)
|
|
287
|
+
return [];
|
|
288
|
+
const text = normalizeTypeText(raw);
|
|
289
|
+
if (!text)
|
|
290
|
+
return [];
|
|
291
|
+
if (index.kindByFqn.has(text))
|
|
292
|
+
return [text];
|
|
293
|
+
const scoped = file.scopeTypes?.get(text);
|
|
294
|
+
if (scoped && scoped !== text) {
|
|
295
|
+
const resolved = resolveScopeValue(file, index, scoped, depth + 1).filter((id) => index.kindByFqn.has(id));
|
|
296
|
+
if (resolved.length > 0)
|
|
297
|
+
return resolved;
|
|
298
|
+
}
|
|
299
|
+
if (text.includes(".")) {
|
|
300
|
+
const tail = text.split(".").pop();
|
|
301
|
+
// Module node ids (`module:app.service`) are namespaces, not types, so a
|
|
302
|
+
// receiver named `service` must not match one by suffix.
|
|
303
|
+
const suffixMatches = [...index.kindByFqn.keys()].filter((id) => index.kindByFqn.get(id) !== "module" && (id === text || id.endsWith(`.${text}`)));
|
|
304
|
+
if (suffixMatches.length > 0)
|
|
305
|
+
return suffixMatches;
|
|
306
|
+
const scopedTail = file.scopeTypes?.get(tail);
|
|
307
|
+
if (scopedTail && scopedTail !== tail) {
|
|
308
|
+
const resolved = resolveScopeValue(file, index, scopedTail, depth + 1).filter((id) => index.kindByFqn.has(id));
|
|
309
|
+
if (resolved.length > 0)
|
|
310
|
+
return resolved;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
const simple = text.split(".").pop();
|
|
314
|
+
if (file.moduleId) {
|
|
315
|
+
const local = `${file.moduleId}.${simple}`;
|
|
316
|
+
if (index.kindByFqn.has(local))
|
|
317
|
+
return [local];
|
|
318
|
+
}
|
|
319
|
+
const byName = (index.typesBySimpleName.get(simple) ?? []).filter((id) => index.kindByFqn.get(id) !== "module");
|
|
320
|
+
return byName;
|
|
321
|
+
}
|
|
322
|
+
/** Find a field declared on `typeId` or any resolvable ancestor. */
|
|
323
|
+
export function findField(index, typeId, name) {
|
|
324
|
+
for (const candidate of enclosingChain(index, typeId)) {
|
|
325
|
+
const field = (index.fieldsByFqn.get(candidate) ?? []).find((f) => f.name === name);
|
|
326
|
+
if (field)
|
|
327
|
+
return field;
|
|
328
|
+
}
|
|
329
|
+
return undefined;
|
|
330
|
+
}
|
|
331
|
+
/** Methods declared directly on a type (or module) with the given name. */
|
|
332
|
+
export function findMethodsNamed(index, typeId, name) {
|
|
333
|
+
return (index.methodsByFqn.get(typeId) ?? []).filter((m) => m.name === name);
|
|
334
|
+
}
|
|
335
|
+
/** Methods named `name` on `typeId` or its ancestors, nearest declaration first. */
|
|
336
|
+
export function findInherited(index, typeId, name) {
|
|
337
|
+
for (const candidate of enclosingChain(index, typeId)) {
|
|
338
|
+
const found = findMethodsNamed(index, candidate, name);
|
|
339
|
+
if (found.length > 0)
|
|
340
|
+
return found;
|
|
341
|
+
}
|
|
342
|
+
return [];
|
|
343
|
+
}
|
|
344
|
+
/** Pick the overload whose arity best matches the call site. */
|
|
345
|
+
export function pickOverload(methods, argCount) {
|
|
346
|
+
if (methods.length === 0)
|
|
347
|
+
return undefined;
|
|
348
|
+
if (methods.length === 1)
|
|
349
|
+
return methods[0];
|
|
350
|
+
const exact = methods.find((m) => m.params.length === argCount);
|
|
351
|
+
if (exact)
|
|
352
|
+
return exact;
|
|
353
|
+
const variadic = methods.find((m) => m.params.length < argCount);
|
|
354
|
+
if (variadic)
|
|
355
|
+
return variadic;
|
|
356
|
+
return methods.slice().sort((a, b) => a.params.length - b.params.length)[0];
|
|
357
|
+
}
|
|
358
|
+
/** True when a bare name is a Python builtin (external code). */
|
|
359
|
+
export function isPythonBuiltin(name) {
|
|
360
|
+
return PYTHON_BUILTINS.has(name);
|
|
361
|
+
}
|
|
362
|
+
/** Container/primitive type names that carry no project identity. */
|
|
363
|
+
const BUILTIN_TYPE_NAMES = new Set([
|
|
364
|
+
...Array.from(PYTHON_BUILTINS),
|
|
365
|
+
"str",
|
|
366
|
+
"int",
|
|
367
|
+
"float",
|
|
368
|
+
"bool",
|
|
369
|
+
"bytes",
|
|
370
|
+
"bytearray",
|
|
371
|
+
"complex",
|
|
372
|
+
"list",
|
|
373
|
+
"dict",
|
|
374
|
+
"set",
|
|
375
|
+
"tuple",
|
|
376
|
+
"frozenset",
|
|
377
|
+
"object",
|
|
378
|
+
"None",
|
|
379
|
+
"string",
|
|
380
|
+
"number",
|
|
381
|
+
"boolean",
|
|
382
|
+
"any",
|
|
383
|
+
"unknown",
|
|
384
|
+
"void",
|
|
385
|
+
"never",
|
|
386
|
+
"symbol",
|
|
387
|
+
"bigint",
|
|
388
|
+
"null",
|
|
389
|
+
"undefined",
|
|
390
|
+
"Array",
|
|
391
|
+
"Map",
|
|
392
|
+
"Set",
|
|
393
|
+
"WeakMap",
|
|
394
|
+
"WeakSet",
|
|
395
|
+
"Record",
|
|
396
|
+
]);
|
|
397
|
+
/** True when a type name is a language primitive or container, not a project type. */
|
|
398
|
+
export function isBuiltinTypeName(raw) {
|
|
399
|
+
const text = normalizeTypeText(raw);
|
|
400
|
+
if (!text)
|
|
401
|
+
return false;
|
|
402
|
+
const base = text.split(".").pop() ?? text;
|
|
403
|
+
return BUILTIN_TYPE_NAMES.has(text) || BUILTIN_TYPE_NAMES.has(base);
|
|
404
|
+
}
|
|
405
|
+
/** True when a bare name is a JS/Node/browser global (external code). */
|
|
406
|
+
export function isGlobalObject(name) {
|
|
407
|
+
return GLOBAL_OBJECTS.has(name);
|
|
408
|
+
}
|
|
409
|
+
function splitReceiver(text) {
|
|
410
|
+
return splitTopLevel(text.replace(/\?\./g, "."), ".").map((p) => p.trim()).filter(Boolean);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Infer what a call receiver refers to: a chain of types, one or more modules,
|
|
414
|
+
* or external code. This is the heart of cross-language receiver inference.
|
|
415
|
+
*/
|
|
416
|
+
export function resolveReceiver(file, index, receiver, enclosingTypeId, enclosingMethodId) {
|
|
417
|
+
const enclosingTypes = enclosingChain(index, enclosingTypeId);
|
|
418
|
+
const text = (receiver ?? "").trim();
|
|
419
|
+
if (!text) {
|
|
420
|
+
const own = moduleIdOf(enclosingTypeId);
|
|
421
|
+
return { types: enclosingTypes, moduleIds: own ? [own] : [], reason: "implicit this/module scope" };
|
|
422
|
+
}
|
|
423
|
+
if (text === "this" || text === "self") {
|
|
424
|
+
return { types: enclosingTypes, moduleIds: [], reason: `${text} resolves to the enclosing type` };
|
|
425
|
+
}
|
|
426
|
+
if (text === "cls" || text === "super" || text === "super()") {
|
|
427
|
+
if (text === "cls")
|
|
428
|
+
return { types: [enclosingTypeId], moduleIds: [], reason: "cls resolves to the enclosing class" };
|
|
429
|
+
const parents = [];
|
|
430
|
+
for (const parentName of index.parentsByFqn.get(enclosingTypeId) ?? []) {
|
|
431
|
+
parents.push(...index.resolveType(parentName));
|
|
432
|
+
}
|
|
433
|
+
const types = parents.length > 0 ? parents : enclosingTypes.slice(1);
|
|
434
|
+
return { types, moduleIds: [], reason: "super resolves to the parent type" };
|
|
435
|
+
}
|
|
436
|
+
if (text.startsWith("this.") || text.startsWith("self.")) {
|
|
437
|
+
const path = text.replace(/^(this|self)\./, "");
|
|
438
|
+
const rootName = splitReceiver(path)[0] ?? "";
|
|
439
|
+
const rootField = findField(index, enclosingTypeId, rootName);
|
|
440
|
+
if (rootField?.type) {
|
|
441
|
+
const types = resolveTypeCandidates(file, index, rootField.type);
|
|
442
|
+
if (types.length > 0) {
|
|
443
|
+
return { types, moduleIds: [], reason: `field ${path} has type ${rootField.type}` };
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
const scoped = resolveScopeValue(file, index, rootName);
|
|
447
|
+
const scopedTypes = scoped.filter((id) => index.kindByFqn.has(id));
|
|
448
|
+
if (scopedTypes.length > 0)
|
|
449
|
+
return { types: scopedTypes, moduleIds: [], reason: `field ${path} is imported` };
|
|
450
|
+
}
|
|
451
|
+
if (text.startsWith("new ")) {
|
|
452
|
+
const inner = resolveReceiver(file, index, text.slice(4), enclosingTypeId, enclosingMethodId);
|
|
453
|
+
if (inner.types.length > 0)
|
|
454
|
+
return { ...inner, reason: `constructed instance: ${inner.reason}` };
|
|
455
|
+
}
|
|
456
|
+
// Dotted paths (`service.repo`, `this.helper.client`) are walked segment by
|
|
457
|
+
// segment so a field of a local's type stays typed instead of being
|
|
458
|
+
// externalised by its root name.
|
|
459
|
+
const pathSegments = splitReceiver(text);
|
|
460
|
+
if (pathSegments.length > 1) {
|
|
461
|
+
const rootResolution = resolveReceiver(file, index, pathSegments[0], enclosingTypeId, enclosingMethodId);
|
|
462
|
+
let types = rootResolution.types;
|
|
463
|
+
let external = rootResolution.external;
|
|
464
|
+
let container = false;
|
|
465
|
+
for (const segment of pathSegments.slice(1)) {
|
|
466
|
+
if (external || types.length === 0)
|
|
467
|
+
break;
|
|
468
|
+
const next = [];
|
|
469
|
+
for (const typeId of types) {
|
|
470
|
+
const field = findField(index, typeId, segment);
|
|
471
|
+
if (!field?.type)
|
|
472
|
+
continue;
|
|
473
|
+
if (isBuiltinTypeName(field.type)) {
|
|
474
|
+
container = true;
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
next.push(...resolveTypeCandidates(file, index, field.type));
|
|
478
|
+
}
|
|
479
|
+
types = next;
|
|
480
|
+
if (types.length === 0 && container)
|
|
481
|
+
external = "builtins";
|
|
482
|
+
}
|
|
483
|
+
if (types.length > 0) {
|
|
484
|
+
return { types, moduleIds: [], reason: `field path ${text} (${rootResolution.reason})` };
|
|
485
|
+
}
|
|
486
|
+
if (container) {
|
|
487
|
+
return { types: [], moduleIds: [], external: "builtins", reason: `${text} is a builtin container member` };
|
|
488
|
+
}
|
|
489
|
+
if (external && external !== text) {
|
|
490
|
+
return { types: [], moduleIds: [], external, reason: `${text} resolves outside the project` };
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
// A call used as a receiver: `getService().run()`.
|
|
494
|
+
if (/^[A-Za-z_$][\w$.]*\(\)$/.test(text)) {
|
|
495
|
+
const called = text.slice(0, -2);
|
|
496
|
+
const name = called.split(".").pop();
|
|
497
|
+
const typeIds = called.includes(".")
|
|
498
|
+
? enclosingTypes
|
|
499
|
+
: [enclosingTypeId, ...(moduleIdOf(enclosingTypeId) ? [moduleNodeId(moduleIdOf(enclosingTypeId))] : [])];
|
|
500
|
+
for (const typeId of typeIds) {
|
|
501
|
+
const method = pickOverload(findInherited(index, typeId, name), 0);
|
|
502
|
+
const returnType = method ? normalizeTypeText(method.returnType) : "";
|
|
503
|
+
if (returnType) {
|
|
504
|
+
const types = resolveTypeCandidates(file, index, returnType);
|
|
505
|
+
if (types.length > 0)
|
|
506
|
+
return { types, moduleIds: [], reason: `receiver is the result of ${name}()` };
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
const segments = splitReceiver(text);
|
|
511
|
+
const root = segments[0] ?? "";
|
|
512
|
+
const rest = segments.slice(1);
|
|
513
|
+
const scopedModule = file.scopeModules?.get(root);
|
|
514
|
+
if (scopedModule) {
|
|
515
|
+
if (rest.length === 0) {
|
|
516
|
+
const moduleId = index.resolveModuleId(scopedModule.replace("?suffix:", ""));
|
|
517
|
+
if (moduleId)
|
|
518
|
+
return { types: [], moduleIds: [moduleId], reason: `${root} is module ${moduleId}` };
|
|
519
|
+
return { types: [], moduleIds: [], external: scopedModule, reason: `${root} is the external module ${scopedModule}` };
|
|
520
|
+
}
|
|
521
|
+
const direct = rest.join(".");
|
|
522
|
+
const combined = index.matchModuleSuffix(`${scopedModule.replace("?suffix:", "")}.${direct}`)[0];
|
|
523
|
+
if (combined)
|
|
524
|
+
return { types: [], moduleIds: [combined], reason: `nested module ${combined}` };
|
|
525
|
+
const moduleId = index.resolveModuleId(scopedModule.replace("?suffix:", ""));
|
|
526
|
+
if (moduleId)
|
|
527
|
+
return { types: [], moduleIds: [moduleId], reason: `${root} is module ${moduleId}` };
|
|
528
|
+
return { types: [], moduleIds: [], external: scopedModule, reason: `${root} is the external module ${scopedModule}` };
|
|
529
|
+
}
|
|
530
|
+
const externalBinding = file.externalModules?.get(root);
|
|
531
|
+
if (externalBinding) {
|
|
532
|
+
return { types: [], moduleIds: [], external: externalBinding, reason: `${root} is imported from ${externalBinding}` };
|
|
533
|
+
}
|
|
534
|
+
const scopedType = file.scopeTypes?.get(root);
|
|
535
|
+
if (scopedType) {
|
|
536
|
+
const types = resolveTypeCandidates(file, index, scopedType);
|
|
537
|
+
if (types.length > 0)
|
|
538
|
+
return { types, moduleIds: [], reason: `${root} is imported type ${types[0] ?? scopedType}` };
|
|
539
|
+
const symbolValue = file.scopeModules?.get(root) ?? scopedType;
|
|
540
|
+
const moduleIds = resolveScopeValue(file, index, symbolValue).filter((id) => !index.kindByFqn.has(id));
|
|
541
|
+
const firstModule = moduleIds[0];
|
|
542
|
+
if (firstModule) {
|
|
543
|
+
const moduleId = unwrapModuleNodeId(firstModule);
|
|
544
|
+
// `import { service } from "./x"` where service is a module-level value.
|
|
545
|
+
if (moduleId)
|
|
546
|
+
return { types: [], moduleIds: [moduleId], reason: `${root} is a symbol exported by ${moduleId}` };
|
|
547
|
+
}
|
|
548
|
+
const external = externalPackageOf(file, index, scopedType);
|
|
549
|
+
if (external)
|
|
550
|
+
return { types: [], moduleIds: [], external, reason: `${root} comes from external package ${external}` };
|
|
551
|
+
}
|
|
552
|
+
const field = findField(index, enclosingTypeId, root);
|
|
553
|
+
if (field?.type) {
|
|
554
|
+
const types = resolveTypeCandidates(file, index, field.type);
|
|
555
|
+
if (types.length > 0)
|
|
556
|
+
return { types, moduleIds: [], reason: `field ${root} has type ${field.type}` };
|
|
557
|
+
}
|
|
558
|
+
const moduleId = moduleIdOf(enclosingTypeId);
|
|
559
|
+
if (moduleId) {
|
|
560
|
+
const moduleField = findField(index, moduleNodeId(moduleId), root);
|
|
561
|
+
if (moduleField?.type) {
|
|
562
|
+
const types = resolveTypeCandidates(file, index, moduleField.type);
|
|
563
|
+
if (types.length > 0)
|
|
564
|
+
return { types, moduleIds: [], reason: `module field ${root} has type ${moduleField.type}` };
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
const local = file.localsByMethod.get(enclosingMethodId)?.get(root) ?? file.localsByMethod.get(enclosingMethodId)?.get(text);
|
|
568
|
+
if (local) {
|
|
569
|
+
const types = resolveTypeCandidates(file, index, local);
|
|
570
|
+
if (types.length > 0)
|
|
571
|
+
return { types, moduleIds: [], reason: `local ${root} has inferred type ${local}` };
|
|
572
|
+
if (isBuiltinTypeName(local)) {
|
|
573
|
+
return { types: [], moduleIds: [], external: "builtins", reason: `local ${root} is a builtin ${local}` };
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
const asType = resolveTypeCandidates(file, index, text);
|
|
577
|
+
if (asType.length > 0) {
|
|
578
|
+
return { types: asType, moduleIds: [], reason: `${text} names a project type` };
|
|
579
|
+
}
|
|
580
|
+
if (rest.length > 0) {
|
|
581
|
+
const nested = resolveTypeCandidates(file, index, rest.join("."));
|
|
582
|
+
if (nested.length > 0)
|
|
583
|
+
return { types: nested, moduleIds: [], reason: `nested type ${rest.join(".")}` };
|
|
584
|
+
}
|
|
585
|
+
if (isGlobalObject(root)) {
|
|
586
|
+
return { types: [], moduleIds: [], external: root, reason: `${root} is a runtime global` };
|
|
587
|
+
}
|
|
588
|
+
// `self.unknownField`, `this.builder.x`: the receiver is the enclosing
|
|
589
|
+
// instance, so an untyped member is unresolved project code, not external.
|
|
590
|
+
if (root === "this" || root === "self" || root === "cls" || root === "super") {
|
|
591
|
+
return { types: [], moduleIds: [], reason: `member ${text} of the enclosing type could not be typed` };
|
|
592
|
+
}
|
|
593
|
+
// `some_list.append` and friends: the receiver is a builtin container, so the
|
|
594
|
+
// member lives in the standard library, not in a package called `list[str]`.
|
|
595
|
+
if (isBuiltinTypeName(root)) {
|
|
596
|
+
return { types: [], moduleIds: [], external: "builtins", reason: `${root} is a builtin container` };
|
|
597
|
+
}
|
|
598
|
+
const external = externalPackageOf(file, index, text);
|
|
599
|
+
if (external && external !== text) {
|
|
600
|
+
return { types: [], moduleIds: [], external, reason: `${root} resolves outside the project` };
|
|
601
|
+
}
|
|
602
|
+
return { types: [], moduleIds: [], reason: "receiver type could not be inferred" };
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Resolve a method node id inside a module: a module-level function first, then
|
|
606
|
+
* a single matching method anywhere in the module (for `from x import f`).
|
|
607
|
+
*/
|
|
608
|
+
export function resolveModuleMember(index, moduleId, name) {
|
|
609
|
+
const moduleTypeId = moduleNodeId(moduleId);
|
|
610
|
+
const direct = findMethodsNamed(index, moduleTypeId, name);
|
|
611
|
+
if (direct.length > 0)
|
|
612
|
+
return direct[0]?.id ?? null;
|
|
613
|
+
const matches = [];
|
|
614
|
+
for (const [typeId, methods] of index.methodsByFqn) {
|
|
615
|
+
if (typeId !== moduleTypeId && !typeId.startsWith(`${moduleId}.`))
|
|
616
|
+
continue;
|
|
617
|
+
for (const method of methods) {
|
|
618
|
+
if (method.name === name)
|
|
619
|
+
matches.push(method.id);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
return matches.length === 1 ? (matches[0] ?? null) : null;
|
|
623
|
+
}
|
|
624
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/resolver/common.ts"],"names":[],"mappings":"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"}
|