@lzehrung/codegraph 2.3.31 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +33 -141
  2. package/codegraph-skill/codegraph/SKILL.md +8 -6
  3. package/dist/agent/artifact.d.ts +2 -0
  4. package/dist/agent/artifact.d.ts.map +1 -1
  5. package/dist/agent/artifact.js.map +1 -1
  6. package/dist/agent/call-hierarchy.js +2 -4
  7. package/dist/agent/call-hierarchy.js.map +1 -1
  8. package/dist/agent/explore.d.ts +1 -1
  9. package/dist/agent/explore.d.ts.map +1 -1
  10. package/dist/agent/explore.js +3 -2
  11. package/dist/agent/explore.js.map +1 -1
  12. package/dist/agent/refactor-plan.js +2 -4
  13. package/dist/agent/refactor-plan.js.map +1 -1
  14. package/dist/agent/rename-preview.d.ts.map +1 -1
  15. package/dist/agent/rename-preview.js +4 -3
  16. package/dist/agent/rename-preview.js.map +1 -1
  17. package/dist/agent/search.d.ts.map +1 -1
  18. package/dist/agent/search.js +5 -3
  19. package/dist/agent/search.js.map +1 -1
  20. package/dist/agent/semantic-symbols.d.ts.map +1 -1
  21. package/dist/agent/semantic-symbols.js +2 -3
  22. package/dist/agent/semantic-symbols.js.map +1 -1
  23. package/dist/agent/session.d.ts +3 -0
  24. package/dist/agent/session.d.ts.map +1 -1
  25. package/dist/agent/session.js +10 -2
  26. package/dist/agent/session.js.map +1 -1
  27. package/dist/agent/type-hierarchy.js +2 -4
  28. package/dist/agent/type-hierarchy.js.map +1 -1
  29. package/dist/agent/workspace-symbols.d.ts.map +1 -1
  30. package/dist/agent/workspace-symbols.js +2 -3
  31. package/dist/agent/workspace-symbols.js.map +1 -1
  32. package/dist/agent-tools.d.ts +0 -4
  33. package/dist/agent-tools.d.ts.map +1 -1
  34. package/dist/agent-tools.js +3 -6
  35. package/dist/agent-tools.js.map +1 -1
  36. package/dist/analysis-summary.d.ts +8 -4
  37. package/dist/analysis-summary.d.ts.map +1 -1
  38. package/dist/analysis-summary.js +15 -66
  39. package/dist/analysis-summary.js.map +1 -1
  40. package/dist/bin/cli.js +51145 -41770
  41. package/dist/bin/query-index-worker.js +122 -82
  42. package/dist/cli/affected.d.ts.map +1 -1
  43. package/dist/cli/affected.js +4 -1
  44. package/dist/cli/affected.js.map +1 -1
  45. package/dist/cli/command-catalog.js +1 -1
  46. package/dist/cli/command-catalog.js.map +1 -1
  47. package/dist/cli/command-table.d.ts.map +1 -1
  48. package/dist/cli/command-table.js +9 -17
  49. package/dist/cli/command-table.js.map +1 -1
  50. package/dist/cli/context.js +10 -10
  51. package/dist/cli/context.js.map +1 -1
  52. package/dist/cli/drift.d.ts +0 -2
  53. package/dist/cli/drift.d.ts.map +1 -1
  54. package/dist/cli/drift.js +0 -1
  55. package/dist/cli/drift.js.map +1 -1
  56. package/dist/cli/graph-delta.d.ts +0 -2
  57. package/dist/cli/graph-delta.d.ts.map +1 -1
  58. package/dist/cli/graph-delta.js +0 -4
  59. package/dist/cli/graph-delta.js.map +1 -1
  60. package/dist/cli/graph-queries.d.ts.map +1 -1
  61. package/dist/cli/graph-queries.js +27 -1
  62. package/dist/cli/graph-queries.js.map +1 -1
  63. package/dist/cli/graph.d.ts +0 -3
  64. package/dist/cli/graph.d.ts.map +1 -1
  65. package/dist/cli/graph.js +4 -14
  66. package/dist/cli/graph.js.map +1 -1
  67. package/dist/cli/help.d.ts +34 -34
  68. package/dist/cli/help.d.ts.map +1 -1
  69. package/dist/cli/help.js +9 -14
  70. package/dist/cli/help.js.map +1 -1
  71. package/dist/cli/impact.d.ts +0 -2
  72. package/dist/cli/impact.d.ts.map +1 -1
  73. package/dist/cli/impact.js +0 -1
  74. package/dist/cli/impact.js.map +1 -1
  75. package/dist/cli/index.d.ts +0 -2
  76. package/dist/cli/index.d.ts.map +1 -1
  77. package/dist/cli/index.js +5 -6
  78. package/dist/cli/index.js.map +1 -1
  79. package/dist/cli/inspect.d.ts +0 -2
  80. package/dist/cli/inspect.d.ts.map +1 -1
  81. package/dist/cli/inspect.js +5 -8
  82. package/dist/cli/inspect.js.map +1 -1
  83. package/dist/cli/invocation-context.d.ts +0 -3
  84. package/dist/cli/invocation-context.d.ts.map +1 -1
  85. package/dist/cli/invocation-context.js +4 -16
  86. package/dist/cli/invocation-context.js.map +1 -1
  87. package/dist/cli/navigation.d.ts +0 -2
  88. package/dist/cli/navigation.d.ts.map +1 -1
  89. package/dist/cli/navigation.js +0 -1
  90. package/dist/cli/navigation.js.map +1 -1
  91. package/dist/cli/options.d.ts.map +1 -1
  92. package/dist/cli/options.js +4 -14
  93. package/dist/cli/options.js.map +1 -1
  94. package/dist/cli/review.d.ts +0 -2
  95. package/dist/cli/review.d.ts.map +1 -1
  96. package/dist/cli/review.js +0 -5
  97. package/dist/cli/review.js.map +1 -1
  98. package/dist/cli/root-policy.d.ts +0 -2
  99. package/dist/cli/root-policy.d.ts.map +1 -1
  100. package/dist/cli/root-policy.js +0 -8
  101. package/dist/cli/root-policy.js.map +1 -1
  102. package/dist/cli/server.d.ts.map +1 -1
  103. package/dist/cli/server.js +0 -2
  104. package/dist/cli/server.js.map +1 -1
  105. package/dist/drift/artifact.d.ts.map +1 -1
  106. package/dist/drift/artifact.js +15 -18
  107. package/dist/drift/artifact.js.map +1 -1
  108. package/dist/drift/compare.js +1 -1
  109. package/dist/drift/compare.js.map +1 -1
  110. package/dist/drift/git.d.ts.map +1 -1
  111. package/dist/drift/git.js +0 -1
  112. package/dist/drift/git.js.map +1 -1
  113. package/dist/drift/snapshot.d.ts.map +1 -1
  114. package/dist/drift/snapshot.js +5 -7
  115. package/dist/drift/snapshot.js.map +1 -1
  116. package/dist/drift/types.d.ts +2 -2
  117. package/dist/drift/types.d.ts.map +1 -1
  118. package/dist/drift/types.js.map +1 -1
  119. package/dist/duplicates/unit-cache.d.ts +0 -1
  120. package/dist/duplicates/unit-cache.d.ts.map +1 -1
  121. package/dist/duplicates/unit-cache.js +3 -11
  122. package/dist/duplicates/unit-cache.js.map +1 -1
  123. package/dist/duplicates/units.d.ts +5 -5
  124. package/dist/duplicates/units.d.ts.map +1 -1
  125. package/dist/duplicates/units.js +25 -88
  126. package/dist/duplicates/units.js.map +1 -1
  127. package/dist/graph-builder.d.ts +0 -6
  128. package/dist/graph-builder.d.ts.map +1 -1
  129. package/dist/graph-builder.js +6 -11
  130. package/dist/graph-builder.js.map +1 -1
  131. package/dist/graph-edge-collector.d.ts +4 -6
  132. package/dist/graph-edge-collector.d.ts.map +1 -1
  133. package/dist/graph-edge-collector.js +31 -26
  134. package/dist/graph-edge-collector.js.map +1 -1
  135. package/dist/graphs/angularjs.d.ts.map +1 -1
  136. package/dist/graphs/angularjs.js +2 -1
  137. package/dist/graphs/angularjs.js.map +1 -1
  138. package/dist/graphs/edge-resolution.d.ts +4 -1
  139. package/dist/graphs/edge-resolution.d.ts.map +1 -1
  140. package/dist/graphs/edge-resolution.js +24 -76
  141. package/dist/graphs/edge-resolution.js.map +1 -1
  142. package/dist/graphs/specifiers.d.ts +4 -13
  143. package/dist/graphs/specifiers.d.ts.map +1 -1
  144. package/dist/graphs/specifiers.js +80 -173
  145. package/dist/graphs/specifiers.js.map +1 -1
  146. package/dist/graphs/symbol-graph-detailed/ast.d.ts +20 -0
  147. package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
  148. package/dist/graphs/symbol-graph-detailed/ast.js +154 -15
  149. package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
  150. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts +60 -8
  151. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
  152. package/dist/graphs/symbol-graph-detailed/edge-passes.js +997 -168
  153. package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
  154. package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts +2 -1
  155. package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts.map +1 -1
  156. package/dist/graphs/symbol-graph-detailed/import-aliases.js +150 -7
  157. package/dist/graphs/symbol-graph-detailed/import-aliases.js.map +1 -1
  158. package/dist/graphs/symbol-graph-detailed/member-chains.d.ts +1 -0
  159. package/dist/graphs/symbol-graph-detailed/member-chains.d.ts.map +1 -1
  160. package/dist/graphs/symbol-graph-detailed/member-chains.js +3 -1
  161. package/dist/graphs/symbol-graph-detailed/member-chains.js.map +1 -1
  162. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +141 -25
  163. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
  164. package/dist/graphs/symbol-graph-detailed/receiver-calls.js +1015 -166
  165. package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
  166. package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
  167. package/dist/graphs/symbol-graph-detailed.js +449 -46
  168. package/dist/graphs/symbol-graph-detailed.js.map +1 -1
  169. package/dist/graphs/symbol-graph.d.ts +2 -0
  170. package/dist/graphs/symbol-graph.d.ts.map +1 -1
  171. package/dist/graphs/symbol-graph.js +34 -16
  172. package/dist/graphs/symbol-graph.js.map +1 -1
  173. package/dist/graphs/types.d.ts +0 -4
  174. package/dist/graphs/types.d.ts.map +1 -1
  175. package/dist/graphs.d.ts +1 -1
  176. package/dist/graphs.d.ts.map +1 -1
  177. package/dist/impact/call-compatibility/providers/index.d.ts +4 -4
  178. package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
  179. package/dist/impact/call-compatibility/providers/index.js +6 -6
  180. package/dist/impact/call-compatibility/providers/index.js.map +1 -1
  181. package/dist/impact/call-compatibility/providers/types.d.ts +2 -0
  182. package/dist/impact/call-compatibility/providers/types.d.ts.map +1 -1
  183. package/dist/impact/call-compatibility/types.d.ts +6 -0
  184. package/dist/impact/call-compatibility/types.d.ts.map +1 -1
  185. package/dist/impact/call-compatibility.d.ts.map +1 -1
  186. package/dist/impact/call-compatibility.js +316 -526
  187. package/dist/impact/call-compatibility.js.map +1 -1
  188. package/dist/impact/map.js +1 -0
  189. package/dist/impact/map.js.map +1 -1
  190. package/dist/impact/reference-cache.d.ts.map +1 -1
  191. package/dist/impact/reference-cache.js +2 -2
  192. package/dist/impact/reference-cache.js.map +1 -1
  193. package/dist/index.d.ts +2 -2
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +1 -1
  196. package/dist/index.js.map +1 -1
  197. package/dist/indexer/ambiguous-resolution.d.ts +11 -0
  198. package/dist/indexer/ambiguous-resolution.d.ts.map +1 -0
  199. package/dist/indexer/ambiguous-resolution.js +19 -0
  200. package/dist/indexer/ambiguous-resolution.js.map +1 -0
  201. package/dist/indexer/build-cache/module-cache.d.ts +39 -1
  202. package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
  203. package/dist/indexer/build-cache/module-cache.js +218 -21
  204. package/dist/indexer/build-cache/module-cache.js.map +1 -1
  205. package/dist/indexer/build-cache/options.d.ts +30 -44
  206. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  207. package/dist/indexer/build-cache/options.js +32 -71
  208. package/dist/indexer/build-cache/options.js.map +1 -1
  209. package/dist/indexer/build-cache/project-snapshot.d.ts +3 -3
  210. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  211. package/dist/indexer/build-cache/project-snapshot.js +164 -84
  212. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  213. package/dist/indexer/build-cache/reports.d.ts +0 -2
  214. package/dist/indexer/build-cache/reports.d.ts.map +1 -1
  215. package/dist/indexer/build-cache/reports.js +0 -97
  216. package/dist/indexer/build-cache/reports.js.map +1 -1
  217. package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -1
  218. package/dist/indexer/build-cache/resolver-environment.js +32 -2
  219. package/dist/indexer/build-cache/resolver-environment.js.map +1 -1
  220. package/dist/indexer/build-cache.d.ts +2 -2
  221. package/dist/indexer/build-cache.d.ts.map +1 -1
  222. package/dist/indexer/build-cache.js +2 -2
  223. package/dist/indexer/build-cache.js.map +1 -1
  224. package/dist/indexer/build-index.d.ts.map +1 -1
  225. package/dist/indexer/build-index.js +656 -71
  226. package/dist/indexer/build-index.js.map +1 -1
  227. package/dist/indexer/build-workers.d.ts.map +1 -1
  228. package/dist/indexer/build-workers.js +9 -9
  229. package/dist/indexer/build-workers.js.map +1 -1
  230. package/dist/indexer/call-hierarchy.js +1 -1
  231. package/dist/indexer/call-hierarchy.js.map +1 -1
  232. package/dist/indexer/callable-identity.d.ts +24 -0
  233. package/dist/indexer/callable-identity.d.ts.map +1 -0
  234. package/dist/indexer/callable-identity.js +111 -0
  235. package/dist/indexer/callable-identity.js.map +1 -0
  236. package/dist/indexer/compilation-units.d.ts +103 -0
  237. package/dist/indexer/compilation-units.d.ts.map +1 -0
  238. package/dist/indexer/compilation-units.js +607 -0
  239. package/dist/indexer/compilation-units.js.map +1 -0
  240. package/dist/indexer/cpp-callables.d.ts +25 -0
  241. package/dist/indexer/cpp-callables.d.ts.map +1 -0
  242. package/dist/indexer/cpp-callables.js +562 -0
  243. package/dist/indexer/cpp-callables.js.map +1 -0
  244. package/dist/indexer/declaration-visibility.d.ts +43 -2
  245. package/dist/indexer/declaration-visibility.d.ts.map +1 -1
  246. package/dist/indexer/declaration-visibility.js +158 -2
  247. package/dist/indexer/declaration-visibility.js.map +1 -1
  248. package/dist/indexer/expand-star-imports.d.ts +6 -1
  249. package/dist/indexer/expand-star-imports.d.ts.map +1 -1
  250. package/dist/indexer/expand-star-imports.js +131 -37
  251. package/dist/indexer/expand-star-imports.js.map +1 -1
  252. package/dist/indexer/finalize.d.ts.map +1 -1
  253. package/dist/indexer/finalize.js +0 -1
  254. package/dist/indexer/finalize.js.map +1 -1
  255. package/dist/indexer/import-resolution-tables.d.ts +72 -0
  256. package/dist/indexer/import-resolution-tables.d.ts.map +1 -0
  257. package/dist/indexer/import-resolution-tables.js +137 -0
  258. package/dist/indexer/import-resolution-tables.js.map +1 -0
  259. package/dist/indexer/import-types.d.ts +54 -0
  260. package/dist/indexer/import-types.d.ts.map +1 -1
  261. package/dist/indexer/import-types.js +24 -1
  262. package/dist/indexer/import-types.js.map +1 -1
  263. package/dist/indexer/imports/context.d.ts +16 -1
  264. package/dist/indexer/imports/context.d.ts.map +1 -1
  265. package/dist/indexer/imports/import-binding-tables.d.ts +13 -1
  266. package/dist/indexer/imports/import-binding-tables.d.ts.map +1 -1
  267. package/dist/indexer/imports/import-binding-tables.js +149 -30
  268. package/dist/indexer/imports/import-binding-tables.js.map +1 -1
  269. package/dist/indexer/imports/js-text-imports.js +4 -4
  270. package/dist/indexer/imports/js-text-imports.js.map +1 -1
  271. package/dist/indexer/imports/native-captures.d.ts.map +1 -1
  272. package/dist/indexer/imports/native-captures.js +24 -6
  273. package/dist/indexer/imports/native-captures.js.map +1 -1
  274. package/dist/indexer/imports/python.d.ts +10 -2
  275. package/dist/indexer/imports/python.d.ts.map +1 -1
  276. package/dist/indexer/imports/python.js +128 -112
  277. package/dist/indexer/imports/python.js.map +1 -1
  278. package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -1
  279. package/dist/indexer/imports/text-import-extractors.js +68 -19
  280. package/dist/indexer/imports/text-import-extractors.js.map +1 -1
  281. package/dist/indexer/imports.d.ts +3 -4
  282. package/dist/indexer/imports.d.ts.map +1 -1
  283. package/dist/indexer/imports.js +116 -72
  284. package/dist/indexer/imports.js.map +1 -1
  285. package/dist/indexer/incremental-plan.d.ts +33 -0
  286. package/dist/indexer/incremental-plan.d.ts.map +1 -1
  287. package/dist/indexer/incremental-plan.js +203 -1
  288. package/dist/indexer/incremental-plan.js.map +1 -1
  289. package/dist/indexer/locals-and-exports.d.ts +3 -2
  290. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  291. package/dist/indexer/locals-and-exports.js +659 -78
  292. package/dist/indexer/locals-and-exports.js.map +1 -1
  293. package/dist/indexer/member-selection.d.ts +46 -0
  294. package/dist/indexer/member-selection.d.ts.map +1 -0
  295. package/dist/indexer/member-selection.js +169 -0
  296. package/dist/indexer/member-selection.js.map +1 -0
  297. package/dist/indexer/name-lookup-policies/c-family.d.ts +7 -0
  298. package/dist/indexer/name-lookup-policies/c-family.d.ts.map +1 -0
  299. package/dist/indexer/name-lookup-policies/c-family.js +137 -0
  300. package/dist/indexer/name-lookup-policies/c-family.js.map +1 -0
  301. package/dist/indexer/name-lookup-policies/csharp-using-static.d.ts +11 -0
  302. package/dist/indexer/name-lookup-policies/csharp-using-static.d.ts.map +1 -0
  303. package/dist/indexer/name-lookup-policies/csharp-using-static.js +136 -0
  304. package/dist/indexer/name-lookup-policies/csharp-using-static.js.map +1 -0
  305. package/dist/indexer/name-lookup-policies/implicit-self.d.ts +10 -0
  306. package/dist/indexer/name-lookup-policies/implicit-self.d.ts.map +1 -0
  307. package/dist/indexer/name-lookup-policies/implicit-self.js +119 -0
  308. package/dist/indexer/name-lookup-policies/implicit-self.js.map +1 -0
  309. package/dist/indexer/name-lookup-policies/index.d.ts +3 -0
  310. package/dist/indexer/name-lookup-policies/index.d.ts.map +1 -0
  311. package/dist/indexer/name-lookup-policies/index.js +132 -0
  312. package/dist/indexer/name-lookup-policies/index.js.map +1 -0
  313. package/dist/indexer/name-lookup-policies/php.d.ts +3 -0
  314. package/dist/indexer/name-lookup-policies/php.d.ts.map +1 -0
  315. package/dist/indexer/name-lookup-policies/php.js +82 -0
  316. package/dist/indexer/name-lookup-policies/php.js.map +1 -0
  317. package/dist/indexer/name-resolution-types.d.ts +101 -0
  318. package/dist/indexer/name-resolution-types.d.ts.map +1 -0
  319. package/dist/indexer/name-resolution-types.js +2 -0
  320. package/dist/indexer/name-resolution-types.js.map +1 -0
  321. package/dist/indexer/name-resolution.d.ts +57 -0
  322. package/dist/indexer/name-resolution.d.ts.map +1 -0
  323. package/dist/indexer/name-resolution.js +204 -0
  324. package/dist/indexer/name-resolution.js.map +1 -0
  325. package/dist/indexer/navigation-cpp.d.ts +58 -0
  326. package/dist/indexer/navigation-cpp.d.ts.map +1 -0
  327. package/dist/indexer/navigation-cpp.js +935 -0
  328. package/dist/indexer/navigation-cpp.js.map +1 -0
  329. package/dist/indexer/navigation-goto.d.ts +115 -3
  330. package/dist/indexer/navigation-goto.d.ts.map +1 -1
  331. package/dist/indexer/navigation-goto.js +2469 -190
  332. package/dist/indexer/navigation-goto.js.map +1 -1
  333. package/dist/indexer/navigation-local.d.ts +21 -2
  334. package/dist/indexer/navigation-local.d.ts.map +1 -1
  335. package/dist/indexer/navigation-local.js +520 -63
  336. package/dist/indexer/navigation-local.js.map +1 -1
  337. package/dist/indexer/navigation-php.d.ts +66 -0
  338. package/dist/indexer/navigation-php.d.ts.map +1 -1
  339. package/dist/indexer/navigation-php.js +287 -4
  340. package/dist/indexer/navigation-php.js.map +1 -1
  341. package/dist/indexer/navigation-provenance.d.ts +1 -1
  342. package/dist/indexer/navigation-provenance.d.ts.map +1 -1
  343. package/dist/indexer/navigation-provenance.js +4 -13
  344. package/dist/indexer/navigation-provenance.js.map +1 -1
  345. package/dist/indexer/navigation-references.d.ts +73 -6
  346. package/dist/indexer/navigation-references.d.ts.map +1 -1
  347. package/dist/indexer/navigation-references.js +661 -67
  348. package/dist/indexer/navigation-references.js.map +1 -1
  349. package/dist/indexer/navigation-resolve.d.ts +46 -2
  350. package/dist/indexer/navigation-resolve.d.ts.map +1 -1
  351. package/dist/indexer/navigation-resolve.js +599 -193
  352. package/dist/indexer/navigation-resolve.js.map +1 -1
  353. package/dist/indexer/navigation.d.ts +29 -2
  354. package/dist/indexer/navigation.d.ts.map +1 -1
  355. package/dist/indexer/navigation.js +1092 -153
  356. package/dist/indexer/navigation.js.map +1 -1
  357. package/dist/indexer/parse-context.d.ts +2 -3
  358. package/dist/indexer/parse-context.d.ts.map +1 -1
  359. package/dist/indexer/parse-context.js +8 -21
  360. package/dist/indexer/parse-context.js.map +1 -1
  361. package/dist/indexer/php-namespace-symbols.d.ts +66 -0
  362. package/dist/indexer/php-namespace-symbols.d.ts.map +1 -0
  363. package/dist/indexer/php-namespace-symbols.js +342 -0
  364. package/dist/indexer/php-namespace-symbols.js.map +1 -0
  365. package/dist/indexer/reference-candidates.d.ts.map +1 -1
  366. package/dist/indexer/reference-candidates.js +13 -7
  367. package/dist/indexer/reference-candidates.js.map +1 -1
  368. package/dist/indexer/reference-context.d.ts +2 -0
  369. package/dist/indexer/reference-context.d.ts.map +1 -1
  370. package/dist/indexer/reference-context.js +4 -0
  371. package/dist/indexer/reference-context.js.map +1 -1
  372. package/dist/indexer/scope-nodes.d.ts +92 -13
  373. package/dist/indexer/scope-nodes.d.ts.map +1 -1
  374. package/dist/indexer/scope-nodes.js +212 -20
  375. package/dist/indexer/scope-nodes.js.map +1 -1
  376. package/dist/indexer/scope-types.d.ts +29 -1
  377. package/dist/indexer/scope-types.d.ts.map +1 -1
  378. package/dist/indexer/scope.d.ts +2 -3
  379. package/dist/indexer/scope.d.ts.map +1 -1
  380. package/dist/indexer/scope.js +968 -47
  381. package/dist/indexer/scope.js.map +1 -1
  382. package/dist/indexer/shared-owner-identity.d.ts +53 -0
  383. package/dist/indexer/shared-owner-identity.d.ts.map +1 -0
  384. package/dist/indexer/shared-owner-identity.js +460 -0
  385. package/dist/indexer/shared-owner-identity.js.map +1 -0
  386. package/dist/indexer/shared.d.ts +1 -1
  387. package/dist/indexer/shared.d.ts.map +1 -1
  388. package/dist/indexer/shared.js +1 -1
  389. package/dist/indexer/shared.js.map +1 -1
  390. package/dist/indexer/star-import-precedence.d.ts +113 -0
  391. package/dist/indexer/star-import-precedence.d.ts.map +1 -0
  392. package/dist/indexer/star-import-precedence.js +402 -0
  393. package/dist/indexer/star-import-precedence.js.map +1 -0
  394. package/dist/indexer/symbols.d.ts +3 -1
  395. package/dist/indexer/symbols.d.ts.map +1 -1
  396. package/dist/indexer/symbols.js +58 -18
  397. package/dist/indexer/symbols.js.map +1 -1
  398. package/dist/indexer/ts-callables.d.ts +42 -0
  399. package/dist/indexer/ts-callables.d.ts.map +1 -0
  400. package/dist/indexer/ts-callables.js +233 -0
  401. package/dist/indexer/ts-callables.js.map +1 -0
  402. package/dist/indexer/types.d.ts +41 -26
  403. package/dist/indexer/types.d.ts.map +1 -1
  404. package/dist/indexer/unused-exports.d.ts +13 -0
  405. package/dist/indexer/unused-exports.d.ts.map +1 -0
  406. package/dist/indexer/unused-exports.js +159 -0
  407. package/dist/indexer/unused-exports.js.map +1 -0
  408. package/dist/indexer/workspace-symbols.d.ts.map +1 -1
  409. package/dist/indexer/workspace-symbols.js +3 -2
  410. package/dist/indexer/workspace-symbols.js.map +1 -1
  411. package/dist/indexer.d.ts +3 -8
  412. package/dist/indexer.d.ts.map +1 -1
  413. package/dist/indexer.js +1 -1
  414. package/dist/indexer.js.map +1 -1
  415. package/dist/languages/callable-arity.d.ts +223 -0
  416. package/dist/languages/callable-arity.d.ts.map +1 -0
  417. package/dist/languages/callable-arity.js +1199 -0
  418. package/dist/languages/callable-arity.js.map +1 -0
  419. package/dist/languages/definitions/c-family.d.ts.map +1 -1
  420. package/dist/languages/definitions/c-family.js +30 -1
  421. package/dist/languages/definitions/c-family.js.map +1 -1
  422. package/dist/languages/definitions/c.d.ts +4 -0
  423. package/dist/languages/definitions/c.d.ts.map +1 -1
  424. package/dist/languages/definitions/c.js +19 -0
  425. package/dist/languages/definitions/c.js.map +1 -1
  426. package/dist/languages/definitions/cpp.d.ts.map +1 -1
  427. package/dist/languages/definitions/cpp.js +12 -0
  428. package/dist/languages/definitions/cpp.js.map +1 -1
  429. package/dist/languages/definitions/csharp.d.ts.map +1 -1
  430. package/dist/languages/definitions/csharp.js +2 -8
  431. package/dist/languages/definitions/csharp.js.map +1 -1
  432. package/dist/languages/definitions/go.d.ts.map +1 -1
  433. package/dist/languages/definitions/go.js +3 -0
  434. package/dist/languages/definitions/go.js.map +1 -1
  435. package/dist/languages/definitions/javascript.d.ts.map +1 -1
  436. package/dist/languages/definitions/javascript.js +10 -1
  437. package/dist/languages/definitions/javascript.js.map +1 -1
  438. package/dist/languages/definitions/js-family.d.ts +1 -1
  439. package/dist/languages/definitions/js-family.d.ts.map +1 -1
  440. package/dist/languages/definitions/js-family.js +7 -1
  441. package/dist/languages/definitions/js-family.js.map +1 -1
  442. package/dist/languages/definitions/php.d.ts.map +1 -1
  443. package/dist/languages/definitions/php.js +5 -1
  444. package/dist/languages/definitions/php.js.map +1 -1
  445. package/dist/languages/definitions/typescript.d.ts.map +1 -1
  446. package/dist/languages/definitions/typescript.js +8 -1
  447. package/dist/languages/definitions/typescript.js.map +1 -1
  448. package/dist/languages/definitions/zig.d.ts.map +1 -1
  449. package/dist/languages/definitions/zig.js +8 -0
  450. package/dist/languages/definitions/zig.js.map +1 -1
  451. package/dist/lifecycle/manifest.d.ts.map +1 -1
  452. package/dist/lifecycle/manifest.js +0 -1
  453. package/dist/lifecycle/manifest.js.map +1 -1
  454. package/dist/mcp/handlers.js +14 -7
  455. package/dist/mcp/handlers.js.map +1 -1
  456. package/dist/native/byte-index.d.ts +6 -0
  457. package/dist/native/byte-index.d.ts.map +1 -1
  458. package/dist/native/byte-index.js +11 -6
  459. package/dist/native/byte-index.js.map +1 -1
  460. package/dist/native/contracts.d.ts +2 -3
  461. package/dist/native/contracts.d.ts.map +1 -1
  462. package/dist/native/execution.d.ts +9 -9
  463. package/dist/native/execution.d.ts.map +1 -1
  464. package/dist/native/execution.js +37 -77
  465. package/dist/native/execution.js.map +1 -1
  466. package/dist/native/js-bridge.d.ts +2 -15
  467. package/dist/native/js-bridge.d.ts.map +1 -1
  468. package/dist/native/js-bridge.js +2 -15
  469. package/dist/native/js-bridge.js.map +1 -1
  470. package/dist/native/query-results.js +2 -2
  471. package/dist/native/query-results.js.map +1 -1
  472. package/dist/native/runtime.d.ts +12 -12
  473. package/dist/native/runtime.d.ts.map +1 -1
  474. package/dist/native/runtime.js +24 -69
  475. package/dist/native/runtime.js.map +1 -1
  476. package/dist/native/tree-sitter-native.d.ts +3 -3
  477. package/dist/native/tree-sitter-native.d.ts.map +1 -1
  478. package/dist/native/tree-sitter-native.js +2 -2
  479. package/dist/native/tree-sitter-native.js.map +1 -1
  480. package/dist/presets.d.ts.map +1 -1
  481. package/dist/presets.js +0 -4
  482. package/dist/presets.js.map +1 -1
  483. package/dist/review/candidates.d.ts.map +1 -1
  484. package/dist/review/candidates.js +1 -1
  485. package/dist/review/candidates.js.map +1 -1
  486. package/dist/review/deleted.d.ts +3 -3
  487. package/dist/review/deleted.d.ts.map +1 -1
  488. package/dist/review/deleted.js +82 -32
  489. package/dist/review/deleted.js.map +1 -1
  490. package/dist/review/report.d.ts +1 -0
  491. package/dist/review/report.d.ts.map +1 -1
  492. package/dist/review/report.js +1 -1
  493. package/dist/review/report.js.map +1 -1
  494. package/dist/review.d.ts.map +1 -1
  495. package/dist/review.js +3 -20
  496. package/dist/review.js.map +1 -1
  497. package/dist/session.d.ts.map +1 -1
  498. package/dist/session.js +0 -5
  499. package/dist/session.js.map +1 -1
  500. package/dist/sql/navigation.d.ts.map +1 -1
  501. package/dist/sql/navigation.js +2 -1
  502. package/dist/sql/navigation.js.map +1 -1
  503. package/dist/sql/source-graph.d.ts.map +1 -1
  504. package/dist/sql/source-graph.js +2 -2
  505. package/dist/sql/source-graph.js.map +1 -1
  506. package/dist/sqlite/schema.d.ts +1 -1
  507. package/dist/sqlite/schema.d.ts.map +1 -1
  508. package/dist/sqlite/schema.js +8 -2
  509. package/dist/sqlite/schema.js.map +1 -1
  510. package/dist/sqlite/write.js +2 -2
  511. package/dist/sqlite/write.js.map +1 -1
  512. package/dist/types.d.ts +2 -0
  513. package/dist/types.d.ts.map +1 -1
  514. package/dist/util/bloom-filter.d.ts +8 -1
  515. package/dist/util/bloom-filter.d.ts.map +1 -1
  516. package/dist/util/bloom-filter.js +15 -2
  517. package/dist/util/bloom-filter.js.map +1 -1
  518. package/dist/util/glob.d.ts +32 -0
  519. package/dist/util/glob.d.ts.map +1 -0
  520. package/dist/util/glob.js +137 -0
  521. package/dist/util/glob.js.map +1 -0
  522. package/dist/util/graph-edges.d.ts +19 -1
  523. package/dist/util/graph-edges.d.ts.map +1 -1
  524. package/dist/util/graph-edges.js +30 -4
  525. package/dist/util/graph-edges.js.map +1 -1
  526. package/dist/util/identifiers.d.ts +15 -0
  527. package/dist/util/identifiers.d.ts.map +1 -1
  528. package/dist/util/identifiers.js +35 -0
  529. package/dist/util/identifiers.js.map +1 -1
  530. package/dist/util/member-access-tables.d.ts +61 -4
  531. package/dist/util/member-access-tables.d.ts.map +1 -1
  532. package/dist/util/member-access-tables.js +139 -19
  533. package/dist/util/member-access-tables.js.map +1 -1
  534. package/dist/util/member-access.d.ts +17 -0
  535. package/dist/util/member-access.d.ts.map +1 -1
  536. package/dist/util/member-access.js +98 -3
  537. package/dist/util/member-access.js.map +1 -1
  538. package/dist/util/project-files.d.ts +2 -10
  539. package/dist/util/project-files.d.ts.map +1 -1
  540. package/dist/util/project-files.js +29 -51
  541. package/dist/util/project-files.js.map +1 -1
  542. package/dist/util/python-type-checking.d.ts +18 -0
  543. package/dist/util/python-type-checking.d.ts.map +1 -0
  544. package/dist/util/python-type-checking.js +160 -0
  545. package/dist/util/python-type-checking.js.map +1 -0
  546. package/dist/util/resolution/cargo-targets.d.ts +11 -0
  547. package/dist/util/resolution/cargo-targets.d.ts.map +1 -1
  548. package/dist/util/resolution/cargo-targets.js +174 -13
  549. package/dist/util/resolution/cargo-targets.js.map +1 -1
  550. package/dist/util/resolution/csharp.d.ts +33 -1
  551. package/dist/util/resolution/csharp.d.ts.map +1 -1
  552. package/dist/util/resolution/csharp.js +145 -30
  553. package/dist/util/resolution/csharp.js.map +1 -1
  554. package/dist/util/resolution/jvm.d.ts +7 -3
  555. package/dist/util/resolution/jvm.d.ts.map +1 -1
  556. package/dist/util/resolution/jvm.js +56 -38
  557. package/dist/util/resolution/jvm.js.map +1 -1
  558. package/dist/util/resolution/php.d.ts.map +1 -1
  559. package/dist/util/resolution/php.js +35 -8
  560. package/dist/util/resolution/php.js.map +1 -1
  561. package/dist/util/resolution/python.d.ts +9 -0
  562. package/dist/util/resolution/python.d.ts.map +1 -1
  563. package/dist/util/resolution/python.js +46 -0
  564. package/dist/util/resolution/python.js.map +1 -1
  565. package/dist/util/resolution/rust.d.ts +0 -1
  566. package/dist/util/resolution/rust.d.ts.map +1 -1
  567. package/dist/util/resolution/rust.js +95 -35
  568. package/dist/util/resolution/rust.js.map +1 -1
  569. package/dist/util/resolution/specifier-targets.d.ts +44 -0
  570. package/dist/util/resolution/specifier-targets.d.ts.map +1 -0
  571. package/dist/util/resolution/specifier-targets.js +152 -0
  572. package/dist/util/resolution/specifier-targets.js.map +1 -0
  573. package/dist/util/resolution-candidates.d.ts +5 -0
  574. package/dist/util/resolution-candidates.d.ts.map +1 -1
  575. package/dist/util/resolution-candidates.js +16 -3
  576. package/dist/util/resolution-candidates.js.map +1 -1
  577. package/dist/util/resolution.d.ts +2 -1
  578. package/dist/util/resolution.d.ts.map +1 -1
  579. package/dist/util/resolution.js +101 -15
  580. package/dist/util/resolution.js.map +1 -1
  581. package/dist/util/specifiers.d.ts +29 -1
  582. package/dist/util/specifiers.d.ts.map +1 -1
  583. package/dist/util/specifiers.js +56 -8
  584. package/dist/util/specifiers.js.map +1 -1
  585. package/dist/util/trivia.d.ts.map +1 -1
  586. package/dist/util/trivia.js +49 -30
  587. package/dist/util/trivia.js.map +1 -1
  588. package/dist/util/workspace.d.ts.map +1 -1
  589. package/dist/util/workspace.js +32 -4
  590. package/dist/util/workspace.js.map +1 -1
  591. package/docs/mcp.md +3 -2
  592. package/package.json +5 -7
  593. package/dist/impact/call-compatibility/providers/profiles.d.ts +0 -80
  594. package/dist/impact/call-compatibility/providers/profiles.d.ts.map +0 -1
  595. package/dist/impact/call-compatibility/providers/profiles.js +0 -164
  596. package/dist/impact/call-compatibility/providers/profiles.js.map +0 -1
