@nithin554/code-crawler 0.0.0 → 0.1.1

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -45
  3. package/dist/config.d.ts +13 -0
  4. package/dist/config.js +32 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/crawler.d.ts +46 -0
  7. package/dist/crawler.js +303 -0
  8. package/dist/crawler.js.map +1 -0
  9. package/dist/graph/queries.d.ts +111 -0
  10. package/dist/graph/queries.js +265 -0
  11. package/dist/graph/queries.js.map +1 -0
  12. package/dist/graph/schema.d.ts +63 -0
  13. package/dist/graph/schema.js +54 -0
  14. package/dist/graph/schema.js.map +1 -0
  15. package/dist/graph/store.d.ts +66 -0
  16. package/dist/graph/store.js +251 -0
  17. package/dist/graph/store.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +133 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/parser/language.d.ts +111 -0
  22. package/dist/parser/language.js +13 -0
  23. package/dist/parser/language.js.map +1 -0
  24. package/dist/parser/languages/index.d.ts +5 -0
  25. package/dist/parser/languages/index.js +31 -0
  26. package/dist/parser/languages/index.js.map +1 -0
  27. package/dist/parser/languages/java.d.ts +10 -0
  28. package/dist/parser/languages/java.js +334 -0
  29. package/dist/parser/languages/java.js.map +1 -0
  30. package/dist/parser/treeSitter.d.ts +28 -0
  31. package/dist/parser/treeSitter.js +114 -0
  32. package/dist/parser/treeSitter.js.map +1 -0
  33. package/dist/resolver/javaResolver.d.ts +20 -0
  34. package/dist/resolver/javaResolver.js +253 -0
  35. package/dist/resolver/javaResolver.js.map +1 -0
  36. package/dist/resolver/types.d.ts +45 -0
  37. package/dist/resolver/types.js +80 -0
  38. package/dist/resolver/types.js.map +1 -0
  39. package/dist/server.d.ts +15 -0
  40. package/dist/server.js +282 -0
  41. package/dist/server.js.map +1 -0
  42. package/package.json +44 -7
