cgraphx 2.0.1 → 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 (701) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +7 -5
  2. package/dist/.claude-template/commands/end.md +1 -1
  3. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
  6. package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
  7. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
  8. package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
  9. package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
  10. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  11. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  12. package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
  13. package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
  14. package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
  15. package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
  16. package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
  17. package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
  18. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  19. package/dist/core/code/engine/cli/analyze.js +1086 -0
  20. package/dist/core/code/engine/cli/cli-message.js +83 -0
  21. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  22. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  23. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  24. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  25. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  26. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  27. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  28. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  29. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  30. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  31. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  32. package/dist/core/code/engine/cli/status.js +156 -0
  33. package/dist/core/code/engine/cli/tool.js +384 -0
  34. package/dist/core/code/engine/config/ignore-service.js +511 -0
  35. package/dist/core/code/engine/config/supported-languages.js +17 -0
  36. package/dist/core/code/engine/core/analysis-features.js +64 -0
  37. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  38. package/dist/core/code/engine/core/git-staleness.js +180 -0
  39. package/dist/core/code/engine/core/graph/graph.js +180 -0
  40. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  41. package/dist/core/code/engine/core/graph/types.js +2 -0
  42. package/dist/core/code/engine/core/index-freshness.js +12 -0
  43. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  44. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  45. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  46. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  47. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  48. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  49. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  50. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  51. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  52. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  56. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  57. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  58. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  98. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  99. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  100. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  101. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  102. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  103. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  104. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  105. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  106. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  110. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  111. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  112. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  113. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  114. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  115. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  116. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  117. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  118. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  119. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  120. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  121. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  122. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  123. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  124. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  125. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  126. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  127. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  128. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  129. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  136. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  137. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  138. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  139. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  140. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  141. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  142. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  143. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  144. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  145. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  146. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  147. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  148. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  158. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  159. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  160. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  174. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  175. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  176. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  177. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  178. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  179. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  180. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  181. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  182. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  183. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  184. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  185. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  199. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  200. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  217. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  218. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  219. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  220. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  221. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  222. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  223. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  224. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  234. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  235. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  236. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  237. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  238. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  239. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  240. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  241. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  242. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  257. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  258. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  259. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  274. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  281. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  282. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  283. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  298. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  299. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  300. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  301. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  302. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  303. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  304. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  305. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  306. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  307. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  308. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  315. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  316. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  317. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  332. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  333. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  334. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  335. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  336. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  337. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  338. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  339. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  340. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  347. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  348. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  349. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  350. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  351. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  352. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  353. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  354. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  355. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  363. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  364. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  365. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  366. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  367. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  368. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  369. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  370. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  371. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  375. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  376. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  377. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  378. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  379. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  380. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  381. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  382. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  383. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  396. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  397. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  398. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  399. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  400. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  414. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  415. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  416. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  417. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  418. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  419. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  420. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  421. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  431. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  432. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  433. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  434. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  435. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  436. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  437. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  438. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  439. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  440. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  442. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  443. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  444. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  445. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  449. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  450. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  451. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  452. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  453. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  454. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  455. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  456. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  457. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  458. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  459. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  460. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  461. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  468. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  469. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  470. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  485. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  486. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  487. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  488. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  489. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  490. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  491. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  492. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  493. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  494. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  495. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  501. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  502. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  530. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  531. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  532. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  533. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  534. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  535. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  536. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  537. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  538. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  539. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  540. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  541. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  542. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  547. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  548. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  549. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  550. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  551. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  552. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  553. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  554. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  555. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  556. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  557. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  558. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  559. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  560. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  561. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  562. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  564. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  565. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  566. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  567. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  568. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  569. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  570. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  571. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  572. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  573. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  574. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  575. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  576. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  577. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  582. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  583. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  584. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  585. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  586. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  587. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  588. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  589. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  590. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  591. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  592. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  593. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  594. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  595. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  596. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  597. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  598. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  599. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  600. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  601. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  602. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  603. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  604. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  605. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  606. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  607. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  608. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  609. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  610. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  611. package/dist/core/code/engine/core/logger.js +339 -0
  612. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  613. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  614. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  615. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  616. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  617. package/dist/core/code/engine/lib/utils.js +121 -0
  618. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  619. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  620. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  621. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  622. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  623. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  624. package/dist/core/code/engine/storage/branch-index.js +72 -0
  625. package/dist/core/code/engine/storage/file-hash.js +95 -0
  626. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  627. package/dist/core/code/engine/storage/git.js +555 -0
  628. package/dist/core/code/engine/storage/index-lock.js +664 -0
  629. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  630. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  631. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  632. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  633. package/dist/core/code/engine/types/pipeline.js +2 -0
  634. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  635. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  636. package/dist/core/code/shared/graph/types.js +8 -0
  637. package/dist/core/code/shared/index.js +105 -0
  638. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  639. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  640. package/dist/core/code/shared/integrations/retry.js +70 -0
  641. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  642. package/dist/core/code/shared/language-detection.js +162 -0
  643. package/dist/core/code/shared/languages.js +27 -0
  644. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  645. package/dist/core/code/shared/mro-strategy.js +2 -0
  646. package/dist/core/code/shared/pipeline.js +5 -0
  647. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  648. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  649. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  650. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  651. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  652. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  653. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  654. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  655. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  656. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  657. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  658. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  659. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  660. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  661. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  662. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  663. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  664. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  665. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  666. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  667. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  668. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  669. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  670. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  671. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  672. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  673. package/dist/core/code/shared/test-helpers.js +17 -0
  674. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  675. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  676. package/dist/core/features/scanner.d.ts +2 -0
  677. package/dist/core/features/scanner.d.ts.map +1 -1
  678. package/dist/core/features/scanner.js +27 -6
  679. package/dist/core/features/scanner.js.map +1 -1
  680. package/dist/core/timeline/cli.d.ts.map +1 -1
  681. package/dist/core/timeline/cli.js +13 -6
  682. package/dist/core/timeline/cli.js.map +1 -1
  683. package/dist/core/timeline/debris.d.ts +20 -0
  684. package/dist/core/timeline/debris.d.ts.map +1 -0
  685. package/dist/core/timeline/debris.js +124 -0
  686. package/dist/core/timeline/debris.js.map +1 -0
  687. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  688. package/dist/core/timeline/hook-runner.js +3 -1
  689. package/dist/core/timeline/hook-runner.js.map +1 -1
  690. package/dist/core/timeline/hooks.d.ts.map +1 -1
  691. package/dist/core/timeline/hooks.js +13 -5
  692. package/dist/core/timeline/hooks.js.map +1 -1
  693. package/dist/core/timeline/installer.d.ts +2 -0
  694. package/dist/core/timeline/installer.d.ts.map +1 -1
  695. package/dist/core/timeline/installer.js +12 -0
  696. package/dist/core/timeline/installer.js.map +1 -1
  697. package/dist/core/timeline/project-root.d.ts +21 -0
  698. package/dist/core/timeline/project-root.d.ts.map +1 -0
  699. package/dist/core/timeline/project-root.js +83 -0
  700. package/dist/core/timeline/project-root.js.map +1 -0
  701. package/package.json +1 -1
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.populateCppRangeBindings = populateCppRangeBindings;
4
+ const query_js_1 = require("./query.js");
5
+ const constants_js_1 = require("../../constants.js");
6
+ const safe_parse_js_1 = require("../../../tree-sitter/safe-parse.js");
7
+ const logger_js_1 = require("../../../logger.js");
8
+ /**
9
+ * Populate range-for loop variable type bindings for C++.
10
+ *
11
+ * Handles three patterns:
12
+ * 1. `for (auto& user : users)` — simple range-for
13
+ * 2. `for (auto& [key, user] : userMap)` — structured binding
14
+ * 3. `for (auto& user : *usersPtr)` — dereference range-for
15
+ *
16
+ * Strategy: look up the range source variable's type in scope
17
+ * typeBindings, extract the last template argument as the element
18
+ * type, and inject a typeBinding for the loop variable.
19
+ */
20
+ function populateCppRangeBindings(parsedFiles, _indexes, ctx) {
21
+ const parser = (0, query_js_1.getCppParser)();
22
+ for (const parsed of parsedFiles) {
23
+ const sourceText = ctx.fileContents.get(parsed.filePath);
24
+ if (sourceText === undefined)
25
+ continue;
26
+ const cachedTree = ctx.treeCache?.get(parsed.filePath);
27
+ let tree;
28
+ if (cachedTree !== undefined) {
29
+ tree = cachedTree;
30
+ }
31
+ else {
32
+ try {
33
+ tree = (0, safe_parse_js_1.parseSourceSafe)(parser, sourceText, undefined, {
34
+ bufferSize: (0, constants_js_1.getTreeSitterBufferSize)(sourceText),
35
+ });
36
+ }
37
+ catch (err) {
38
+ if (err instanceof safe_parse_js_1.ParseTimeoutError) {
39
+ logger_js_1.logger.warn({ file: parsed.filePath }, 'cpp range-binding: parse timed out, skipping file');
40
+ continue;
41
+ }
42
+ throw err;
43
+ }
44
+ }
45
+ const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
46
+ if (moduleScope === undefined)
47
+ continue;
48
+ const scopeMap = new Map(parsed.scopes.map((s) => [s.id, s]));
49
+ // Build a map from parameter name → AST parameter_declaration node
50
+ // so we can extract the un-normalized template type from the AST.
51
+ const paramTypeMap = buildParamTemplateMap(tree.rootNode);
52
+ for (const rangeNode of tree.rootNode.descendantsOfType('for_range_loop')) {
53
+ // Get the declarator (loop variable)
54
+ const declarator = rangeNode.childForFieldName('declarator');
55
+ if (declarator === null)
56
+ continue;
57
+ // Get the range source expression (right side of ':')
58
+ const right = rangeNode.childForFieldName('right');
59
+ if (right === null)
60
+ continue;
61
+ // Determine the loop variable name(s) and whether this is a structured binding
62
+ const varNames = extractLoopVarNames(declarator);
63
+ if (varNames.length === 0)
64
+ continue;
65
+ // Determine the range source variable name (handle dereference)
66
+ const sourceVarName = extractSourceVarName(right);
67
+ if (sourceVarName === null)
68
+ continue;
69
+ // Look up the source variable's full template type from the AST
70
+ // (scope typeBindings have been normalized and lost template params)
71
+ const fullType = paramTypeMap.get(sourceVarName);
72
+ if (fullType === undefined)
73
+ continue;
74
+ // Extract element type from the container type
75
+ const elementType = extractCppElementType(fullType);
76
+ if (elementType === null)
77
+ continue;
78
+ // Find the enclosing function scope
79
+ const functionScope = findEnclosingFunctionScope(rangeNode, scopeMap);
80
+ const targetScope = functionScope ?? moduleScope;
81
+ const mutable = targetScope.typeBindings;
82
+ // For structured binding [key, user], bind the last identifier to the element type
83
+ // For simple range-for, bind the single variable
84
+ const bindVar = varNames[varNames.length - 1];
85
+ mutable.set(bindVar, {
86
+ rawName: elementType,
87
+ declaredAtScope: targetScope.id,
88
+ source: 'annotation',
89
+ });
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * Build a map from parameter name → full (un-normalized) type text
95
+ * by walking the AST for all `parameter_declaration` nodes.
96
+ *
97
+ * This bypasses `normalizeCppTypeName` which strips template params,
98
+ * giving us the raw `std::vector<User>` text needed for element-type
99
+ * extraction.
100
+ */
101
+ function buildParamTemplateMap(rootNode) {
102
+ const map = new Map();
103
+ for (const paramNode of rootNode.descendantsOfType('parameter_declaration')) {
104
+ const typeNode = paramNode.childForFieldName('type');
105
+ if (typeNode === null)
106
+ continue;
107
+ // Extract the parameter name from the declarator subtree.
108
+ // The declarator may be: identifier, reference_declarator > identifier,
109
+ // or pointer_declarator > identifier.
110
+ const declNode = paramNode.childForFieldName('declarator');
111
+ if (declNode === null)
112
+ continue;
113
+ const idents = declNode.descendantsOfType('identifier');
114
+ if (idents.length === 0)
115
+ continue;
116
+ const paramName = idents[idents.length - 1].text;
117
+ // Use the full type node text (preserving template params)
118
+ map.set(paramName, typeNode.text);
119
+ }
120
+ return map;
121
+ }
122
+ /**
123
+ * Extract loop variable name(s) from the declarator node.
124
+ * Handles both simple `identifier` and `structured_binding_declarator`.
125
+ */
126
+ function extractLoopVarNames(declarator) {
127
+ // The declarator is typically reference_declarator or pointer_declarator wrapping
128
+ // either an identifier or a structured_binding_declarator.
129
+ const structBindings = declarator.descendantsOfType('structured_binding_declarator');
130
+ if (structBindings.length > 0) {
131
+ // structured_binding_declarator contains identifiers like [key, user]
132
+ const idents = structBindings[0].descendantsOfType('identifier');
133
+ return idents.map((id) => id.text).filter((t) => t !== '_');
134
+ }
135
+ // Simple case: reference_declarator > identifier or just identifier
136
+ const idents = declarator.descendantsOfType('identifier');
137
+ if (idents.length > 0) {
138
+ return [idents[idents.length - 1].text];
139
+ }
140
+ return [];
141
+ }
142
+ /**
143
+ * Extract the source variable name from the range expression.
144
+ * Handles plain identifiers and dereference expressions (*ptr).
145
+ */
146
+ function extractSourceVarName(right) {
147
+ if (right.type === 'identifier') {
148
+ return right.text;
149
+ }
150
+ if (right.type === 'pointer_expression') {
151
+ // *usersPtr → get the argument (usersPtr)
152
+ const arg = right.childForFieldName('argument');
153
+ if (arg !== null)
154
+ return arg.text;
155
+ }
156
+ return null;
157
+ }
158
+ /**
159
+ * Extract the element type from a C++ container type string.
160
+ *
161
+ * Examples:
162
+ * - `vector<User>` → `User`
163
+ * - `std::vector<User>` → `User`
164
+ * - `map<std::string, User>` → `User` (last template arg)
165
+ * - `map<string, User>` → `User`
166
+ *
167
+ * For structured bindings with maps, the last template arg is the value type.
168
+ * For vectors/sets, the first (and only) template arg is the element type.
169
+ */
170
+ function extractCppElementType(rawType) {
171
+ // Find the outermost template argument list
172
+ const ltIdx = rawType.indexOf('<');
173
+ if (ltIdx === -1)
174
+ return null;
175
+ // Extract the template argument string (handle nested templates)
176
+ let depth = 0;
177
+ let lastCommaOrStart = ltIdx + 1;
178
+ let lastArg = '';
179
+ for (let i = ltIdx; i < rawType.length; i++) {
180
+ const ch = rawType[i];
181
+ if (ch === '<') {
182
+ depth++;
183
+ }
184
+ else if (ch === '>') {
185
+ depth--;
186
+ if (depth === 0) {
187
+ lastArg = rawType.slice(lastCommaOrStart, i).trim();
188
+ break;
189
+ }
190
+ }
191
+ else if (ch === ',' && depth === 1) {
192
+ lastCommaOrStart = i + 1;
193
+ }
194
+ }
195
+ if (lastArg === '')
196
+ return null;
197
+ // Strip pointer/reference qualifiers and const
198
+ let elementType = lastArg
199
+ .replace(/^const\s+/, '')
200
+ .replace(/\s*[*&]+\s*$/, '')
201
+ .trim();
202
+ // Strip namespace prefix (std::string → string)
203
+ const lastColon = elementType.lastIndexOf('::');
204
+ if (lastColon !== -1) {
205
+ elementType = elementType.slice(lastColon + 2);
206
+ }
207
+ return elementType || null;
208
+ }
209
+ /**
210
+ * Find the enclosing Function scope for a tree-sitter node by
211
+ * walking up the AST and matching source positions.
212
+ */
213
+ function findEnclosingFunctionScope(node, scopeMap) {
214
+ const tsNode = node;
215
+ let current = tsNode;
216
+ while (current !== null) {
217
+ if (current.type === 'function_definition') {
218
+ for (const scope of scopeMap.values()) {
219
+ if (scope.kind === 'Function' &&
220
+ scope.range.startLine === current.startPosition.row &&
221
+ scope.range.startCol === current.startPosition.column) {
222
+ return scope;
223
+ }
224
+ }
225
+ break;
226
+ }
227
+ current = current.parent ?? null;
228
+ }
229
+ return null;
230
+ }
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cppScopeResolver = void 0;
4
+ const walkers_js_1 = require("../../scope-resolution/scope/walkers.js");
5
+ const index_js_1 = require("../../../../../shared/index.js");
6
+ const walkers_js_2 = require("../../scope-resolution/scope/walkers.js");
7
+ const shared_js_1 = require("../../type-extractors/shared.js");
8
+ const c_cpp_js_1 = require("../c-cpp.js");
9
+ const arity_js_1 = require("./arity.js");
10
+ const conversion_rank_js_1 = require("./conversion-rank.js");
11
+ const merge_bindings_js_1 = require("./merge-bindings.js");
12
+ const import_target_js_1 = require("./import-target.js");
13
+ const header_scan_js_1 = require("./header-scan.js");
14
+ const file_local_linkage_js_1 = require("./file-local-linkage.js");
15
+ const two_phase_lookup_js_1 = require("./two-phase-lookup.js");
16
+ const adl_js_1 = require("./adl.js");
17
+ const capture_side_channel_js_1 = require("./capture-side-channel.js");
18
+ const inline_namespaces_js_1 = require("./inline-namespaces.js");
19
+ const range_bindings_js_1 = require("./range-bindings.js");
20
+ const constraint_filter_js_1 = require("./constraint-filter.js");
21
+ const user_defined_conversions_js_1 = require("./user-defined-conversions.js");
22
+ const member_lookup_js_1 = require("./member-lookup.js");
23
+ const interpret_js_1 = require("./interpret.js");
24
+ /** A pointee worth binding: a bare identifier, not `T**`, `T[]`, `A::B` or a
25
+ * template spelling. Hoisted — a literal here would mint a fresh RegExp on
26
+ * every subscript the resolver folds. */
27
+ const CPP_SIMPLE_POINTEE_RE = /^[A-Za-z_]\w*$/;
28
+ /**
29
+ * Per-pass memo of the augmented `#include`-resolution file set
30
+ * (`allFilePaths` ∪ header paths), keyed on the two stable source sets.
31
+ * `resolveImportTarget` is called once per C++ `#include`; the old code rebuilt
32
+ * a fresh ~F-entry `Set` on every call AND defeated the shared
33
+ * `resolveCImportTarget` suffix-index memo (in `c/import-target.ts`) by handing
34
+ * it a new set identity each time. Both inputs are stable per pass, so the
35
+ * union is built once and reused. `WeakMap`-keyed → reclaimed with the pass.
36
+ * (Twin of the C resolver's `augmentedFilePaths`.)
37
+ */
38
+ const augmentedPathsByPass = new WeakMap();
39
+ function augmentedFilePaths(allFilePaths, headerPaths) {
40
+ let byHeaders = augmentedPathsByPass.get(allFilePaths);
41
+ if (byHeaders === undefined) {
42
+ byHeaders = new WeakMap();
43
+ augmentedPathsByPass.set(allFilePaths, byHeaders);
44
+ }
45
+ let augmented = byHeaders.get(headerPaths);
46
+ if (augmented === undefined) {
47
+ const set = new Set(allFilePaths);
48
+ for (const h of headerPaths)
49
+ set.add(h);
50
+ augmented = set;
51
+ byHeaders.set(headerPaths, augmented);
52
+ }
53
+ return augmented;
54
+ }
55
+ /**
56
+ * C++ `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
57
+ * the generic `runScopeResolution` orchestrator (RFC #909 Ring 3).
58
+ *
59
+ * C++ extends C's scope resolution with:
60
+ * - Namespaces (`namespace foo { ... }`)
61
+ * - Classes with methods and multiple inheritance
62
+ * - `using namespace` (wildcard import from namespace)
63
+ * - `using X::name` (named import from namespace)
64
+ * - Anonymous namespace (file-local linkage, like C `static`)
65
+ * - Default parameters (requiredParameterCount < parameterCount)
66
+ * - Overloading (arity-based disambiguation)
67
+ * - Templates (V1: generic-ignored, `List<User>` ≡ `List`)
68
+ * - Leftmost-base MRO for multiple inheritance
69
+ */
70
+ exports.cppScopeResolver = {
71
+ language: index_js_1.SupportedLanguages.CPlusPlus,
72
+ languageProvider: c_cpp_js_1.cppProvider,
73
+ importEdgeReason: 'cpp-scope: include',
74
+ loadResolutionConfig: (repoPath) => {
75
+ // Clear stale per-pipeline state from any previous invocation.
76
+ (0, file_local_linkage_js_1.clearFileLocalNames)();
77
+ (0, two_phase_lookup_js_1.clearCppDependentBases)();
78
+ (0, adl_js_1.clearCppAdlState)();
79
+ (0, inline_namespaces_js_1.clearCppInlineNamespaces)();
80
+ (0, user_defined_conversions_js_1.clearCppUserDefinedConversions)();
81
+ (0, member_lookup_js_1.clearCppMemberLookupState)();
82
+ return (0, header_scan_js_1.scanCppHeaderFiles)(repoPath);
83
+ },
84
+ resolveImportTarget: (targetRaw, fromFile, allFilePaths, resolutionConfig) => {
85
+ // Augment allFilePaths with header files discovered via loadResolutionConfig.
86
+ // C++ .h/.hpp/.hxx/.hh files may be classified differently by language
87
+ // detection but are importable from .cpp files via #include.
88
+ const headerPaths = resolutionConfig;
89
+ if (headerPaths !== undefined && headerPaths.size > 0) {
90
+ return (0, import_target_js_1.resolveCppImportTarget)(targetRaw, fromFile, augmentedFilePaths(allFilePaths, headerPaths));
91
+ }
92
+ return (0, import_target_js_1.resolveCppImportTarget)(targetRaw, fromFile, allFilePaths);
93
+ },
94
+ expandsWildcardTo: (targetModuleScope, parsedFiles) => (0, file_local_linkage_js_1.expandCppWildcardNames)(targetModuleScope, parsedFiles),
95
+ mergeBindings: (existing, incoming, scopeId) => (0, merge_bindings_js_1.cppMergeBindings)(existing, incoming, scopeId),
96
+ // Adapter: cppArityCompatibility predates ScopeResolver and uses
97
+ // (def, callsite). ScopeResolver contract is (callsite, def).
98
+ arityCompatibility: (callsite, def) => (0, arity_js_1.cppArityCompatibility)(def, callsite),
99
+ // SFINAE / `requires`-clause aware overload filter (issue #1579).
100
+ // Drops candidates whose template constraints (`enable_if_t<P, T>`,
101
+ // C++20 `requires P`) provably fail at the call site. Three-valued —
102
+ // `'unknown'` keeps the candidate, preserving "degrade not lie".
103
+ constraintCompatibility: constraint_filter_js_1.cppConstraintCompatibility,
104
+ buildMro: member_lookup_js_1.buildCppMemberLookupMro,
105
+ // Worker-boundary restore (see `ScopeResolver.applyCaptureSideChannel`).
106
+ // `emitCppScopeCaptures` records per-file ADL call-site arg shapes
107
+ // (`markCppAdlSiteArgs`/`markCppAdlSiteNoAdl`), inline-/anonymous-namespace
108
+ // ranges (`markCppInlineNamespaceRange`/`markCppAnonymousNamespaceRange`),
109
+ // dependent-base names (`markCppDependentBase`/`markCppDependentPackBase`),
110
+ // and file-local linkage (`markFileLocal`) into module-level maps as a SIDE
111
+ // EFFECT — none of it is serialized onto the returned ParsedFile's scopes/defs.
112
+ // On the worker path those marks are populated in the worker process and lost
113
+ // across the MessageChannel / disk store; the main thread reuses the
114
+ // serialized ParsedFile and skips `extractParsedFile`, so `populateOwners` +
115
+ // the ADL / two-phase-lookup passes would see empty maps and emit zero edges.
116
+ // The worker stashed a plain-data snapshot on `parsed.captureSideChannel` via
117
+ // `cppProvider.collectCaptureSideChannel`; this restores it into the module
118
+ // maps WITHOUT any tree-sitter re-parse (the #1983 fix — the old re-parse
119
+ // replay re-OOM'd huge `.h`/`.cpp` repos). The freshly-extracted leg never
120
+ // calls this — its marks were just populated in this process.
121
+ applyCaptureSideChannel: capture_side_channel_js_1.applyCppCaptureSideChannel,
122
+ populateOwners: (parsed) => {
123
+ (0, walkers_js_2.populateClassOwnedMembers)(parsed);
124
+ // #1982: tag namespace-nested defs with their enclosing-namespace prefix so
125
+ // resolveDefGraphId can map them to the namespace-qualified structure-phase
126
+ // node (`NS.A.Inner`) instead of collapsing same-tail nested bases via the
127
+ // simpleKey fallback. Does NOT change qualifiedName (resolution unaffected).
128
+ (0, walkers_js_2.tagNamespacePrefixes)(parsed);
129
+ // Resolve inline- and anonymous-namespace ranges (recorded at capture
130
+ // time) to ScopeIds BEFORE `populateCppNonGloballyVisible` runs, so
131
+ // both exemptions see the populated Sets.
132
+ (0, inline_namespaces_js_1.populateCppInlineNamespaceScopes)(parsed);
133
+ (0, file_local_linkage_js_1.populateCppAnonymousNamespaceScopes)(parsed);
134
+ // Track namespace-nested and class-nested defs so the global free-call
135
+ // fallback and wildcard expansion can suppress them as unqualified
136
+ // cross-file callables.
137
+ (0, file_local_linkage_js_1.populateCppNonGloballyVisible)(parsed);
138
+ // Build the class-def → enclosing-namespace-qualified-name map used
139
+ // by ADL (U2 of plan 2026-05-13-001) to identify each argument type's
140
+ // associated namespace for Koenig lookup.
141
+ (0, adl_js_1.populateCppAssociatedNamespaces)(parsed);
142
+ // Build conservative one-step user-defined conversion facts for
143
+ // overload ranking (#1631): implicit converting constructors only,
144
+ // with no chaining or conversion-operator handling.
145
+ (0, user_defined_conversions_js_1.populateCppUserDefinedConversions)(parsed);
146
+ },
147
+ // Resolve recorded template-class → dependent-base simple names to
148
+ // class nodeIds for two-phase template lookup (U3 of plan
149
+ // 2026-05-13-001). Runs AFTER all files have had `populateOwners`
150
+ // applied so that cross-file base classes (e.g. Base in base.h,
151
+ // Derived in derived.h) are reachable in the workspace index.
152
+ populateWorkspaceOwners: (parsedFiles) => {
153
+ (0, two_phase_lookup_js_1.populateCppDependentBases)(parsedFiles);
154
+ },
155
+ // Simple `isSuperReceiver` returns false for C++. Real super
156
+ // classification is caller-context-dependent and lives in
157
+ // `isSuperReceiverInContext` below — without scope context the
158
+ // previous regex `/^[A-Z]\w*::/` misclassified namespace-qualified
159
+ // calls (e.g., `Singleton::getInstance()`) as super calls and routed
160
+ // them through the wrong resolution branch.
161
+ isSuperReceiver: () => false,
162
+ isSuperReceiverInContext: (text, callerScope, scopes) => {
163
+ // The receiver text comes from the LHS of `::` in `qualified_identifier`
164
+ // (e.g., for `Base<T>::method()`, text is `Base<T>`). Strip template
165
+ // arguments (V1: name-only matching, generics ignored) and any leading
166
+ // namespace qualifier so the lookup matches the bare class def's
167
+ // simple name. `Base<T>::method()` → `Base`; `outer::v1::Base<T>` →
168
+ // `Base`. This handles the Phase 5 cross-unit composition where
169
+ // qualified base-method calls appear inside template bodies.
170
+ let lhs = text;
171
+ const sepIdx = lhs.indexOf('::');
172
+ if (sepIdx > 0)
173
+ lhs = lhs.slice(0, sepIdx).trim();
174
+ // Strip trailing template-argument list (greedy: drop everything from
175
+ // the first `<` onward — V1 ignores generics).
176
+ const lt = lhs.indexOf('<');
177
+ if (lt > 0)
178
+ lhs = lhs.slice(0, lt).trim();
179
+ // Strip nested namespace prefix from the receiver text itself (the
180
+ // `outer::v1::Base` shape that appears in derived-list `base_class_clause`).
181
+ const lastDoubleColon = lhs.lastIndexOf('::');
182
+ if (lastDoubleColon >= 0)
183
+ lhs = lhs.slice(lastDoubleColon + 2).trim();
184
+ if (lhs.length === 0)
185
+ return false;
186
+ // Resolve the LHS in the caller's scope chain. Only class-like
187
+ // resolutions can be super receivers; Namespace and unresolved
188
+ // names are not super calls.
189
+ const lhsDef = (0, walkers_js_1.findClassBindingInScope)(callerScope, lhs, scopes);
190
+ if (lhsDef === undefined)
191
+ return false;
192
+ // The caller must have an enclosing class — super calls only make
193
+ // sense inside a class body. Free functions can use `ClassName::`
194
+ // for namespace-qualified calls but those are not super.
195
+ const enclosing = (0, walkers_js_1.findEnclosingClassDef)(callerScope, scopes);
196
+ if (enclosing === undefined)
197
+ return false;
198
+ // `lhsDef` must be in the caller's MRO (i.e., the caller's enclosing
199
+ // class derives from it). The class itself counts as its own MRO
200
+ // root — `Self::method()` is a qualified self-call, not a super
201
+ // call, so exclude the caller's own class.
202
+ if (lhsDef.nodeId === enclosing.nodeId)
203
+ return false;
204
+ const mro = scopes.methodDispatch.mroFor(enclosing.nodeId);
205
+ return mro.includes(lhsDef.nodeId);
206
+ },
207
+ // Subscript route only — C++ collection views are method calls.
208
+ //
209
+ // Two container spellings reach a subscript. A POINTER is one of them: `p[i]`
210
+ // on a `User*` is pointer arithmetic yielding a `User`, so the trailing `*` is
211
+ // peeled here rather than by `stripTypePreservingDecoration` (C++ declares
212
+ // none) — and peeling it at a bare class lookup instead would be wrong, since
213
+ // that is the route by which `p->m()` must keep seeing `User`'s own members.
214
+ // The other is a template container (`std::vector<User>`), left to the shared
215
+ // extractor.
216
+ //
217
+ // Fed the annotation AS WRITTEN, since `normalizeCppTypeName` strips both the
218
+ // star and the array brackets at capture. `undefined` = "not a container", so
219
+ // an `operator[]`-bearing class does not fold `grid[0]` onto `Grid`.
220
+ elementTypeOf: (containerType, via) => {
221
+ if (via.kind !== 'index')
222
+ return undefined;
223
+ const t = (0, interpret_js_1.stripCppSpecifiers)(containerType);
224
+ if (t.endsWith('*')) {
225
+ const pointee = t.slice(0, -1).trim();
226
+ return CPP_SIMPLE_POINTEE_RE.test(pointee) ? pointee : undefined;
227
+ }
228
+ return (0, shared_js_1.extractElementTypeFromString)(t);
229
+ },
230
+ // C++ is statically typed — disable field fallback heuristic
231
+ fieldFallbackOnMethodLookup: false,
232
+ // C++ needs return type propagation across #include boundaries
233
+ propagatesReturnTypesAcrossImports: true,
234
+ // C++ #include brings in all symbols — enable global free call fallback
235
+ allowGlobalFreeCallFallback: true,
236
+ // C++ standard-conversion-sequence ranking for overload resolution (#1578).
237
+ // Disambiguates `f(int)` vs `f(double)` called with `f(2.5)` by scoring
238
+ // each candidate's conversion cost; exact match wins over standard conversion.
239
+ conversionRankFn: conversion_rank_js_1.cppConversionRank,
240
+ conversionOnlyArgTypePrefixes: conversion_rank_js_1.CPP_CONVERSION_ONLY_ARG_TYPE_PREFIXES,
241
+ // Range-for element type inference: for (auto& user : users) → bind user to User
242
+ populateRangeBindings: range_bindings_js_1.populateCppRangeBindings,
243
+ // C++ method return-type bindings need to be visible from module scope
244
+ // for cross-file propagation and compound-receiver chain resolution.
245
+ // cppBindingScopeFor hoists @type-binding.return to Module scope.
246
+ hoistTypeBindingsToModule: true,
247
+ // Enable receiver-bound explicit-`this` fallback only for C++.
248
+ resolveThisViaEnclosingClass: true,
249
+ resolveReceiverMember: member_lookup_js_1.resolveCppReceiverMember,
250
+ // The `isFileLocalDef` hook on the global free-call fallback names
251
+ // file-local linkage historically, but semantically gates "logically
252
+ // invisible cross-file" defs. C++ extends this to also reject class-
253
+ // owned methods/fields and namespace-nested symbols — an unqualified
254
+ // call from a free function MUST NOT resolve to `User::save` or
255
+ // `ns::foo` (Cppreference, "Unqualified name lookup"). Without this
256
+ // gate, the global fallback walks every callable in the workspace
257
+ // registry and matches any class method or namespace function by
258
+ // simple name.
259
+ isFileLocalDef: (def) => {
260
+ const simple = def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
261
+ if ((0, file_local_linkage_js_1.isFileLocal)(def.filePath, simple))
262
+ return true;
263
+ // Class-owned (Method/Field) — `populateClassOwnedMembers` already
264
+ // stamps `ownerId`; cheap fast-path before consulting the scope map.
265
+ if (def.ownerId !== undefined)
266
+ return true;
267
+ // Namespace-nested defs — require qualification cross-file. Scope-
268
+ // walked at `populateOwners` time into a per-file nodeId set.
269
+ if (!(0, file_local_linkage_js_1.isCppDefGloballyVisible)(def.filePath, def.nodeId))
270
+ return true;
271
+ return false;
272
+ },
273
+ // Keep declaration/definition identity narrower than the global free-call
274
+ // visibility gate above: namespace and class ownership do not imply
275
+ // internal linkage, while a namespace-scope `static` function does.
276
+ hasFileLocalCallableLinkage: (def) => {
277
+ // Class members have EXTERNAL linkage even when declared `static` —
278
+ // inside a class, `static` means "no instance", not internal linkage.
279
+ // The name-keyed set below is populated from every `static` declaration,
280
+ // so without this gate a header-declared static member refused its
281
+ // cross-file definition join (#2522 review, M2).
282
+ if (def.type === 'Method' || def.type === 'Constructor')
283
+ return false;
284
+ const simple = def.qualifiedName?.split('.').pop() ?? def.qualifiedName ?? '';
285
+ return (0, file_local_linkage_js_1.isFileLocal)(def.filePath, simple);
286
+ },
287
+ // C++ two-phase template lookup: inside a class template body,
288
+ // unqualified calls MUST NOT bind to members of a dependent base
289
+ // class. The standard requires `this->name()` or `Base<T>::name()`
290
+ // forms to make the lookup dependent. Without this gate the global
291
+ // free-call fallback walks the workspace registry and silently binds
292
+ // unqualified calls to dependent-base members, producing CALLS edges
293
+ // the compiler would reject. See plan 2026-05-13-001 U3.
294
+ isCallableVisibleFromCaller: ({ candidate, callerScope, scopes }) => {
295
+ if (callerScope === undefined || scopes === undefined)
296
+ return true;
297
+ // Reject when the candidate is a member of a dependent base of the
298
+ // caller's enclosing template class. Otherwise allow.
299
+ return !(0, two_phase_lookup_js_1.isCppDependentBaseMember)(callerScope, candidate, scopes);
300
+ },
301
+ // C++ argument-dependent / Koenig lookup (U2 of plan 2026-05-13-001).
302
+ // Contributes candidates from associated namespaces of class-typed
303
+ // arguments; caller merges with ordinary unqualified lookup candidates.
304
+ // Current boundary: class-typed value/pointer/reference args and template
305
+ // specializations with explicit type arguments contribute associated
306
+ // namespaces. Function-pointer args and full conversion-ranking remain
307
+ // excluded.
308
+ resolveAdlCandidates: (site, callerParsed, scopes, parsedFiles) => {
309
+ // `using ns::name;` introduces `name` into ordinary unqualified lookup.
310
+ // For template-class method bodies, lexical scope walks can miss this
311
+ // named-using visibility; recover by resolving the imported namespace
312
+ // member directly when the local call name matches a named using import.
313
+ const usingNamedHits = [];
314
+ const seenUsing = new Set();
315
+ for (const imp of callerParsed.parsedImports) {
316
+ if (imp.kind !== 'named')
317
+ continue;
318
+ if (imp.localName !== site.name)
319
+ continue;
320
+ const member = (0, inline_namespaces_js_1.resolveCppQualifiedNamespaceMember)(imp.targetRaw, imp.importedName, parsedFiles, scopes);
321
+ if (member === undefined || member === 'ambiguous')
322
+ continue;
323
+ if (seenUsing.has(member.nodeId))
324
+ continue;
325
+ seenUsing.add(member.nodeId);
326
+ usingNamedHits.push(member);
327
+ }
328
+ const adlHits = (0, adl_js_1.pickCppAdlCandidates)(site, callerParsed, scopes, parsedFiles);
329
+ if (usingNamedHits.length === 0)
330
+ return adlHits;
331
+ if (adlHits === undefined || adlHits.length === 0)
332
+ return usingNamedHits;
333
+ const merged = [];
334
+ const seen = new Set();
335
+ for (const hit of usingNamedHits) {
336
+ seen.add(hit.nodeId);
337
+ merged.push(hit);
338
+ }
339
+ for (const hit of adlHits) {
340
+ if (seen.has(hit.nodeId))
341
+ continue;
342
+ seen.add(hit.nodeId);
343
+ merged.push(hit);
344
+ }
345
+ return merged;
346
+ },
347
+ // C++ qualified namespace-member resolution (U5 of plan 2026-05-13-001).
348
+ // Handles `outer::foo()` where `outer` is a namespace (not a class).
349
+ // Walks each parsed file's namespace scopes by simple name, then
350
+ // descends transitively through inline-namespace children when
351
+ // searching for the called member. Returns undefined for non-namespace
352
+ // receivers so receiver-bound-calls Case 2 still gets a chance.
353
+ resolveQualifiedReceiverMember: (receiverName, memberName, _callerScope, scopes, parsedFiles, callsite) => (0, inline_namespaces_js_1.resolveCppQualifiedNamespaceMember)(receiverName, memberName, parsedFiles, scopes, callsite),
354
+ };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cppBindingScopeFor = cppBindingScopeFor;
4
+ exports.cppImportOwningScope = cppImportOwningScope;
5
+ exports.cppReceiverBinding = cppReceiverBinding;
6
+ /**
7
+ * C++ binding scope: default auto-hoist (null) for most declarations.
8
+ *
9
+ * For `for` statement init-scope variables (e.g. `for (int i = 0; ...)`),
10
+ * the variable is scoped to the for-block, not the enclosing function.
11
+ * The tree-sitter scope query already captures for_statement as @scope.block,
12
+ * so tree-sitter's scope nesting handles this automatically — we return null
13
+ * to let the default auto-hoist apply.
14
+ */
15
+ function cppBindingScopeFor(decl, innermost, tree) {
16
+ // Hoist return-type bindings to Module scope so:
17
+ // 1. propagateImportedReturnTypes can mirror them across files
18
+ // 2. compound-receiver can find method return types via hoistTypeBindingsToModule
19
+ if (decl['@type-binding.return'] !== undefined) {
20
+ let cur = innermost;
21
+ while (cur !== undefined && cur.kind !== 'Module') {
22
+ const parentId = cur.parent ?? null;
23
+ if (parentId === null)
24
+ break;
25
+ cur = tree.getScope(parentId);
26
+ }
27
+ if (cur !== undefined && cur.kind === 'Module')
28
+ return cur.id;
29
+ }
30
+ return null; // default auto-hoist for other bindings
31
+ }
32
+ /**
33
+ * C++ import owning scope: default (null).
34
+ * #include and using declarations are file-scoped in C++.
35
+ */
36
+ function cppImportOwningScope(_imp, _innermost, _tree) {
37
+ return null;
38
+ }
39
+ /**
40
+ * C++ receiver binding: return `this` TypeRef for methods inside a class.
41
+ *
42
+ * When a function scope is inside a class scope, the implicit `this` pointer
43
+ * refers to the enclosing class. This enables `this->method()` and implicit
44
+ * `this` member access resolution.
45
+ */
46
+ function cppReceiverBinding(functionScope) {
47
+ // Walk up the scope tree to find an enclosing class scope
48
+ if (functionScope.parent === null)
49
+ return null;
50
+ // The scope tree structure nests function scopes inside class scopes.
51
+ // The orchestrator provides the function scope; we need to check if
52
+ // its parent chain contains a class scope.
53
+ //
54
+ // However, the ScopeResolver.receiverBinding contract receives only
55
+ // the function Scope (not the full ScopeTree), and the Scope type
56
+ // includes `parent` (a ScopeId) but not a reference to the parent
57
+ // Scope object.
58
+ //
59
+ // The orchestrator already handles this by looking up the class owner
60
+ // via populateOwners. We return null here and let the shared infra
61
+ // handle receiver resolution through the class-ownership mechanism.
62
+ //
63
+ // This is consistent with how C# and Go handle it — the receiver
64
+ // binding is established through populateOwners + the MRO chain,
65
+ // not through this hook.
66
+ return null;
67
+ }