@@ -1,19 +1,122 @@
1
+ import { definitionWithoutDeferredSteps, moduleAliasIsUnshadowed, nameResolutionPreloadFiles, phpImportTypeAtPosition, resolveBareName, settleNameResolution, } from "../indexer/name-resolution.js";
2
+ import { recoverIncludedCallableStar } from "../indexer/navigation.js";
1
3
  import { isUnsupportedParserInputError, prepareSourceInput } from "../languages/file-prep.js";
4
+ import { supportForFileWithoutHeaderSample } from "../languages.js";
2
5
  import { logWithLevel } from "../logging.js";
3
6
  import { ProjectedSyntaxTree } from "../native/projected-tree.js";
4
7
  import { assertNativeRequiredAvailable, getNativeSyntaxTreeExecution, isNativeRequiredUnavailableError, } from "../native/tree-sitter-native.js";
5
- import { resolveExport } from "../indexer/navigation-resolve.js";
6
- import { findClosestScopeBinding, getOrBuildScopeIndex } from "../indexer/navigation-local.js";
7
- import { SymbolKind } from "../indexer/types.js";
8
+ import { cppEquivalentCallableBindings } from "../indexer/cpp-callables.js";
9
+ import { cjsRequireValueBinding, resolveExport } from "../indexer/navigation-resolve.js";
10
+ import { typescriptCollapsedOverloadTarget, typescriptOverloadImplementationAcceptsCount, } from "../indexer/ts-callables.js";
11
+ import { isJsTsLanguage } from "../languages/js-family.js";
12
+ import { isGoExportedMemberName, languageHasDeclarationVisibility } from "../indexer/declaration-visibility.js";
13
+ import { inheritsMemberOverloads } from "../indexer/member-selection.js";
14
+ import { getPackageDeclarationName } from "../indexer/compilation-units.js";
15
+ import { innermostNamespaceImport, resolveMemberAccessDefinition, sameParameterTypes, } from "../indexer/navigation-goto.js";
16
+ import { inferPhpQualifiedReferenceImportType } from "../indexer/navigation-php.js";
17
+ import { ensurePhpNamespaceSymbolIndex } from "../indexer/php-namespace-symbols.js";
18
+ import { getOrBuildScopeIndex } from "../indexer/navigation-local.js";
19
+ import { ensureParsedContext } from "../indexer/parse-context.js";
20
+ import { SymbolKind, } from "../indexer/types.js";
8
21
  import { fileIdentityKey, normalizePath } from "../util/paths.js";
