cgraphx 2.0.2 → 2.0.3

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 (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,804 @@
1
+ "use strict";
2
+ /**
3
+ * C++ argument-dependent lookup (ADL / Koenig lookup).
4
+ *
5
+ * When ordinary unqualified lookup fails for a free-call site, ADL also
6
+ * considers candidates declared in the **associated namespaces** of the
7
+ * call's argument types (ISO C++ `[basic.lookup.argdep]`). The canonical
8
+ * pattern V1 unlocks:
9
+ *
10
+ * namespace audit { struct Event; void record(Event); }
11
+ * namespace app { void run() { audit::Event e; record(e); } }
12
+ *
13
+ * Without ADL: `record(e)` is unresolved because `app::run` doesn't
14
+ * `using` anything. With V1 ADL: `audit::record` is discovered via
15
+ * `audit::Event`'s associated namespace.
16
+ *
17
+ * ## Current boundary
18
+ *
19
+ * The current implementation covers class-typed arguments (value, pointer,
20
+ * and reference) and template specializations with explicit type arguments:
21
+ * - `audit::Event e`, `audit::Event* p`, `audit::Event** pp`
22
+ * - `audit::Event& r`, `audit::Event&& rr`
23
+ * - `std::vector<audit::Event>` (template namespace + template-arg namespaces)
24
+ *
25
+ * V2 additionally walks class ancestors (via MRO), so base-class enclosing
26
+ * namespaces also contribute associated namespaces.
27
+ *
28
+ * Function-reference arguments follow ISO C++ `[basic.lookup.argdep]`:
29
+ * associated entities come from the parameter types and return type of each
30
+ * referenced function in the overload set, not from the function's enclosing
31
+ * namespace. For `void worker()`, the associated set is empty. For
32
+ * `void worker(api::Token)` or `api::Token make_token()`, `api` is associated
33
+ * through `Token`.
34
+ *
35
+ * For qualified refs (e.g. `utils::worker`) the workspace lookup is restricted
36
+ * to functions/methods named `worker` in `utils`; for unqualified refs the
37
+ * workspace is searched for matching functions/methods by simple name. Locally
38
+ * declared function-pointer variables and function parameters are excluded
39
+ * from this path.
40
+ *
41
+ * ADL candidates are merged with ordinary unqualified-lookup candidates
42
+ * in the free-call fallback before overload narrowing.
43
+ *
44
+ * ## Parenthesized-name suppression
45
+ *
46
+ * `(f)(s)` MUST NOT trigger ADL — the parenthesized name forces ordinary
47
+ * lookup only. `captures.ts` records sites whose `function` child is a
48
+ * `parenthesized_expression` into `noAdlSites`; `pickCppAdlCandidates`
49
+ * short-circuits when the site key is present.
50
+ *
51
+ * ## State lifecycle
52
+ *
53
+ * Five pieces of module-level state populated per pipeline invocation, all
54
+ * reset together by `clearCppAdlState()` (called from
55
+ * `cppScopeResolver.loadResolutionConfig`, alongside `clearFileLocalNames` —
56
+ * NOT from `clearFileLocalNames` itself), grouped by when they fill:
57
+ *
58
+ * - `argInfoBySite` — per-call-site argument shape (capture-time)
59
+ * - `noAdlSites` — call sites with parenthesized function (capture-time)
60
+ * - `classToNamespaceQualifiedName` — class def → its enclosing namespace
61
+ * qualified name (`populateCppAssociatedNamespaces` time)
62
+ * - `adlIndexByPass` — the lazily-built candidate index, memoized weakly on
63
+ * the `parsedFiles` array it was built from (first-`pickCppAdlCandidates`
64
+ * time; see `ensureAdlIndex`)
65
+ *
66
+ * The class→namespace map uses qualified names (not scope IDs) because
67
+ * C++ namespaces are open: `namespace N { ... }` in file A and
68
+ * `namespace N { ... }` in file B produce two distinct Namespace scopes
69
+ * but logically share the same namespace. ADL must consider candidates
70
+ * declared in either file.
71
+ */
72
+ Object.defineProperty(exports, "__esModule", { value: true });
73
+ exports.validateAdlSeqCoverage = validateAdlSeqCoverage;
74
+ exports.markCppAdlSiteArgs = markCppAdlSiteArgs;
75
+ exports.markCppAdlSiteNoAdl = markCppAdlSiteNoAdl;
76
+ exports.collectCppAdlSideChannel = collectCppAdlSideChannel;
77
+ exports.applyCppAdlSideChannel = applyCppAdlSideChannel;
78
+ exports.clearCppAdlState = clearCppAdlState;
79
+ exports.populateCppAssociatedNamespaces = populateCppAssociatedNamespaces;
80
+ exports.pickCppAdlCandidates = pickCppAdlCandidates;
81
+ const arity_metadata_js_1 = require("./arity-metadata.js");
82
+ const inline_namespaces_js_1 = require("./inline-namespaces.js");
83
+ const argInfoBySite = new Map();
84
+ const noAdlSites = new Set();
85
+ const classToNamespaceQualifiedName = new Map();
86
+ /**
87
+ * Per-`filePath` index of the site keys this file contributed to
88
+ * `argInfoBySite` / `noAdlSites`, kept in **strict lockstep** with those two
89
+ * maps (#1983 perf). Without it, `collectCppAdlSideChannel(filePath)` had to
90
+ * scan the ENTIRE module-level maps (every site of every file the worker
91
+ * parsed in the current sub-batch) and `parseSiteKey` each entry just to pick
92
+ * out one file's slice — O(F²) per sub-batch (~100M `parseSiteKey` calls
93
+ * across the Linux kernel). These indexes turn collect into
94
+ * O(entries-for-this-file).
95
+ *
96
+ * Lockstep invariant: a key is pushed here at most once, exactly when it is
97
+ * first inserted into the corresponding map, and both indexes are cleared
98
+ * wherever `argInfoBySite` / `noAdlSites` are cleared (`clearCppAdlState` and
99
+ * the per-file restore in `applyCppAdlSideChannel`). The "first insert only"
100
+ * guard mirrors the maps' own de-dup (`Map.set` / `Set.add` are idempotent on
101
+ * the key), so iterating an index yields each of this file's keys exactly once
102
+ * — byte-identical to the old filtered full scan.
103
+ */
104
+ const argInfoSiteKeysByFile = new Map();
105
+ const noAdlSiteKeysByFile = new Map();
106
+ /** Push `key` into the per-file index `idx[filePath]` (creating the bucket on
107
+ * first use). Callers guard against duplicate keys so each key appears once. */
108
+ function pushFileSiteKey(idx, filePath, key) {
109
+ let keys = idx.get(filePath);
110
+ if (keys === undefined) {
111
+ keys = [];
112
+ idx.set(filePath, keys);
113
+ }
114
+ keys.push(key);
115
+ }
116
+ /**
117
+ * Per-pass memo: `parsedFiles` array identity → the built index. `WeakMap`-keyed
118
+ * so the entry lives only as long as the caller's `parsedFiles` array does, and
119
+ * is reclaimed with the pass — mirrors `qualifiedNsIndexByPass` in
120
+ * `inline-namespaces.ts` and `moduleScopeIndexByPass` in `file-local-linkage.ts`.
121
+ *
122
+ * Weak keying is load-bearing, not stylistic: the index holds
123
+ * `SymbolDefinition` references reaching into every ParsedFile's scopes, so the
124
+ * previous module-level strong `let` pair (index + source array) kept the whole
125
+ * C/C++ ParsedFile set alive past the point `scope-resolution/pipeline/phase.ts`
126
+ * evicts `files`/`contents`/`preExtractedByPath` and calls `forceGc()` to
127
+ * reclaim it — C++ is 7th of 16 `SCOPE_RESOLVERS` entries, so the retention
128
+ * survived nine later language passes plus emit.
129
+ */
130
+ let adlIndexByPass = new WeakMap();
131
+ function siteKey(filePath, line, col) {
132
+ return `${filePath}:${line}:${col}`;
133
+ }
134
+ /** Last segment of a dotted qualified name (matches legacy inline expression). */
135
+ function adlSimpleName(def) {
136
+ return def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
137
+ }
138
+ function isAdlCallableType(type) {
139
+ return type === 'Function' || type === 'Method' || type === 'Constructor';
140
+ }
141
+ function pushNested(map, outerKey, innerKey, def) {
142
+ let inner = map.get(outerKey);
143
+ if (inner === undefined) {
144
+ inner = new Map();
145
+ map.set(outerKey, inner);
146
+ }
147
+ let arr = inner.get(innerKey);
148
+ if (arr === undefined) {
149
+ arr = [];
150
+ inner.set(innerKey, arr);
151
+ }
152
+ arr.push(def);
153
+ }
154
+ function pushFlat(map, key, def) {
155
+ let arr = map.get(key);
156
+ if (arr === undefined) {
157
+ arr = [];
158
+ map.set(key, arr);
159
+ }
160
+ arr.push(def);
161
+ }
162
+ /** Build the ADL candidate index in a single pass over the workspace. The
163
+ * visitation order (file-major; per file, all namespace scopes before all
164
+ * class scopes; ownedDefs in declaration order) mirrors the legacy push
165
+ * order so `seqByNodeId` reconstructs identical candidate ordering. */
166
+ function buildAdlIndex(scopes, parsedFiles) {
167
+ const idx = {
168
+ classDefsBySimple: new Map(),
169
+ nsCandidates: new Map(),
170
+ friendCandidates: new Map(),
171
+ nsFunctionsByQName: new Map(),
172
+ nsFunctionsBySimple: new Map(),
173
+ seqByNodeId: new Map(),
174
+ };
175
+ // (1) class-like defs by simple name — preserve byId order so arr[0] is the
176
+ // legacy `firstMatch` and `arr.length > 1` is the legacy `ambiguous`.
177
+ for (const def of scopes.defs.byId.values()) {
178
+ if (def.type !== 'Class' &&
179
+ def.type !== 'Struct' &&
180
+ def.type !== 'Interface' &&
181
+ def.type !== 'Enum')
182
+ continue;
183
+ pushFlat(idx.classDefsBySimple, adlSimpleName(def), def);
184
+ }
185
+ let seq = 0;
186
+ for (const parsed of parsedFiles) {
187
+ const scopesById = new Map();
188
+ for (const sc of parsed.scopes)
189
+ scopesById.set(sc.id, sc);
190
+ // parent → children, built once (replaces the legacy O(scopes²) walk).
191
+ const childrenByParent = new Map();
192
+ for (const sc of parsed.scopes) {
193
+ if (sc.parent === null)
194
+ continue;
195
+ let kids = childrenByParent.get(sc.parent);
196
+ if (kids === undefined) {
197
+ kids = [];
198
+ childrenByParent.set(sc.parent, kids);
199
+ }
200
+ kids.push(sc);
201
+ }
202
+ // PASS A — namespace-owned candidates (+ function-reference indexes).
203
+ for (const scope of parsed.scopes) {
204
+ if (scope.kind !== 'Namespace')
205
+ continue;
206
+ const qName = computeNamespaceQName(scope, scopesById);
207
+ // Registration keys reproduce the legacy membership test: own QName
208
+ // always; for an inline namespace child of a Namespace, also the parent
209
+ // QName (ISO C++ inline-namespace transparency for ADL).
210
+ const keys = [];
211
+ if (qName !== '')
212
+ keys.push(qName);
213
+ if ((0, inline_namespaces_js_1.isCppInlineNamespaceScope)(scope.id)) {
214
+ const parentScope = scope.parent !== null ? scopesById.get(scope.parent) : undefined;
215
+ if (parentScope !== undefined && parentScope.kind === 'Namespace') {
216
+ const parentQName = computeNamespaceQName(parentScope, scopesById);
217
+ if (parentQName !== '' && parentQName !== qName)
218
+ keys.push(parentQName);
219
+ }
220
+ }
221
+ for (const def of scope.ownedDefs) {
222
+ if (def.type === 'Function' || def.type === 'Method') {
223
+ const sn = adlSimpleName(def);
224
+ pushFlat(idx.nsFunctionsBySimple, sn, def);
225
+ if (qName !== '')
226
+ pushNested(idx.nsFunctionsByQName, qName, sn, def);
227
+ }
228
+ if (!isAdlCallableType(def.type))
229
+ continue;
230
+ const s = seq++;
231
+ idx.seqByNodeId.set(def.nodeId, s);
232
+ const sn = adlSimpleName(def);
233
+ for (const key of keys)
234
+ pushNested(idx.nsCandidates, key, sn, def);
235
+ }
236
+ }
237
+ // PASS B — hidden-friend + class-member candidates for associated classes.
238
+ for (const scope of parsed.scopes) {
239
+ if (scope.kind !== 'Class')
240
+ continue;
241
+ // Enclosing-namespace QName(s) of the class def(s) in this scope.
242
+ const classNsKeys = new Set();
243
+ for (const def of scope.ownedDefs) {
244
+ if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
245
+ continue;
246
+ const nsQName = classToNamespaceQualifiedName.get(def.nodeId);
247
+ if (nsQName !== undefined)
248
+ classNsKeys.add(nsQName);
249
+ }
250
+ if (classNsKeys.size === 0)
251
+ continue;
252
+ // Friend functions: callable defs in child Function scopes.
253
+ for (const childScope of childrenByParent.get(scope.id) ?? []) {
254
+ if (childScope.kind !== 'Function')
255
+ continue;
256
+ for (const def of childScope.ownedDefs) {
257
+ if (!isAdlCallableType(def.type))
258
+ continue;
259
+ const s = seq++;
260
+ idx.seqByNodeId.set(def.nodeId, s);
261
+ const sn = adlSimpleName(def);
262
+ for (const key of classNsKeys)
263
+ pushNested(idx.friendCandidates, key, sn, def);
264
+ }
265
+ }
266
+ // Class-member callables.
267
+ for (const def of scope.ownedDefs) {
268
+ if (!isAdlCallableType(def.type))
269
+ continue;
270
+ const s = seq++;
271
+ idx.seqByNodeId.set(def.nodeId, s);
272
+ const sn = adlSimpleName(def);
273
+ for (const key of classNsKeys)
274
+ pushNested(idx.friendCandidates, key, sn, def);
275
+ }
276
+ }
277
+ }
278
+ // Dev/test-only invariant guard: every def bucketed into nsCandidates/
279
+ // friendCandidates must have a seqByNodeId entry, otherwise the `?? 0`
280
+ // fallback in pickCppAdlCandidates could collapse two seq-0 candidates and
281
+ // silently drop a CALLS edge. Gated like the rest of the resolver's opt-in
282
+ // validation (see contract/scope-resolver.ts and reconcile-ownership.ts):
283
+ // active in dev/test, off in production and when VALIDATE_SEMANTIC_MODEL=0.
284
+ if (process.env.NODE_ENV !== 'production' && process.env.VALIDATE_SEMANTIC_MODEL !== '0') {
285
+ const missing = validateAdlSeqCoverage(idx);
286
+ if (missing.length > 0) {
287
+ throw new Error(`[cpp-adl] seq-coverage invariant violated: ${missing.length} candidate def(s) ` +
288
+ `bucketed without a seqByNodeId entry (e.g. ${missing.slice(0, 5).join(', ')}). ` +
289
+ `Every def pushed into nsCandidates/friendCandidates must be seq-assigned in the ` +
290
+ `same build block — see pickCppAdlCandidates' \`?? 0\` fallback.`);
291
+ }
292
+ }
293
+ return idx;
294
+ }
295
+ /**
296
+ * Return the nodeIds present in the index's candidate buckets
297
+ * (`nsCandidates` + `friendCandidates`) but missing from `seqByNodeId`, each
298
+ * reported once. Empty array means the seq-coverage invariant holds — which it
299
+ * must, since `buildAdlIndex` assigns a seq to every callable def in the same
300
+ * block that buckets it. Exported for the dev-gated guard in `buildAdlIndex`
301
+ * and its unit test.
302
+ */
303
+ function validateAdlSeqCoverage(idx) {
304
+ const missing = new Set();
305
+ for (const buckets of [idx.nsCandidates, idx.friendCandidates]) {
306
+ for (const bySimple of buckets.values()) {
307
+ for (const defs of bySimple.values()) {
308
+ for (const def of defs) {
309
+ if (!idx.seqByNodeId.has(def.nodeId))
310
+ missing.add(def.nodeId);
311
+ }
312
+ }
313
+ }
314
+ }
315
+ return [...missing];
316
+ }
317
+ /** Build the ADL index on first use of a given `parsedFiles` set; reuse it for
318
+ * every subsequent call site in the same pipeline run. Reset by
319
+ * `clearCppAdlState`.
320
+ *
321
+ * Lifetime: the memoized entry is reachable only while the caller still holds
322
+ * the `parsedFiles` array. Once the pipeline drops it, the entry — and the
323
+ * `SymbolDefinition` references it holds into those files' scopes — becomes
324
+ * collectable; nothing here pins it (see {@link adlIndexByPass}).
325
+ *
326
+ * Staleness is keyed on `parsedFiles` reference identity ONLY, but the index
327
+ * is a function of THREE inputs: `parsedFiles` (namespace/friend candidates),
328
+ * `scopes` (`classDefsBySimple`, read from `scopes.defs.byId`), and the
329
+ * module-level `classToNamespaceQualifiedName` (friend-candidate keys). The
330
+ * WeakMap key covers only the first, so the explicit clear is still REQUIRED
331
+ * for the other two: a later pass may hand back the same `parsedFiles`
332
+ * reference with different `scopes` / class→namespace state, and identity
333
+ * alone would serve the stale index. This is sound for the current pipeline
334
+ * because all three are built together once per `runScopeResolution` pass and
335
+ * `clearCppAdlState` runs in `loadResolutionConfig` at the start of every
336
+ * pass. Callers MUST call `clearCppAdlState` between any two passes that
337
+ * change `scopes` or `classToNamespaceQualifiedName` while reusing the same
338
+ * `parsedFiles` array reference — otherwise a stale index would be served.
339
+ * (No such caller exists today; widening the key to also cover `scopes` is
340
+ * deferred until one does.) */
341
+ function ensureAdlIndex(scopes, parsedFiles) {
342
+ let index = adlIndexByPass.get(parsedFiles);
343
+ if (index === undefined) {
344
+ index = buildAdlIndex(scopes, parsedFiles);
345
+ adlIndexByPass.set(parsedFiles, index);
346
+ }
347
+ return index;
348
+ }
349
+ /** Record per-call-site argument info. Called once per call site from
350
+ * `emitCppScopeCaptures`. */
351
+ function markCppAdlSiteArgs(filePath, line, col, args) {
352
+ const key = siteKey(filePath, line, col);
353
+ // Lockstep with `argInfoSiteKeysByFile`: index the key only on first insert
354
+ // (a re-mark overwrites the value but must NOT duplicate the index entry).
355
+ if (!argInfoBySite.has(key))
356
+ pushFileSiteKey(argInfoSiteKeysByFile, filePath, key);
357
+ argInfoBySite.set(key, args);
358
+ }
359
+ /** Mark a call site as ADL-suppressed (function child wrapped in
360
+ * `parenthesized_expression`, e.g. `(f)(s)`). */
361
+ function markCppAdlSiteNoAdl(filePath, line, col) {
362
+ const key = siteKey(filePath, line, col);
363
+ // Lockstep with `noAdlSiteKeysByFile`: index the key only on first insert.
364
+ if (!noAdlSites.has(key))
365
+ pushFileSiteKey(noAdlSiteKeysByFile, filePath, key);
366
+ noAdlSites.add(key);
367
+ }
368
+ const SITE_KEY_RE = /^(.*):(\d+):(\d+)$/;
369
+ /** Split a `filePath:line:col` site key, tolerating colons in the path. */
370
+ function parseSiteKey(key) {
371
+ const m = SITE_KEY_RE.exec(key);
372
+ if (m === null)
373
+ return undefined;
374
+ return { filePath: m[1], line: Number(m[2]), col: Number(m[3]) };
375
+ }
376
+ /**
377
+ * Snapshot this file's ADL capture state for the worker→main side-channel.
378
+ *
379
+ * Uses the per-file `argInfoSiteKeysByFile` / `noAdlSiteKeysByFile` indexes to
380
+ * touch only THIS file's entries — O(entries-for-this-file) — instead of the
381
+ * old O(all-entries) full scan over `argInfoBySite` / `noAdlSites` (#1983).
382
+ * The output order, and therefore the serialized JSON shape, is byte-identical
383
+ * to the old filtered scan: the index records keys in the same insertion order
384
+ * the maps' own iteration would have yielded for this file, and each key is
385
+ * indexed exactly once (mark guards on first insert), so the same per-file
386
+ * subsequence is produced.
387
+ *
388
+ * `parseSiteKey` is still used to recover `line:col` from each key, but now
389
+ * only for this file's keys (a bounded handful), never for the whole batch.
390
+ */
391
+ function collectCppAdlSideChannel(filePath) {
392
+ const args = [];
393
+ for (const key of argInfoSiteKeysByFile.get(filePath) ?? []) {
394
+ const value = argInfoBySite.get(key);
395
+ const parsed = parseSiteKey(key);
396
+ if (value !== undefined && parsed !== undefined) {
397
+ args.push([parsed.line, parsed.col, value]);
398
+ }
399
+ }
400
+ const noAdl = [];
401
+ for (const key of noAdlSiteKeysByFile.get(filePath) ?? []) {
402
+ const parsed = parseSiteKey(key);
403
+ if (parsed !== undefined) {
404
+ noAdl.push([parsed.line, parsed.col]);
405
+ }
406
+ }
407
+ return { argInfoBySite: args, noAdlSites: noAdl };
408
+ }
409
+ /** Restore this file's ADL capture state from the side-channel (no parse).
410
+ * Keeps the per-file site-key indexes in lockstep with `argInfoBySite` /
411
+ * `noAdlSites` (first-insert-only) so a later `collectCppAdlSideChannel` on
412
+ * the same process would still produce a correct, duplicate-free snapshot. */
413
+ function applyCppAdlSideChannel(filePath, data) {
414
+ for (const [line, col, value] of data.argInfoBySite) {
415
+ const key = siteKey(filePath, line, col);
416
+ if (!argInfoBySite.has(key))
417
+ pushFileSiteKey(argInfoSiteKeysByFile, filePath, key);
418
+ argInfoBySite.set(key, value);
419
+ }
420
+ for (const [line, col] of data.noAdlSites) {
421
+ const key = siteKey(filePath, line, col);
422
+ if (!noAdlSites.has(key))
423
+ pushFileSiteKey(noAdlSiteKeysByFile, filePath, key);
424
+ noAdlSites.add(key);
425
+ }
426
+ }
427
+ /** Clear ADL state. Called from `cppScopeResolver.loadResolutionConfig`
428
+ * (alongside `clearFileLocalNames`) so all C++ resolver per-pipeline state is
429
+ * reset together at the start of each resolution pass. */
430
+ function clearCppAdlState() {
431
+ argInfoBySite.clear();
432
+ noAdlSites.clear();
433
+ // Lockstep: the per-file site-key indexes mirror argInfoBySite/noAdlSites and
434
+ // MUST be cleared together — a stale index would resurrect a prior pass's
435
+ // (or prior file's, after a re-key) keys into the next snapshot.
436
+ argInfoSiteKeysByFile.clear();
437
+ noAdlSiteKeysByFile.clear();
438
+ classToNamespaceQualifiedName.clear();
439
+ // The candidate index is dropped by REASSIGNING a fresh `WeakMap`: `WeakMap`
440
+ // has no `.clear()`, and swapping the instance discards every memoized entry
441
+ // at once — the exact invalidation the previous `adlIndex = undefined` pair
442
+ // provided. Required even though the map is keyed on `parsedFiles` identity,
443
+ // because the index also depends on `scopes` and
444
+ // `classToNamespaceQualifiedName`, which the key cannot observe (see
445
+ // {@link ensureAdlIndex}).
446
+ adlIndexByPass = new WeakMap();
447
+ }
448
+ /**
449
+ * Walk `parsed.scopes` to record each Class def's enclosing namespace
450
+ * qualified name. Run from the cpp resolver's `populateOwners` hook so
451
+ * the index is available before any resolution pass consults it.
452
+ *
453
+ * Computes the namespace's qualified name by walking parent scope chain
454
+ * and looking up Namespace defs in each parent's `ownedDefs`. The
455
+ * resulting name is dot-joined (matching `populateClassOwnedMembers`'s
456
+ * dotted convention; conversion to `::` is consumer-internal).
457
+ */
458
+ function populateCppAssociatedNamespaces(parsed) {
459
+ const scopesById = new Map();
460
+ for (const scope of parsed.scopes)
461
+ scopesById.set(scope.id, scope);
462
+ for (const scope of parsed.scopes) {
463
+ if (scope.kind !== 'Class')
464
+ continue;
465
+ const nsQName = computeEnclosingNamespaceQName(scope, scopesById);
466
+ if (nsQName === '')
467
+ continue;
468
+ for (const def of scope.ownedDefs) {
469
+ if (def.type !== 'Class' && def.type !== 'Struct' && def.type !== 'Interface')
470
+ continue;
471
+ classToNamespaceQualifiedName.set(def.nodeId, nsQName);
472
+ }
473
+ }
474
+ // Enum defs live in Namespace scopes directly (not inside Class scopes).
475
+ // Map each Enum def to its enclosing namespace so ADL on enum-typed
476
+ // arguments contributes the correct associated namespace.
477
+ for (const scope of parsed.scopes) {
478
+ if (scope.kind !== 'Namespace')
479
+ continue;
480
+ const nsQName = computeNamespaceQName(scope, scopesById);
481
+ if (nsQName === '')
482
+ continue;
483
+ for (const def of scope.ownedDefs) {
484
+ if (def.type !== 'Enum')
485
+ continue;
486
+ classToNamespaceQualifiedName.set(def.nodeId, nsQName);
487
+ }
488
+ }
489
+ }
490
+ /**
491
+ * ADL candidate collector. Returns:
492
+ * - `readonly SymbolDefinition[]` — ADL candidates to merge with
493
+ * ordinary unqualified lookup candidates.
494
+ * - `undefined` — no ADL candidates.
495
+ *
496
+ * Fires only when:
497
+ * - the call site is not in `noAdlSites` (parenthesized form), AND
498
+ * - at least one argument resolves to a named class type (value,
499
+ * pointer, or reference; but not function pointer, literal, or primitive).
500
+ */
501
+ function pickCppAdlCandidates(site, callerParsed, scopes, parsedFiles) {
502
+ const key = siteKey(callerParsed.filePath, site.atRange.startLine, site.atRange.startCol);
503
+ if (noAdlSites.has(key))
504
+ return undefined;
505
+ const args = argInfoBySite.get(key);
506
+ if (args === undefined || args.length === 0)
507
+ return undefined;
508
+ // Build the workspace-wide ADL candidate index once; reuse for every site.
509
+ const idx = ensureAdlIndex(scopes, parsedFiles);
510
+ // Collect associated namespace QNames from every participating class-typed arg
511
+ // and from function-reference args.
512
+ const associatedNamespaces = new Set();
513
+ for (const arg of args) {
514
+ collectAssociatedNamespacesForAdlArg(arg, scopes, idx, associatedNamespaces);
515
+ if (arg.functionRefText !== undefined) {
516
+ collectFunctionTypeAssociatedNamespaces(arg.functionRefText, scopes, idx, associatedNamespaces);
517
+ }
518
+ }
519
+ if (associatedNamespaces.size === 0)
520
+ return undefined;
521
+ // Gather candidates from the prebuilt index instead of re-scanning every
522
+ // parsed file. For each associated namespace, pull:
523
+ // - namespace-owned callables (`nsCandidates`, includes inline-namespace
524
+ // transparency), AND
525
+ // - hidden-friend / class-member callables of associated classes
526
+ // (`friendCandidates`, ISO C++ `[basic.lookup.argdep]` §2).
527
+ // Dedup by nodeId and sort by visitation sequence so the candidate list is
528
+ // byte-for-byte identical to the legacy file-major scan order.
529
+ const bySeq = new Map();
530
+ const seenKey = new Set();
531
+ const collectFrom = (buckets) => {
532
+ for (const ns of associatedNamespaces) {
533
+ const matches = buckets.get(ns)?.get(site.name);
534
+ if (matches === undefined)
535
+ continue;
536
+ for (const def of matches) {
537
+ if (seenKey.has(def.nodeId))
538
+ continue;
539
+ seenKey.add(def.nodeId);
540
+ // `?? 0` is unreachable: every bucketed def is seq-assigned in the same
541
+ // block that buckets it in buildAdlIndex (PASS A / PASS B). The dev-gated
542
+ // validateAdlSeqCoverage guard in buildAdlIndex fails loudly if that ever
543
+ // breaks, rather than letting two seq-0 defs collide and drop a candidate.
544
+ bySeq.set(idx.seqByNodeId.get(def.nodeId) ?? 0, def);
545
+ }
546
+ }
547
+ };
548
+ collectFrom(idx.nsCandidates);
549
+ collectFrom(idx.friendCandidates);
550
+ if (bySeq.size === 0)
551
+ return undefined;
552
+ return [...bySeq.entries()].sort((a, b) => a[0] - b[0]).map(([, def]) => def);
553
+ }
554
+ function collectAssociatedNamespacesForAdlArg(arg, scopes, idx, associatedNamespaces) {
555
+ // For template args this may be the template name itself (e.g. `vector`);
556
+ // simple-name lookup can match project classes with the same name (known
557
+ // V1/V2 simplification).
558
+ addAssociatedNamespaceForClassName(arg.simpleClassName, scopes, idx, associatedNamespaces);
559
+ // Includes template-owner namespaces (e.g. `std` in std::vector<T>). If
560
+ // that surfaces extra candidates, merged-candidate overload narrowing in
561
+ // free-call-fallback suppresses arbitrary edge emission.
562
+ if (arg.templateNamespace.length > 0)
563
+ associatedNamespaces.add(arg.templateNamespace);
564
+ for (const ns of arg.templateArgNamespaces) {
565
+ if (ns.length > 0)
566
+ associatedNamespaces.add(ns);
567
+ }
568
+ for (const className of arg.templateArgClassNames) {
569
+ addAssociatedNamespaceForClassName(className, scopes, idx, associatedNamespaces);
570
+ }
571
+ }
572
+ function addAssociatedNamespaceForClassName(simpleClassName, scopes, idx, associatedNamespaces) {
573
+ if (simpleClassName.length === 0)
574
+ return;
575
+ const classLookup = findCppClassDefBySimpleName(idx, simpleClassName);
576
+ if (classLookup === undefined)
577
+ return;
578
+ const { classDef, ambiguous } = classLookup;
579
+ const nsQName = classToNamespaceQualifiedName.get(classDef.nodeId);
580
+ if (nsQName !== undefined)
581
+ associatedNamespaces.add(nsQName);
582
+ // Preserve V1 collision behavior for the direct class namespace, but avoid
583
+ // amplifying a same-simple-name collision by walking an arbitrary class's
584
+ // full MRO chain.
585
+ if (ambiguous)
586
+ return;
587
+ for (const ancestorDefId of scopes.methodDispatch.mroFor(classDef.nodeId)) {
588
+ const ancestorNsQName = classToNamespaceQualifiedName.get(ancestorDefId);
589
+ if (ancestorNsQName !== undefined)
590
+ associatedNamespaces.add(ancestorNsQName);
591
+ }
592
+ }
593
+ /** Walk upward from a Class scope, finding the innermost enclosing
594
+ * Namespace scope, and return that namespace's qualified name (dot-
595
+ * joined, outermost-first). Returns '' when the class has no enclosing
596
+ * namespace (e.g., declared at translation-unit scope). */
597
+ function computeEnclosingNamespaceQName(classScope, scopesById) {
598
+ let parentId = classScope.parent;
599
+ while (parentId !== null) {
600
+ const parent = scopesById.get(parentId);
601
+ if (parent === undefined)
602
+ return '';
603
+ if (parent.kind === 'Namespace') {
604
+ return computeNamespaceQName(parent, scopesById);
605
+ }
606
+ parentId = parent.parent;
607
+ }
608
+ return '';
609
+ }
610
+ /** Walk upward from a Namespace scope collecting each enclosing
611
+ * Namespace's simple name (innermost last). Returns the dot-joined
612
+ * qualified name (e.g., `outer.inner`). The namespace's own def lives
613
+ * in its OWN scope's `ownedDefs` (the C++ extractor stamps the
614
+ * namespace-decl def into the namespace scope itself, not the parent
615
+ * module scope). */
616
+ function computeNamespaceQName(nsScope, scopesById) {
617
+ const segments = [];
618
+ let currentId = nsScope.parent;
619
+ let current = nsScope;
620
+ // Outer guard against pathological cycles in malformed scope trees.
621
+ let safety = 64;
622
+ while (current !== undefined && safety-- > 0) {
623
+ const nsDef = findNamespaceDefInScope(current);
624
+ if (nsDef === undefined) {
625
+ // No name found — bail out. Returning a partial QName would risk
626
+ // false ADL associations.
627
+ return '';
628
+ }
629
+ const simple = nsDef.qualifiedName?.split('.').pop() ?? nsDef.qualifiedName ?? '';
630
+ segments.unshift(simple);
631
+ // Walk up to next enclosing namespace (skipping non-namespace parents).
632
+ let nextId = currentId;
633
+ let nextNs;
634
+ while (nextId !== null) {
635
+ const nx = scopesById.get(nextId);
636
+ if (nx === undefined)
637
+ break;
638
+ if (nx.kind === 'Namespace') {
639
+ nextNs = nx;
640
+ currentId = nx.parent;
641
+ break;
642
+ }
643
+ nextId = nx.parent;
644
+ }
645
+ current = nextNs;
646
+ }
647
+ return segments.join('.');
648
+ }
649
+ /** Find the Namespace def attached to this scope (the namespace's own
650
+ * decl, stamped into its own `ownedDefs` by the C++ extractor). Returns
651
+ * the first Namespace-type def encountered — for normal C++ the scope
652
+ * carries exactly one Namespace-typed self def. */
653
+ function findNamespaceDefInScope(scope) {
654
+ for (const def of scope.ownedDefs) {
655
+ if (def.type === 'Namespace')
656
+ return def;
657
+ }
658
+ return undefined;
659
+ }
660
+ /** Find a class-like or enum def by simple name across the workspace.
661
+ * V1 still arbitrary-picks the first match on collisions (multiple defs
662
+ * share the simple name), but reports the collision so callers can avoid
663
+ * amplifying that uncertainty (for example by skipping MRO expansion).
664
+ * C++ ADL strictness would require full type-driven lookup.
665
+ *
666
+ * ISO C++ `[basic.lookup.argdep]` §2: enumerations contribute their
667
+ * enclosing namespace to the associated set, just like class types. */
668
+ function findCppClassDefBySimpleName(idx, simpleName) {
669
+ // `classDefsBySimple` preserves `scopes.defs.byId` order, so `[0]` is the
670
+ // legacy first-match and `length > 1` is the legacy `ambiguous` flag.
671
+ const matches = idx.classDefsBySimple.get(simpleName);
672
+ if (matches === undefined)
673
+ return undefined;
674
+ const first = matches[0];
675
+ if (first === undefined)
676
+ return undefined;
677
+ return { classDef: first, ambiguous: matches.length > 1 };
678
+ }
679
+ /**
680
+ * Contribute associated namespaces for a function-reference argument by walking
681
+ * the referenced overload set's parameter and return types.
682
+ */
683
+ function collectFunctionTypeAssociatedNamespaces(refText, scopes, idx, out) {
684
+ const colonIdx = refText.lastIndexOf('::');
685
+ if (colonIdx !== -1) {
686
+ // Qualified ref: extract namespace prefix and normalise :: → dot notation.
687
+ const nsText = refText.slice(0, colonIdx).replace(/::/g, '.');
688
+ if (nsText === '')
689
+ return;
690
+ const simpleName = refText.slice(colonIdx + 2);
691
+ // Only Function/Method defs named `simpleName` in `nsText` contribute
692
+ // (the index already restricts to those types); this guards against an
693
+ // `a::b` arg that names a variable / enum value / type alias blindly
694
+ // contributing `a` to the associated set (false-positive CALLS edge).
695
+ const matches = idx.nsFunctionsByQName.get(nsText)?.get(simpleName);
696
+ if (matches !== undefined) {
697
+ for (const def of matches)
698
+ collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out);
699
+ }
700
+ return;
701
+ }
702
+ // Unqualified function references are approximated workspace-wide, matching
703
+ // the previous V1 lookup scope. The stricter part of this PR is what each
704
+ // overload contributes: only namespaces from parameter/return types, never
705
+ // the function's own enclosing namespace.
706
+ const matches = idx.nsFunctionsBySimple.get(refText);
707
+ if (matches !== undefined) {
708
+ for (const def of matches)
709
+ collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out);
710
+ }
711
+ }
712
+ function collectAssociatedNamespacesForFunctionDef(def, scopes, idx, out) {
713
+ const parameterTypes = def.parameterTypeClasses?.map((typeClass) => typeClass.base);
714
+ for (const paramType of parameterTypes ?? def.parameterTypes ?? []) {
715
+ collectAssociatedNamespacesForFunctionTypeText(paramType, scopes, idx, out);
716
+ }
717
+ if (def.returnType !== undefined) {
718
+ collectAssociatedNamespacesForFunctionTypeText(def.returnType, scopes, idx, out);
719
+ }
720
+ }
721
+ function collectAssociatedNamespacesForFunctionTypeText(typeText, scopes, idx, out) {
722
+ for (const token of extractCppTypeNameTokens(typeText)) {
723
+ if (isIgnoredCppAdlNamespace(token.namespaceName))
724
+ continue;
725
+ addAssociatedNamespaceForClassName(token.simpleName, scopes, idx, out);
726
+ if (token.namespaceName !== '')
727
+ out.add(token.namespaceName);
728
+ }
729
+ }
730
+ function extractCppTypeNameTokens(typeText) {
731
+ const cleaned = (0, arity_metadata_js_1.normalizeCppParamType)(typeText);
732
+ if (cleaned === '' || isPrimitiveCppAdlType(cleaned))
733
+ return [];
734
+ const out = [];
735
+ const seen = new Set();
736
+ const tokenSource = typeText.includes('<') ? `${cleaned} ${typeText}` : cleaned;
737
+ for (const rawToken of tokenSource.match(/[A-Za-z_]\w*(?:::[A-Za-z_]\w*)*/g) ?? []) {
738
+ if (isPrimitiveCppAdlType(rawToken))
739
+ continue;
740
+ const segments = rawToken.split('::').filter((part) => part.length > 0);
741
+ const simpleName = segments.at(-1) ?? '';
742
+ if (simpleName === '' || isPrimitiveCppAdlType(simpleName))
743
+ continue;
744
+ const namespaceName = segments.length > 1 ? segments.slice(0, -1).join('.') : '';
745
+ const key = `${namespaceName}\0${simpleName}`;
746
+ if (seen.has(key))
747
+ continue;
748
+ seen.add(key);
749
+ out.push({
750
+ simpleName,
751
+ namespaceName,
752
+ });
753
+ }
754
+ return out;
755
+ }
756
+ const CPP_ADL_PRIMITIVE_OR_KEYWORD_TYPES = new Set([
757
+ 'alignas',
758
+ 'alignof',
759
+ 'auto',
760
+ 'bool',
761
+ 'char',
762
+ 'char8_t',
763
+ 'char16_t',
764
+ 'char32_t',
765
+ 'class',
766
+ 'const',
767
+ 'consteval',
768
+ 'constexpr',
769
+ 'constinit',
770
+ 'decltype',
771
+ 'double',
772
+ 'enum',
773
+ 'explicit',
774
+ 'extern',
775
+ 'float',
776
+ 'inline',
777
+ 'int',
778
+ 'long',
779
+ 'mutable',
780
+ 'noexcept',
781
+ 'null',
782
+ 'register',
783
+ 'short',
784
+ 'signed',
785
+ 'static',
786
+ 'string',
787
+ 'struct',
788
+ 'template',
789
+ 'thread_local',
790
+ 'typename',
791
+ 'union',
792
+ 'unknown',
793
+ 'unsigned',
794
+ 'void',
795
+ 'volatile',
796
+ 'wchar_t',
797
+ '...',
798
+ ]);
799
+ function isPrimitiveCppAdlType(typeText) {
800
+ return CPP_ADL_PRIMITIVE_OR_KEYWORD_TYPES.has(typeText);
801
+ }
802
+ function isIgnoredCppAdlNamespace(namespaceName) {
803
+ return namespaceName === 'std' || namespaceName.startsWith('std.');
804
+ }