@@ -0,0 +1,334 @@
1
+ import { baseTypeName, childOfType, childrenOfType, createParser, fieldChild, loadGrammar, walk, } from "../treeSitter.js";
2
+ /**
3
+ * Java extraction via the tree-sitter-java grammar.
4
+ *
5
+ * Produces structural entities (package, types, methods, constructors, fields,
6
+ * imports) and raw call sites. The Java resolver consumes the call sites and
7
+ * the per-method local-variable tables to resolve call targets.
8
+ */
9
+ const GRAMMAR_PACKAGE = "tree-sitter-java";
10
+ const GRAMMAR_WASM = "tree-sitter-java.wasm";
11
+ export const javaConfig = {
12
+ name: "java",
13
+ extensions: ["java"],
14
+ loadGrammar: () => loadGrammar(GRAMMAR_PACKAGE, GRAMMAR_WASM),
15
+ parseFile,
16
+ };
17
+ function isTypeDecl(type) {
18
+ return (type === "class_declaration" ||
19
+ type === "interface_declaration" ||
20
+ type === "enum_declaration");
21
+ }
22
+ function typeKind(node) {
23
+ if (node.type === "interface_declaration")
24
+ return "interface";
25
+ if (node.type === "enum_declaration")
26
+ return "enum";
27
+ return "class";
28
+ }
29
+ /** Extract simple/qualified type names from a `superclass`/`super_interfaces` node. */
30
+ function superTypes(node) {
31
+ const list = childOfType(node, "type_list");
32
+ const types = list ? list.namedChildren : node.namedChildren;
33
+ return types
34
+ .map((t) => {
35
+ // type_identifier | scoped_type_identifier | generic_type
36
+ return childOfType(t, "type_identifier")?.text ?? t.text;
37
+ })
38
+ .filter((t) => t.length > 0);
39
+ }
40
+ function simpleName(text) {
41
+ const parts = text.split(".");
42
+ return parts[parts.length - 1] ?? text;
43
+ }
44
+ /**
45
+ * Find the type node in a declaration (field_declaration,
46
+ * local_variable_declaration, formal_parameter, ...) by skipping the
47
+ * `modifiers`/`variable_declarator` children that surround it.
48
+ */
49
+ function typeNodeOf(decl) {
50
+ for (const child of decl.namedChildren) {
51
+ if (child.type === "modifiers" || child.type === "variable_declarator")
52
+ continue;
53
+ return child;
54
+ }
55
+ return null;
56
+ }
57
+ export async function parseFile(source, filePath) {
58
+ const grammar = (await javaConfig.loadGrammar());
59
+ const parser = createParser(grammar);
60
+ const tree = parser.parse(source);
61
+ if (!tree)
62
+ throw new Error(`failed to parse ${filePath}`);
63
+ const root = tree.rootNode;
64
+ const packageName = extractPackage(root);
65
+ const imports = extractImports(root);
66
+ const types = [];
67
+ const methods = [];
68
+ const fields = [];
69
+ const callSites = [];
70
+ const localsByMethod = new Map();
71
+ // === Pass A: structural extraction with nesting stack for type FQNs. ===
72
+ const nestingStack = [];
73
+ function visitType(node) {
74
+ const simple = typeName(node);
75
+ const outer = nestingStack[nestingStack.length - 1];
76
+ // `outer` is the enclosing type's full FQN (package included), so a nested
77
+ // type extends it directly. Top-level types get the package prefix.
78
+ const id = outer ? `${outer}.${simple}` : packageName ? `${packageName}.${simple}` : simple;
79
+ types.push({
80
+ id,
81
+ kind: typeKind(node),
82
+ name: simple,
83
+ extendsTypes: extractExtends(node),
84
+ implementsTypes: extractImplements(node),
85
+ startLine: node.startPosition.row,
86
+ endLine: node.endPosition.row,
87
+ });
88
+ nestingStack.push(id);
89
+ const body = fieldChild(node, "body") ?? childOfType(node, "class_body");
90
+ if (body) {
91
+ for (const member of body.namedChildren) {
92
+ if (member.type === "method_declaration") {
93
+ extractMethod(member, id);
94
+ }
95
+ else if (member.type === "constructor_declaration") {
96
+ extractConstructor(member, id);
97
+ }
98
+ else if (member.type === "field_declaration") {
99
+ extractFields(member, id);
100
+ }
101
+ else if (isTypeDecl(member.type)) {
102
+ visitType(member);
103
+ }
104
+ }
105
+ }
106
+ nestingStack.pop();
107
+ }
108
+ function extractMethod(node, typeId) {
109
+ const name = childOfType(node, "identifier")?.text ?? "";
110
+ const id = `${typeId}#${name}`;
111
+ methods.push({
112
+ id,
113
+ typeId,
114
+ name,
115
+ isConstructor: false,
116
+ params: extractParams(node),
117
+ startLine: node.startPosition.row,
118
+ endLine: node.endPosition.row,
119
+ returnType: extractReturnType(node),
120
+ modifiers: extractModifiers(node),
121
+ });
122
+ const locals = collectLocals(node);
123
+ if (locals)
124
+ localsByMethod.set(id, locals);
125
+ }
126
+ function extractConstructor(node, typeId) {
127
+ const id = `${typeId}#<init>`;
128
+ methods.push({
129
+ id,
130
+ typeId,
131
+ name: "<init>",
132
+ isConstructor: true,
133
+ params: extractParams(node),
134
+ startLine: node.startPosition.row,
135
+ endLine: node.endPosition.row,
136
+ returnType: "",
137
+ modifiers: extractModifiers(node),
138
+ });
139
+ const locals = collectLocals(node);
140
+ if (locals)
141
+ localsByMethod.set(id, locals);
142
+ }
143
+ function extractFields(node, typeId) {
144
+ const typeNode = typeNodeOf(node);
145
+ const type = typeNode ? baseTypeName(typeNode.text) : "";
146
+ for (const declarator of childrenOfType(node, "variable_declarator")) {
147
+ const name = childOfType(declarator, "identifier")?.text ?? "";
148
+ if (!name)
149
+ continue;
150
+ fields.push({
151
+ id: `${typeId}.${name}`,
152
+ typeId,
153
+ name,
154
+ type,
155
+ startLine: node.startPosition.row,
156
+ modifiers: extractModifiers(node),
157
+ });
158
+ }
159
+ }
160
+ for (const child of root.namedChildren) {
161
+ if (isTypeDecl(child.type))
162
+ visitType(child);
163
+ }
164
+ // === Pass B: flat walk for call sites. ===
165
+ // Enclosing type/method are resolved by line range (innermost containing
166
+ // the call site), so the walk does not need to maintain state.
167
+ const typeRanges = types.map((t) => ({ id: t.id, start: t.startLine, end: t.endLine }));
168
+ const methodRanges = methods.map((m) => ({ id: m.id, start: m.startLine, end: m.endLine }));
169
+ walk(root, (node) => {
170
+ if (node.type === "method_invocation") {
171
+ const info = invocationInfo(node);
172
+ callSites.push({
173
+ line: node.startPosition.row,
174
+ receiver: info.receiver,
175
+ name: info.name,
176
+ argumentTexts: info.args,
177
+ enclosingTypeId: enclosingId(typeRanges, node.startPosition.row) ?? "",
178
+ enclosingMethodId: enclosingId(methodRanges, node.startPosition.row) ?? "",
179
+ isConstructorCall: false,
180
+ qualifiedReceiver: info.qualified,
181
+ });
182
+ }
183
+ else if (node.type === "object_creation_expression") {
184
+ const typeNode = fieldChild(node, "type") ?? childOfType(node, "type_identifier");
185
+ const argsNode = fieldChild(node, "arguments") ?? childOfType(node, "argument_list");
186
+ callSites.push({
187
+ line: node.startPosition.row,
188
+ receiver: null,
189
+ name: typeNode ? baseTypeName(typeNode.text) : "",
190
+ argumentTexts: argsNode ? argsNode.namedChildren.map((c) => c.text) : [],
191
+ enclosingTypeId: enclosingId(typeRanges, node.startPosition.row) ?? "",
192
+ enclosingMethodId: enclosingId(methodRanges, node.startPosition.row) ?? "",
193
+ isConstructorCall: true,
194
+ qualifiedReceiver: false,
195
+ });
196
+ }
197
+ });
198
+ // Simple-name -> FQN map: file-declared types take precedence over imports.
199
+ const typeByName = new Map();
200
+ for (const t of types) {
201
+ if (!typeByName.has(t.name))
202
+ typeByName.set(t.name, t.id);
203
+ }
204
+ for (const imp of imports) {
205
+ if (!imp.isStatic && !typeByName.has(imp.simpleName)) {
206
+ typeByName.set(imp.simpleName, imp.fqn);
207
+ }
208
+ }
209
+ return {
210
+ filePath,
211
+ language: "java",
212
+ packageName,
213
+ imports,
214
+ types,
215
+ methods,
216
+ fields,
217
+ callSites,
218
+ localsByMethod,
219
+ typeByName,
220
+ };
221
+ }
222
+ /** Innermost symbol whose line range contains the given 0-based line. */
223
+ function enclosingId(ranges, line) {
224
+ let best = null;
225
+ for (const r of ranges) {
226
+ if (r.start <= line && r.end >= line) {
227
+ if (!best || r.start > best.start)
228
+ best = { id: r.id, start: r.start };
229
+ }
230
+ }
231
+ return best?.id ?? null;
232
+ }
233
+ function extractPackage(root) {
234
+ const pkg = childOfType(root, "package_declaration");
235
+ if (!pkg)
236
+ return null;
237
+ return childOfType(pkg, "scoped_identifier")?.text ?? null;
238
+ }
239
+ function extractImports(root) {
240
+ const result = [];
241
+ for (const imp of childrenOfType(root, "import_declaration")) {
242
+ const scoped = childOfType(imp, "scoped_identifier");
243
+ if (!scoped)
244
+ continue;
245
+ const fqn = scoped.text;
246
+ const isStatic = imp.namedChildren.some((c) => c.type === "static");
247
+ result.push({ fqn, simpleName: simpleName(fqn), isStatic });
248
+ }
249
+ return result;
250
+ }
251
+ function extractExtends(node) {
252
+ const sup = fieldChild(node, "superclass") ?? fieldChild(node, "extends_interfaces");
253
+ return sup ? superTypes(sup) : [];
254
+ }
255
+ function extractImplements(node) {
256
+ const ifaces = fieldChild(node, "interfaces");
257
+ return ifaces ? superTypes(ifaces) : [];
258
+ }
259
+ function extractParams(node) {
260
+ const params = fieldChild(node, "parameters") ?? childOfType(node, "formal_parameters");
261
+ if (!params)
262
+ return [];
263
+ const out = [];
264
+ for (const fp of childrenOfType(params, "formal_parameter")) {
265
+ const typeNode = typeNodeOf(fp);
266
+ const name = childOfType(fp, "identifier")?.text;
267
+ const type = typeNode ? baseTypeName(typeNode.text) : "";
268
+ if (name)
269
+ out.push({ name, type });
270
+ }
271
+ return out;
272
+ }
273
+ function extractReturnType(node) {
274
+ const ret = fieldChild(node, "type") ?? fieldChild(node, "result");
275
+ if (ret)
276
+ return baseTypeName(ret.text);
277
+ if (childOfType(node, "void_type"))
278
+ return "void";
279
+ return "";
280
+ }
281
+ function extractModifiers(node) {
282
+ const mods = fieldChild(node, "modifiers");
283
+ if (!mods)
284
+ return [];
285
+ return mods.namedChildren.map((c) => c.text);
286
+ }
287
+ /** Collect local variable types declared directly inside a method body. */
288
+ function collectLocals(methodNode) {
289
+ const body = childOfType(methodNode, "block") ?? childOfType(methodNode, "constructor_body");
290
+ if (!body)
291
+ return null;
292
+ const locals = new Map();
293
+ walk(body, (n) => {
294
+ if (n.type === "local_variable_declaration") {
295
+ const typeNode = typeNodeOf(n);
296
+ const type = typeNode ? baseTypeName(typeNode.text) : "";
297
+ if (!type)
298
+ return;
299
+ for (const decl of childrenOfType(n, "variable_declarator")) {
300
+ const name = childOfType(decl, "identifier")?.text;
301
+ if (name)
302
+ locals.set(name, type);
303
+ }
304
+ }
305
+ });
306
+ return locals;
307
+ }
308
+ function invocationInfo(node) {
309
+ const nameNode = fieldChild(node, "name") ?? childOfType(node, "identifier");
310
+ const objectNode = fieldChild(node, "object");
311
+ const argsNode = fieldChild(node, "arguments") ?? childOfType(node, "argument_list");
312
+ let receiver = null;
313
+ let qualified = false;
314
+ if (objectNode) {
315
+ receiver = objectNode.text;
316
+ // A receiver that is purely an identifier / scoped identifier usually means
317
+ // a static call on a type, or a field access on a type reference.
318
+ qualified =
319
+ objectNode.type === "scoped_identifier" ||
320
+ objectNode.type === "identifier" ||
321
+ objectNode.type === "type_identifier" ||
322
+ objectNode.type === "scoped_type_identifier";
323
+ }
324
+ return {
325
+ receiver,
326
+ name: nameNode?.text ?? "",
327
+ args: argsNode ? argsNode.namedChildren.map((c) => c.text) : [],
328
+ qualified,
329
+ };
330
+ }
331
+ function typeName(node) {
332
+ return fieldChild(node, "name")?.text ?? node.namedChild(0)?.text ?? "?";
333
+ }
334
+ //# sourceMappingURL=java.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java.js","sourceRoot":"","sources":["../../../src/parser/languages/java.ts"],"names":[],"mappings":"AASA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,IAAI,GAEL,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AAEH,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAC3C,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAU7C,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC;IAC7D,SAAS;CACV,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CACL,IAAI,KAAK,mBAAmB;QAC5B,IAAI,KAAK,uBAAuB;QAChC,IAAI,KAAK,kBAAkB,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,uBAAuB;QAAE,OAAO,WAAW,CAAC;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,MAAM,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uFAAuF;AACvF,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7D,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,0DAA0D;QAC1D,OAAO,WAAW,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB;YAAE,SAAS;QACjF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,QAAgB;IAC9D,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,CAAuC,CAAC;IACvF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE3B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B,CAAC;IAE9D,0EAA0E;IAC1E,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,SAAS,SAAS,CAAC,IAAY;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAE5F,KAAK,CAAC,IAAI,CAAC;YACT,EAAE;YACF,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;YAClC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;YACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;SAC9B,CAAC,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACzE,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACzC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;oBACrD,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBAC/C,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,YAAY,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;QACjD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,EAAE;YACF,MAAM;YACN,IAAI;YACJ,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;YACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;YAC7B,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;YACnC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM;YAAE,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,MAAc;QACtD,MAAM,EAAE,GAAG,GAAG,MAAM,SAAS,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC;YACX,EAAE;YACF,MAAM;YACN,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,IAAI;YACnB,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;YACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;YAC7B,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM;YAAE,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,UAAU,IAAI,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE;gBACvB,MAAM;gBACN,IAAI;gBACJ,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;gBACjC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,4CAA4C;IAC5C,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE5F,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAClB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,eAAe,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;gBACtE,iBAAiB,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC1E,iBAAiB,EAAE,KAAK;gBACxB,iBAAiB,EAAE,IAAI,CAAC,SAAS;aAClC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACrF,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;gBAC5B,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACjD,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxE,eAAe,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;gBACtE,iBAAiB,EAAE,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC1E,iBAAiB,EAAE,IAAI;gBACvB,iBAAiB,EAAE,KAAK;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,MAAM;QAChB,WAAW;QACX,OAAO;QACP,KAAK;QACL,OAAO;QACP,MAAM;QACN,SAAS;QACT,cAAc;QACd,UAAU;KACX,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,SAAS,WAAW,CAClB,MAAoD,EACpD,IAAY;IAEZ,IAAI,IAAI,GAAyC,IAAI,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;gBAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,WAAW,CAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACrF,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACxF,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,GAAG,GAAqC,EAAE,CAAC;IACjD,KAAK,MAAM,EAAE,IAAI,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,GAAG;QAAE,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAClD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,2EAA2E;AAC3E,SAAS,aAAa,CAAC,UAAkB;IACvC,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAC7F,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,CAAC,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC;gBACnD,IAAI,IAAI;oBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAMlC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAErF,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;QAC3B,4EAA4E;QAC5E,kEAAkE;QAClE,SAAS;YACP,UAAU,CAAC,IAAI,KAAK,mBAAmB;gBACvC,UAAU,CAAC,IAAI,KAAK,YAAY;gBAChC,UAAU,CAAC,IAAI,KAAK,iBAAiB;gBACrC,UAAU,CAAC,IAAI,KAAK,wBAAwB,CAAC;IACjD,CAAC;IAED,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;QAC1B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Parser, Language } from "web-tree-sitter";
2
+ /** Initialize the web-tree-sitter WASM runtime exactly once. */
3
+ export declare function initTreeSitter(): Promise<void>;
4
+ /**
5
+ * Load a grammar's compiled WASM from its npm package and return a tree-sitter
6
+ * Language. Cached across calls.
7
+ */
8
+ export declare function loadGrammar(packageName: string, wasmFileName: string): Promise<Language>;
9
+ /** Create a parser bound to the given language. */
10
+ export declare function createParser(lang: Language): Parser;
11
+ export type TSNode = import("web-tree-sitter").Node;
12
+ /** First named child of a given type, or null. */
13
+ export declare function childOfType(node: TSNode, type: string): TSNode | null;
14
+ /** All named children of a given type. */
15
+ export declare function childrenOfType(node: TSNode, type: string): TSNode[];
16
+ /** Field child, or null. */
17
+ export declare function fieldChild(node: TSNode, field: string): TSNode | null;
18
+ /** Walk the tree depth-first, invoking `visit` on every named node. */
19
+ export declare function walk(node: TSNode, visit: (n: TSNode) => void): void;
20
+ /**
21
+ * Strip generics, array dimensions and ellipsis from a raw type text,
22
+ * returning the base type usable for symbol lookup.
23
+ * `List<String>` -> `List`
24
+ * `java.util.List<T>` -> `java.util.List`
25
+ * `int[]` -> `int`
26
+ * `String...` -> `String`
27
+ */
28
+ export declare function baseTypeName(raw: string): string;
@@ -0,0 +1,114 @@
1
+ import { Parser, Language } from "web-tree-sitter";
2
+ import { createRequire } from "node:module";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ /**
6
+ * Shared tree-sitter setup: WASM runtime init, grammar loading, and CST walk
7
+ * helpers. The WASM runtime keeps the server fully portable (no native build
8
+ * step required by end users).
9
+ */
10
+ const require = createRequire(import.meta.url);
11
+ let initPromise = null;
12
+ /** Initialize the web-tree-sitter WASM runtime exactly once. */
13
+ export function initTreeSitter() {
14
+ if (!initPromise) {
15
+ const wasmPath = path.join(path.dirname(require.resolve("web-tree-sitter")), "web-tree-sitter.wasm");
16
+ initPromise = Parser.init({ locateFile: () => wasmPath }).then(() => undefined);
17
+ }
18
+ return initPromise;
19
+ }
20
+ const grammarCache = new Map();
21
+ /** Locate the package root directory containing its package.json. */
22
+ function packageRoot(packageName) {
23
+ const mainPath = require.resolve(packageName);
24
+ let dir = path.dirname(mainPath);
25
+ for (let i = 0; i < 10; i++) {
26
+ const pkgJson = path.join(dir, "package.json");
27
+ if (fs.existsSync(pkgJson)) {
28
+ try {
29
+ const pkg = JSON.parse(fs.readFileSync(pkgJson, "utf8"));
30
+ if (pkg.name === packageName)
31
+ return dir;
32
+ }
33
+ catch {
34
+ // ignore malformed package.json and keep walking up
35
+ }
36
+ }
37
+ const parent = path.dirname(dir);
38
+ if (parent === dir)
39
+ break;
40
+ dir = parent;
41
+ }
42
+ // Fallback: dirname of the resolved main entry.
43
+ return path.dirname(mainPath);
44
+ }
45
+ /**
46
+ * Load a grammar's compiled WASM from its npm package and return a tree-sitter
47
+ * Language. Cached across calls.
48
+ */
49
+ export function loadGrammar(packageName, wasmFileName) {
50
+ const cached = grammarCache.get(packageName);
51
+ if (cached)
52
+ return cached;
53
+ const promise = (async () => {
54
+ await initTreeSitter();
55
+ const wasmPath = path.join(packageRoot(packageName), wasmFileName);
56
+ return Language.load(fs.readFileSync(wasmPath));
57
+ })();
58
+ grammarCache.set(packageName, promise);
59
+ return promise;
60
+ }
61
+ /** Create a parser bound to the given language. */
62
+ export function createParser(lang) {
63
+ const parser = new Parser();
64
+ parser.setLanguage(lang);
65
+ return parser;
66
+ }
67
+ /** First named child of a given type, or null. */
68
+ export function childOfType(node, type) {
69
+ for (const child of node.namedChildren) {
70
+ if (child.type === type)
71
+ return child;
72
+ }
73
+ return null;
74
+ }
75
+ /** All named children of a given type. */
76
+ export function childrenOfType(node, type) {
77
+ return node.namedChildren.filter((c) => c.type === type);
78
+ }
79
+ /** Field child, or null. */
80
+ export function fieldChild(node, field) {
81
+ return node.childForFieldName(field);
82
+ }
83
+ /** Walk the tree depth-first, invoking `visit` on every named node. */
84
+ export function walk(node, visit) {
85
+ visit(node);
86
+ for (const child of node.namedChildren) {
87
+ walk(child, visit);
88
+ }
89
+ }
90
+ /**
91
+ * Strip generics, array dimensions and ellipsis from a raw type text,
92
+ * returning the base type usable for symbol lookup.
93
+ * `List<String>` -> `List`
94
+ * `java.util.List<T>` -> `java.util.List`
95
+ * `int[]` -> `int`
96
+ * `String...` -> `String`
97
+ */
98
+ export function baseTypeName(raw) {
99
+ let t = raw.trim();
100
+ // strip type arguments (generic <...>)
101
+ while (t.includes("<")) {
102
+ const open = t.indexOf("<");
103
+ const close = t.lastIndexOf(">");
104
+ if (close < open)
105
+ break;
106
+ t = (t.slice(0, open) + t.slice(close + 1)).trim();
107
+ }
108
+ // strip array suffix
109
+ t = t.replace(/\[\s*\]$/, "");
110
+ // strip varargs ellipsis
111
+ t = t.replace(/\.\.\.$/, "");
112
+ return t.trim();
113
+ }
114
+ //# sourceMappingURL=treeSitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeSitter.js","sourceRoot":"","sources":["../../src/parser/treeSitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { JavaParsedFile } from "../parser/languages/java.js";
2
+ import { type ResolvedCall, type TypeIndex } from "./types.js";
3
+ /**
4
+ * Java call-target resolution (v1 heuristics).
5
+ *
6
+ * Resolution strategy, in order of certainty:
7
+ * 1. Constructor calls (`new Foo(...)`) resolve `Foo` -> type -> `#<init>`.
8
+ * 2. Bare / `this.` / `super.` calls search the enclosing type and its
9
+ * superclass chain.
10
+ * 3. Type-qualified calls (`com.acme.Foo.bar`) resolve the type directly.
11
+ * 4. Instance calls (`x.method()`) infer the receiver's declared type from
12
+ * locals, parameters, and fields, then search that type + ancestors.
13
+ * 5. Anything else becomes a phantom `unknown_symbol` node with an
14
+ * `resolved:false` edge so the graph stays traversable.
15
+ */
16
+ export interface ResolveOptions {
17
+ /** Treat inherited methods as resolvable targets. Default true. */
18
+ searchInheritance?: boolean;
19
+ }
20
+ export declare function resolveJavaFile(file: JavaParsedFile, index: TypeIndex, options?: ResolveOptions): ResolvedCall[];