9
- import { buildSymbolGraph } from "./symbol-graph.js";
22
+ import { foldPhpIdentifierCase } from "../util/identifiers.js";
23
+ import { buildSymbolGraph, defNodeId } from "./symbol-graph.js";
10
24
  import { collectDetailedDeclarations } from "./symbol-graph-detailed/ast.js";
11
- import { emitClassInheritanceEdges, emitFunctionBodyEdges, emitMemberOwnershipEdges, emitMemberImplementationEdges, emitPythonDecoratorEdges, emitRustImplEdges, } from "./symbol-graph-detailed/edge-passes.js";
25
+ import { emitClassInheritanceEdges, emitFunctionBodyEdges, emitMemberOwnershipEdges, emitMemberImplementationEdges, SPECIALIZED_EDGE_PASSES, } from "./symbol-graph-detailed/edge-passes.js";
12
26
  import { buildImportAliasMaps } from "./symbol-graph-detailed/import-aliases.js";
13
27
  import { createMemberChainResolver } from "./symbol-graph-detailed/member-chains.js";
14
- import { emitReceiverCallEdges } from "./symbol-graph-detailed/receiver-calls.js";
28
+ import { emitReceiverCallEdges, inheritedReceiverMemberSignatures, } from "./symbol-graph-detailed/receiver-calls.js";
29
+ const CPP_CLASS_DECLARATION_TYPES = new Set(["class_specifier", "struct_specifier", "union_specifier"]);
30
+ function symbolDefForBinding(moduleEntry, binding) {
31
+ const bindingRange = binding.def;
32
+ if (!bindingRange)
33
+ return null;
34
+ return (moduleEntry.locals.find((candidate) => candidate.kind === SymbolKind.Function &&
35
+ candidate.range.start.index === bindingRange.start.index &&
36
+ candidate.range.end.index === bindingRange.end.index) ?? null);
37
+ }
38
+ function recordCallableDeclarationAliases(moduleEntry, languageId, bindings, nodeAliases) {
39
+ const recordGroup = (group) => {
40
+ if (group.length < 2)
41
+ return;
42
+ const canonicalBinding = group.find((binding) => !binding.callable?.definition) ?? group[0];
43
+ const canonicalDef = symbolDefForBinding(moduleEntry, canonicalBinding);
44
+ if (!canonicalDef)
45
+ return;
46
+ const canonicalId = defNodeId(canonicalDef);
47
+ for (const binding of group) {
48
+ const def = symbolDefForBinding(moduleEntry, binding);
49
+ if (!def)
50
+ continue;
51
+ const id = defNodeId(def);
52
+ if (id !== canonicalId)
53
+ nodeAliases.set(id, canonicalId);
54
+ }
55
+ };
56
+ if (languageId === "c") {
57
+ const byName = new Map();
58
+ for (const binding of bindings) {
59
+ if (binding.kind !== "function" || !binding.def)
60
+ continue;
61
+ const key = binding.callable?.key ?? binding.canonicalName;
62
+ const group = byName.get(key) ?? [];
63
+ group.push(binding);
64
+ byName.set(key, group);
65
+ }
66
+ for (const group of byName.values())
67
+ recordGroup(group);
68
+ return;
69
+ }
70
+ if (languageId !== "cpp")
71
+ return;
72
+ const handled = new Set();
73
+ for (const binding of bindings) {
74
+ if (binding.kind !== "function" || handled.has(binding))
75
+ continue;
76
+ const group = cppEquivalentCallableBindings(binding);
77
+ for (const candidate of group)
78
+ handled.add(candidate);
79
+ recordGroup(group);
80
+ }
81
+ }
82
+ function recordTypeScriptCallableAliases(moduleEntry, languageId, nodeAliases) {
83
+ if (languageId !== "ts" && languageId !== "tsx")
84
+ return;
85
+ const groups = new Map();
86
+ for (const local of moduleEntry.locals) {
87
+ if (local.kind !== SymbolKind.Function || !local.callable || local.callable.role === "other")
88
+ continue;
89
+ const group = groups.get(local.callable.key) ?? [];
90
+ group.push(local);
91
+ groups.set(local.callable.key, group);
92
+ }
93
+ for (const group of groups.values()) {
94
+ if (group.length < 2)
95
+ continue;
96
+ const canonical = typescriptCollapsedOverloadTarget(group, (local) => local.callable);
97
+ if (!canonical)
98
+ continue;
99
+ const canonicalId = defNodeId(canonical);
100
+ for (const local of group) {
101
+ const id = defNodeId(local);
102
+ if (id !== canonicalId)
103
+ nodeAliases.set(id, canonicalId);
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * The indexed symbol a definition names (with its member metadata), or null for a parameter or
109
+ * block local, which has no graph node.
110
+ */
111
+ function indexedSymbolFor(index, def) {
112
+ const module = index.byFile.get(fileIdentityKey(def.file));
113
+ return (module?.locals.find((local) => local.localName === def.localName &&
114
+ local.range.start.index === def.range.start.index &&
115
+ local.range.end.index === def.range.end.index) ?? null);
116
+ }
15
117
  export async function buildSymbolGraphDetailed(index, opts) {
16
- assertNativeRequiredAvailable(index.nativeMode);
118
+ assertNativeRequiredAvailable();
119
+ await ensurePhpNamespaceSymbolIndex(index);
17
120
  const base = await buildSymbolGraph(index, opts?.files ? { files: opts.files } : undefined);
18
121
  const configuredMaxEdges = typeof opts?.maxEdges === "number" && opts.maxEdges > 0 ? Math.floor(opts.maxEdges) : undefined;
19
122
  const maxEdges = configuredMaxEdges ?? Number.POSITIVE_INFINITY;
@@ -49,15 +152,23 @@ export async function buildSymbolGraphDetailed(index, opts) {
49
152
  edgeCount++;
50
153
  return true;
51
154
  };
52
- const recordEdge = (fromId, toId, label, site) => {
155
+ const edgeKey = (fromId, toId, label, site) => {
53
156
  const siteKey = site ? `${site.file}:${site.range.start.index ?? ""}:${site.range.end.index ?? ""}` : "";
54
- const key = `${fromId}->${toId}::${label ?? ""}::${siteKey}`;
157
+ return `${fromId}->${toId}::${label ?? ""}::${siteKey}`;
158
+ };
159
+ const recordEdge = (fromId, toId, label, site) => {
160
+ const key = edgeKey(fromId, toId, label, site);
55
161
  if (added.has(key))
56
162
  return true;
57
163
  added.add(key);
58
164
  return maybePushEdge(fromId, toId, label, site);
59
165
  };
60
- const resolveExportNamespace = (file, exportedName) => resolveExport(index, file, exportedName);
166
+ const resolveExportNamespace = (file, exportedName) => {
167
+ const languageId = supportForFileWithoutHeaderSample(file, index.languageExtensions)?.id;
168
+ if (!isGoExportedMemberName(languageId, exportedName))
169
+ return null;
170
+ return resolveExport(index, file, exportedName);
171
+ };
61
172
  const resolveExportDef = (file, exportedName) => {
62
173
  const resolved = resolveExportNamespace(file, exportedName);
63
174
  return resolved?.kind === "resolved" ? resolved.def : null;
@@ -68,7 +179,10 @@ export async function buildSymbolGraphDetailed(index, opts) {
68
179
  for (const segment of [...names].reverse()) {
69
180
  if (!file)
70
181
  break;
71
- const resolved = resolveExportNamespace(file, segment);
182
+ const languageId = supportForFileWithoutHeaderSample(file, index.languageExtensions)?.id;
183
+ const resolved = languageId && isJsTsLanguage(languageId)
184
+ ? resolveExport(index, file, segment, { allowLocalFallback: false })
185
+ : resolveExportNamespace(file, segment);
72
186
  if (!resolved) {
73
187
  targetDef = null;
74
188
  break;
@@ -81,32 +195,70 @@ export async function buildSymbolGraphDetailed(index, opts) {
81
195
  targetDef = resolved.def;
82
196
  file = normalizePath(targetDef.file);
83
197
  }
84
- if (targetDef) {
198
+ if (targetDef)
85
199
  return targetDef;
86
- }
200
+ const languageId = supportForFileWithoutHeaderSample(file ?? startFile, index.languageExtensions)?.id;
201
+ if (languageId === "c" ||
202
+ languageId === "cpp" ||
203
+ (languageId && (isJsTsLanguage(languageId) || languageHasDeclarationVisibility(languageId))))
204
+ return null;
87
205
  const fileKey = typeof file === "string" ? fileIdentityKey(file) : null;
88
206
  const moduleEntry = fileKey ? index.byFile.get(fileKey) : undefined;
89
207
  const lastName = names[0];
208
+ if (languageId === "go" && (!lastName || !isGoExportedMemberName(languageId, lastName)))
209
+ return null;
90
210
  return moduleEntry?.locals.find((entry) => entry.localName === lastName) ?? null;
91
211
  };
92
212
  const resolveExportFrom = (file, exportedName) => resolveExportDef(file, exportedName);
93
213
  const receiverCalls = [];
94
- // Every receiver call resolves to a callable declared somewhere in the project, so
95
- // this set short-circuits receiver typing for calls into runtime and dependency
96
- // APIs, which dominate real call sites. Built on first use because a scoped graph
97
- // may never reach a receiver call.
214
+ const fileHiddenMemberIds = new Set();
215
+ const receiverMemberScopes = new Map();
216
+ const receiverMemberArities = new Map();
217
+ const sharedOwnerPeers = new Map();
218
+ const sharedOwnerAnchors = new Map();
219
+ const sharedOwnerAccessibleMembers = new Map();
220
+ const nodeAliases = new Map();
221
+ const ownershipParsedContexts = new Map();
222
+ const loadParsedFile = (file) => {
223
+ const fileKey = fileIdentityKey(file);
224
+ const cached = ownershipParsedContexts.get(fileKey);
225
+ if (cached)
226
+ return cached;
227
+ const pending = ensureParsedContext(file, index.parsed?.get(fileKey), index.languageExtensions).catch(() => null);
228
+ ownershipParsedContexts.set(fileKey, pending);
229
+ return pending;
230
+ };
231
+ // Receiver calls into runtime and dependency APIs dominate real call sites. Build these
232
+ // indexes lazily so a scoped graph that has no receiver calls pays no allocation cost.
98
233
  let callableNames;
99
- const hasCallableNamed = (name) => {
234
+ const ensureCallableNames = () => {
100
235
  if (!callableNames) {
101
- callableNames = new Set();
236
+ callableNames = { exact: new Set(), phpFolded: new Set() };
102
237
  for (const entry of index.byFile.values()) {
238
+ const isPhp = supportForFileWithoutHeaderSample(entry.file, index.languageExtensions)?.id === "php";
103
239
  for (const local of entry.locals) {
104
- if (local.kind === SymbolKind.Function)
105
- callableNames.add(local.localName);
240
+ if (local.kind !== SymbolKind.Function)
241
+ continue;
242
+ callableNames.exact.add(local.localName);
243
+ if (isPhp)
244
+ callableNames.phpFolded.add(foldPhpIdentifierCase(local.localName));
106
245
  }
107
246
  }
108
247
  }
109
- return callableNames.has(name);
248
+ return callableNames;
249
+ };
250
+ const hasCallableNamed = (name, phpCaseInsensitive = false) => {
251
+ const names = ensureCallableNames();
252
+ return phpCaseInsensitive ? names.phpFolded.has(foldPhpIdentifierCase(name)) : names.exact.has(name);
253
+ };
254
+ // Function-valued bindings (`const helper = () => 1`) index as variables, so the
255
+ // kind scan above cannot see them; the detailed pass mirrors each name it proves
256
+ // callable here as its files are processed.
257
+ const noteCallableName = (name, phpCaseInsensitive = false) => {
258
+ const names = ensureCallableNames();
259
+ names.exact.add(name);
260
+ if (phpCaseInsensitive)
261
+ names.phpFolded.add(foldPhpIdentifierCase(name));
110
262
  };
111
263
  const optionFileKeys = opts?.files ? new Set(Array.from(opts.files, fileIdentityKey)) : undefined;
112
264
  for (const moduleEntry of index.byFile.values()) {
@@ -135,7 +287,7 @@ export async function buildSymbolGraphDetailed(index, opts) {
135
287
  continue;
136
288
  }
137
289
  if (sup && src !== undefined && !tree) {
138
- const nativeTreeExecution = getNativeSyntaxTreeExecution(src, sup, index.nativeMode);
290
+ const nativeTreeExecution = getNativeSyntaxTreeExecution(src, sup);
139
291
  if (nativeTreeExecution.tree) {
140
292
  tree = new ProjectedSyntaxTree(src, nativeTreeExecution.tree);
141
293
  }
@@ -147,7 +299,30 @@ export async function buildSymbolGraphDetailed(index, opts) {
147
299
  if (!sup || src === undefined || !tree) {
148
300
  throw new Error(`Failed to parse ${file}`);
149
301
  }
150
- const { aliasToTargetDef, aliasToTargetModule } = buildImportAliasMaps(index, moduleEntry, resolveExportNamespace, resolveExportFrom);
302
+ ownershipParsedContexts.set(fileIdentityKey(file), Promise.resolve({ source: src, tree, sup }));
303
+ const scopeIndex = getOrBuildScopeIndex(index, file, src, sup, moduleEntry, tree);
304
+ const { aliasToTargetDef, aliasToTargetModule } = buildImportAliasMaps(index, moduleEntry, resolveExportNamespace, resolveExportFrom, scopeIndex);
305
+ const aliasToSpecifier = new Map();
306
+ if (isJsTsLanguage(sup.id)) {
307
+ for (const imp of moduleEntry.imports) {
308
+ if (imp.kind !== "namespace" || typeof imp.resolved !== "string")
309
+ continue;
310
+ const target = aliasToTargetModule.get(imp.localNS);
311
+ if (target && fileIdentityKey(imp.resolved) === fileIdentityKey(target)) {
312
+ aliasToSpecifier.set(imp.localNS, imp.from);
313
+ }
314
+ }
315
+ }
316
+ if (sup.id === "c" || sup.id === "cpp") {
317
+ for (const [alias, def] of [...aliasToTargetDef]) {
318
+ const exported = resolveExport(index, def.file, alias, {
319
+ allowLocalFallback: false,
320
+ ...(sup.id === "c" ? { cNamespace: "ordinary" } : {}),
321
+ });
322
+ if (exported?.kind !== "resolved")
323
+ aliasToTargetDef.delete(alias);
324
+ }
325
+ }
151
326
  const { functionNodes, classNodes, constStringOf } = collectDetailedDeclarations(tree.rootNode, sup, src, moduleEntry.locals);
152
327
  const memberResolver = createMemberChainResolver({
153
328
  sup,
@@ -155,27 +330,82 @@ export async function buildSymbolGraphDetailed(index, opts) {
155
330
  constStringOf,
156
331
  aliasToTargetModule,
157
332
  resolveMemberPathFromModule,
333
+ resolveNamespaceAlias: (alias, useNode) => {
334
+ const imported = sup.id === "zig" || sup.id === "csharp" || isJsTsLanguage(sup.id)
335
+ ? innermostNamespaceImport(moduleEntry.imports, alias, useNode, sup.normalizeIdentifier)
336
+ : undefined;
337
+ if (!moduleAliasIsUnshadowed(bareNameUse(alias, useNode), imported?.from ?? aliasToSpecifier.get(alias))) {
338
+ return undefined;
339
+ }
340
+ if (sup.id === "zig" || sup.id === "csharp" || isJsTsLanguage(sup.id)) {
341
+ if (isJsTsLanguage(sup.id) &&
342
+ imported?.mechanism === "cjs" &&
343
+ typeof imported.resolved === "string" &&
344
+ cjsRequireValueBinding(index, imported.resolved)) {
345
+ return undefined;
346
+ }
347
+ if (typeof imported?.resolved === "string")
348
+ return imported.resolved;
349
+ if (sup.id === "csharp" || sup.id === "zig")
350
+ return undefined;
351
+ }
352
+ return aliasToTargetModule.get(alias);
353
+ },
158
354
  });
159
355
  const { memberExpressionType, optionalMemberTypes, propertyIdentifierTypes, resolveMemberChainTarget } = memberResolver;
160
- const scopeIndex = getOrBuildScopeIndex(index, file, src, sup, moduleEntry, tree);
161
- const resolveIdentifier = (name, node) => {
162
- const binding = findClosestScopeBinding(scopeIndex, name, node, sup);
163
- if (binding) {
164
- if (!binding.def)
165
- return aliasToTargetDef.get(binding.name) ?? null;
166
- return (moduleEntry.locals.find((local) => sup.normalizeIdentifier(local.localName) === binding.canonicalName &&
167
- local.range.start.index === binding.def?.start.index &&
168
- local.range.end.index === binding.def?.end.index) ?? null);
169
- }
170
- const localCandidates = moduleEntry.locals.filter((local) => sup.normalizeIdentifier(local.localName) === sup.normalizeIdentifier(name));
171
- if (localCandidates.length === 1)
172
- return localCandidates[0] ?? null;
173
- return aliasToTargetDef.get(name) ?? null;
356
+ recordCallableDeclarationAliases(moduleEntry, sup.id, scopeIndex.all, nodeAliases);
357
+ recordTypeScriptCallableAliases(moduleEntry, sup.id, nodeAliases);
358
+ // Files the shared name lookup reads synchronously for this module (imports, C++ includes).
359
+ const parsedForResolution = new Map([
360
+ [fileIdentityKey(file), { source: src, tree, sup }],
361
+ ]);
362
+ for (const preload of nameResolutionPreloadFiles(index, moduleEntry, sup.id)) {
363
+ const key = fileIdentityKey(preload);
364
+ if (parsedForResolution.has(key))
365
+ continue;
366
+ const parsedFile = await loadParsedFile(preload);
367
+ if (parsedFile)
368
+ parsedForResolution.set(key, parsedFile);
369
+ }
370
+ const resolutionFiles = {
371
+ get: (target) => parsedForResolution.get(fileIdentityKey(target)) ?? null,
372
+ };
373
+ const moduleParsed = { source: src, tree, sup };
374
+ const bareNameUse = (name, node) => {
375
+ const phpImportType = sup.id === "php"
376
+ ? (phpImportTypeAtPosition(moduleEntry.imports, node.startPosition.row, node.startPosition.column) ??
377
+ inferPhpQualifiedReferenceImportType(node))
378
+ : undefined;
379
+ return {
380
+ index,
381
+ mod: moduleEntry,
382
+ file,
383
+ parsed: moduleParsed,
384
+ scopeIndex,
385
+ files: resolutionFiles,
386
+ node,
387
+ name,
388
+ ...(phpImportType ? { phpImportType } : {}),
389
+ };
390
+ };
391
+ // The graph has nodes only for indexed symbols; a parameter or function-local binding
392
+ // that navigation resolves has no node, so it gets no edge.
393
+ const indexedOrNull = (definition) => definition ? indexedSymbolFor(index, definition) : null;
394
+ const resolveName = (name, node) => resolveBareName(bareNameUse(name, node));
395
+ const resolveIdentifier = (name, node) => indexedOrNull(definitionWithoutDeferredSteps(resolveName(name, node)));
396
+ const settleName = async (name, node, resolution) => {
397
+ const settled = await settleNameResolution(bareNameUse(name, node), resolution, {
398
+ // A member that cannot accept the call's argument count gets no edge and no fallback.
399
+ requireAcceptedArity: true,
400
+ recoverIncludedStar: (lookupName, cNamespace) => recoverIncludedCallableStar(index, moduleEntry, sup.id, lookupName, cNamespace, node, src),
401
+ });
402
+ return indexedOrNull(settled?.status === "ok" ? settled.definition : null);
174
403
  };
175
404
  const edgePassContext = {
176
405
  index,
177
406
  sup,
178
407
  source: src,
408
+ tree,
179
409
  moduleEntry,
180
410
  nodes,
181
411
  membersOnly,
@@ -185,17 +415,55 @@ export async function buildSymbolGraphDetailed(index, opts) {
185
415
  aliasToTargetDef,
186
416
  aliasToTargetModule,
187
417
  resolveIdentifier,
418
+ resolveName,
419
+ settleName,
420
+ moduleAliasIsUnshadowed: (name, node) => moduleAliasIsUnshadowed(bareNameUse(name, node), aliasToSpecifier.get(name)),
188
421
  resolveExportFrom,
189
422
  resolveMemberChainTarget,
423
+ cppDeclaresClass: (def) => {
424
+ const parsed = parsedForResolution.get(fileIdentityKey(def.file));
425
+ if (!parsed)
426
+ return false;
427
+ const start = def.range.start.index ?? 0;
428
+ const nameNode = parsed.tree.rootNode.descendantForIndex(start, def.range.end.index ?? start);
429
+ return CPP_CLASS_DECLARATION_TYPES.has(nameNode.parent?.type ?? "");
430
+ },
431
+ resolveMemberAccessTarget: async (node) => {
432
+ const useNode = tree.rootNode.descendantForIndex(node.startIndex, node.endIndex);
433
+ const resolved = await resolveMemberAccessDefinition({
434
+ index,
435
+ mod: moduleEntry,
436
+ node: useNode,
437
+ source: src,
438
+ tree,
439
+ sup,
440
+ resolveLexicalBinding: (expression) => {
441
+ const name = src.slice(expression.startIndex, expression.endIndex);
442
+ const imported = aliasToTargetDef.get(name);
443
+ if (imported)
444
+ return imported;
445
+ return resolveIdentifier(name, expression);
446
+ },
447
+ });
448
+ return resolved?.status === "ok" ? resolved.definition : null;
449
+ },
190
450
  recordEdge,
191
451
  receiverCalls,
192
- hasCallableNamed,
452
+ receiverMemberScopes,
453
+ receiverMemberArities,
454
+ sharedOwnerPeers,
455
+ sharedOwnerAnchors,
456
+ sharedOwnerAccessibleMembers,
457
+ fileHiddenMemberIds,
458
+ nodeAliases,
459
+ noteCallableName,
460
+ loadParsedFile,
193
461
  };
194
- emitPythonDecoratorEdges(edgePassContext, tree.rootNode);
195
- emitFunctionBodyEdges(edgePassContext, functionNodes);
196
- emitMemberOwnershipEdges(edgePassContext, functionNodes, classNodes);
197
- emitClassInheritanceEdges(edgePassContext, classNodes);
198
- emitRustImplEdges(edgePassContext, tree.rootNode);
462
+ SPECIALIZED_EDGE_PASSES[sup.id]?.beforeModule?.(edgePassContext, tree.rootNode);
463
+ await emitFunctionBodyEdges(edgePassContext, functionNodes);
464
+ await emitMemberOwnershipEdges(edgePassContext, functionNodes, classNodes);
465
+ await emitClassInheritanceEdges(edgePassContext, classNodes);
466
+ SPECIALIZED_EDGE_PASSES[sup.id]?.afterModule?.(edgePassContext, tree.rootNode);
199
467
  }
200
468
  catch (error) {
201
469
  if (isNativeRequiredUnavailableError(error)) {
@@ -207,12 +475,144 @@ export async function buildSymbolGraphDetailed(index, opts) {
207
475
  logWithLevel(opts?.logLevel, "warn", `Warning: Failed to build detailed symbol edges for ${file}:`, error);
208
476
  }
209
477
  }
210
- emitReceiverCallEdges({ nodes, edges }, receiverCalls, recordEdge);
478
+ // Function-valued bindings are proven while each file is processed. Apply the callable-name
479
+ // prefilter only after that pass so receiver calls do not depend on file iteration order.
480
+ const callableReceiverCalls = receiverCalls.filter((candidate) => hasCallableNamed(candidate.memberName, candidate.caseInsensitiveMemberName));
481
+ let typeScriptReceiverFiles;
482
+ let typeScriptReceiverNames;
483
+ for (const candidate of callableReceiverCalls) {
484
+ if (candidate.argumentCount === null)
485
+ continue;
486
+ const languageId = supportForFileWithoutHeaderSample(candidate.site.file, index.languageExtensions)?.id;
487
+ if (languageId !== "ts" && languageId !== "tsx")
488
+ continue;
489
+ (typeScriptReceiverFiles ??= new Set()).add(fileIdentityKey(candidate.site.file));
490
+ (typeScriptReceiverNames ??= new Set()).add(candidate.memberName);
491
+ }
492
+ const typeScriptReceiverTargets = typeScriptReceiverNames?.size
493
+ ? new Map()
494
+ : undefined;
495
+ if (typeScriptReceiverTargets && typeScriptReceiverNames) {
496
+ for (const node of nodes.values()) {
497
+ if (!typeScriptReceiverNames.has(node.name))
498
+ continue;
499
+ const targetLanguageId = supportForFileWithoutHeaderSample(node.file, index.languageExtensions)?.id;
500
+ if (targetLanguageId !== "ts" && targetLanguageId !== "tsx")
501
+ continue;
502
+ const module = index.byFile.get(fileIdentityKey(node.file));
503
+ const def = module?.locals.find((candidate) => defNodeId(candidate) === node.id);
504
+ if (!module || !def || def.kind !== SymbolKind.Function)
505
+ continue;
506
+ if (!module.locals.some((candidate) => candidate.kind === SymbolKind.Function &&
507
+ candidate.localName === def.localName &&
508
+ candidate.range.start.index !== def.range.start.index)) {
509
+ continue;
510
+ }
511
+ const parsed = await loadParsedFile(def.file);
512
+ typeScriptReceiverTargets.set(node.id, { def, module, parsed });
513
+ }
514
+ }
515
+ const memberIdentities = new Map();
516
+ const hasHierarchyReceiver = callableReceiverCalls.some((candidate) => inheritsMemberOverloads(supportForFileWithoutHeaderSample(candidate.site.file, index.languageExtensions)?.id ?? ""));
517
+ const receiverMemberDefinitions = hasHierarchyReceiver ? new Map() : undefined;
518
+ if (callableReceiverCalls.length) {
519
+ const names = new Set(callableReceiverCalls.map((candidate) => candidate.memberName));
520
+ for (const mod of index.byFile.values()) {
521
+ for (const def of mod.locals) {
522
+ if (!def.callable || !names.has(def.localName))
523
+ continue;
524
+ const id = defNodeId(def);
525
+ memberIdentities.set(id, def.callable);
526
+ receiverMemberDefinitions?.set(id, def);
527
+ }
528
+ }
529
+ }
530
+ const overridingSignatures = receiverMemberDefinitions
531
+ ? await inheritedReceiverMemberSignatures({ nodes, edges }, callableReceiverCalls, receiverMemberDefinitions, sharedOwnerAnchors, sharedOwnerAccessibleMembers, index.languageExtensions, (derived, inherited) => sameParameterTypes(index, derived, inherited))
532
+ : undefined;
533
+ const removedReceiverEdges = emitReceiverCallEdges({ nodes, edges }, callableReceiverCalls, recordEdge, receiverMemberScopes, nodeAliases, receiverMemberArities, sharedOwnerAnchors, sharedOwnerAccessibleMembers, fileHiddenMemberIds, (targetId, candidate) => {
534
+ if (candidate.argumentCount === null || !typeScriptReceiverFiles?.has(fileIdentityKey(candidate.site.file))) {
535
+ return true;
536
+ }
537
+ const target = typeScriptReceiverTargets?.get(targetId);
538
+ if (!target)
539
+ return true;
540
+ if (!target.parsed)
541
+ return false;
542
+ return typescriptOverloadImplementationAcceptsCount({
543
+ implementation: target.def,
544
+ locals: target.module.locals,
545
+ argumentCount: candidate.argumentCount,
546
+ });
547
+ }, memberIdentities, index.languageExtensions, overridingSignatures, (memberId, useFile) => {
548
+ const member = receiverMemberDefinitions?.get(memberId);
549
+ if (!member?.javaPackagePrivate || member.javaProtectedMember)
550
+ return true;
551
+ const useLanguage = supportForFileWithoutHeaderSample(useFile, index.languageExtensions)?.id;
552
+ const memberPackage = getPackageDeclarationName(index, member.file, "java");
553
+ const usePackage = getPackageDeclarationName(index, useFile, useLanguage === "kotlin" ? "kotlin" : "java");
554
+ return memberPackage === usePackage;
555
+ });
556
+ edgeCount -= removedReceiverEdges.length;
557
+ for (const edge of removedReceiverEdges)
558
+ added.delete(edgeKey(edge.from, edge.to, edge.label, edge.site));
559
+ const canonicalNodeId = (id) => {
560
+ let current = id;
561
+ const seen = new Set();
562
+ while (nodeAliases.has(current) && !seen.has(current)) {
563
+ seen.add(current);
564
+ current = nodeAliases.get(current);
565
+ }
566
+ return current;
567
+ };
568
+ for (const [aliasId] of nodeAliases) {
569
+ const canonicalId = canonicalNodeId(aliasId);
570
+ nodeAliases.set(aliasId, canonicalId);
571
+ if (canonicalId === aliasId)
572
+ continue;
573
+ const aliasNode = nodes.get(aliasId);
574
+ const canonicalNode = nodes.get(canonicalId);
575
+ if (aliasNode && canonicalNode) {
576
+ if (!canonicalNode.docstring && aliasNode.docstring)
577
+ canonicalNode.docstring = aliasNode.docstring;
578
+ canonicalNode.lineSpan = Math.max(canonicalNode.lineSpan ?? 0, aliasNode.lineSpan ?? 0);
579
+ canonicalNode.complexity = Math.max(canonicalNode.complexity ?? 0, aliasNode.complexity ?? 0);
580
+ if (aliasNode.callable)
581
+ canonicalNode.callable = true;
582
+ if (aliasNode.implementationTarget)
583
+ canonicalNode.implementationTarget = true;
584
+ if (canonicalNode.memberArity === undefined && aliasNode.memberArity !== undefined) {
585
+ canonicalNode.memberArity = aliasNode.memberArity;
586
+ }
587
+ }
588
+ nodes.delete(aliasId);
589
+ }
590
+ if (nodeAliases.size) {
591
+ const reconciledEdges = [];
592
+ const reconciledEdgeKeys = new Set();
593
+ for (const edge of edges) {
594
+ const reconciled = {
595
+ ...edge,
596
+ from: canonicalNodeId(edge.from),
597
+ to: canonicalNodeId(edge.to),
598
+ };
599
+ const key = edgeKey(reconciled.from, reconciled.to, reconciled.label, reconciled.site);
600
+ if (reconciledEdgeKeys.has(key))
601
+ continue;
602
+ reconciledEdgeKeys.add(key);
603
+ reconciledEdges.push(reconciled);
604
+ }
605
+ edges.splice(0, edges.length, ...reconciledEdges);
606
+ added.clear();
607
+ for (const edge of edges)
608
+ added.add(edgeKey(edge.from, edge.to, edge.label, edge.site));
609
+ edgeCount = edges.length;
610
+ }
211
611
  emitMemberImplementationEdges({ nodes, edges }, recordEdge);
212
612
  if (skippedSyntaxTreeFiles > 0) {
213
613
  logWithLevel(opts?.logLevel, "warn", `Warning: Skipped detailed symbol edges for ${skippedSyntaxTreeFiles} file(s) because no syntax-tree backend was available.`);
214
614
  }
215
- return {
615
+ const graph = {
216
616
  nodes,
217
617
  edges,
218
618
  ...(configuredMaxEdges !== undefined
@@ -223,5 +623,8 @@ export async function buildSymbolGraphDetailed(index, opts) {
223
623
  }
224
624
  : {}),
225
625
  };
626
+ if (nodeAliases.size)
627
+ Object.defineProperty(graph, "nodeAliases", { value: nodeAliases });
628
+ return graph;
226
629
  }
227
630
  //# sourceMappingURL=symbol-graph-detailed.js.map