cgraphx 2.0.2 → 2.0.6

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 (754) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +13 -3
  2. package/dist/.claude-template/agents/task-history.md +186 -0
  3. package/dist/.claude-template/commands/end.md +1 -0
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
  6. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
  7. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
  8. package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
  9. package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
  10. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
  11. package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
  12. package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
  13. package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
  14. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  15. package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
  16. package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
  17. package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
  18. package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
  19. package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
  20. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  21. package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
  22. package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
  23. package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
  24. package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
  25. package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
  26. package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
  27. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  28. package/dist/core/code/engine/cli/analyze.js +1086 -0
  29. package/dist/core/code/engine/cli/cli-message.js +83 -0
  30. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  31. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  32. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  33. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  34. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  35. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  36. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  37. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  38. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  39. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  40. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  41. package/dist/core/code/engine/cli/status.js +156 -0
  42. package/dist/core/code/engine/cli/tool.js +384 -0
  43. package/dist/core/code/engine/config/ignore-service.js +511 -0
  44. package/dist/core/code/engine/config/supported-languages.js +17 -0
  45. package/dist/core/code/engine/core/analysis-features.js +64 -0
  46. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  47. package/dist/core/code/engine/core/git-staleness.js +180 -0
  48. package/dist/core/code/engine/core/graph/graph.js +180 -0
  49. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  50. package/dist/core/code/engine/core/graph/types.js +2 -0
  51. package/dist/core/code/engine/core/index-freshness.js +12 -0
  52. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  56. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  57. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  58. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  59. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  60. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  61. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  62. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  63. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  64. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  65. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  66. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  67. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  98. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  99. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  100. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  101. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  102. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  103. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  104. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  105. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  106. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  110. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  111. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  113. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  114. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  115. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  116. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  117. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  118. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  119. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  120. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  121. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  122. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  123. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  124. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  125. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  126. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  127. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  128. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  129. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  136. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  137. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  138. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  139. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  140. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  141. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  142. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  143. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  144. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  145. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  146. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  147. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  148. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  152. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  153. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  154. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  155. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  156. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  158. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  159. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  160. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  174. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  175. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  176. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  177. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  178. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  179. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  180. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  181. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  182. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  183. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  184. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  185. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  192. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  193. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  194. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  195. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  196. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  197. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  198. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  199. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  200. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  216. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  217. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  218. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  219. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  220. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  221. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  222. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  223. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  224. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  234. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  235. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  236. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  237. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  238. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  239. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  240. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  241. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  242. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  251. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  252. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  253. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  254. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  255. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  256. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  257. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  258. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  259. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  274. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  275. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  276. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  277. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  278. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  279. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  280. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  281. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  282. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  283. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  298. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  299. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  300. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  301. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  302. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  303. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  304. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  305. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  306. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  307. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  308. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  309. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  310. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  311. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  312. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  313. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  314. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  315. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  316. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  317. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  332. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  333. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  334. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  335. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  336. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  337. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  338. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  339. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  340. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  347. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  348. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  349. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  350. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  351. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  352. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  353. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  354. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  355. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  363. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  364. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  365. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  366. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  367. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  368. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  369. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  370. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  371. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  375. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  376. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  377. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  378. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  379. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  380. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  381. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  382. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  383. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  392. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  393. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  394. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  395. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  396. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  397. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  398. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  399. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  400. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  413. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  414. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  415. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  416. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  417. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  418. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  419. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  420. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  421. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  431. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  432. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  433. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  434. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  435. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  436. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  437. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  438. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  439. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  440. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  441. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  442. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  443. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  444. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  445. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  449. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  450. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  451. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  452. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  453. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  454. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  455. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  456. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  457. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  458. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  459. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  460. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  461. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  462. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  463. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  464. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  465. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  466. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  467. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  468. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  469. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  470. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  485. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  486. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  487. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  488. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  489. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  490. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  491. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  492. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  493. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  494. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  495. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  501. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  502. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  503. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  504. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  505. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  506. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  507. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  508. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  509. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  510. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  511. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  530. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  531. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  532. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  533. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  534. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  535. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  536. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  537. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  538. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  539. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  540. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  541. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  542. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  547. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  548. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  549. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  550. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  551. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  552. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  553. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  554. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  555. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  556. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  557. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  558. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  559. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  560. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  561. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  562. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  564. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  565. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  566. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  567. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  568. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  569. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  570. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  571. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  572. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  573. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  574. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  575. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  576. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  577. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  582. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  583. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  584. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  585. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  586. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  587. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  588. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  589. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  590. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  591. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  592. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  593. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  594. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  595. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  596. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  597. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  598. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  599. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  600. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  601. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  602. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  603. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  604. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  605. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  606. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  607. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  608. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  609. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  610. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  611. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  612. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  613. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  614. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  615. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  616. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  617. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  618. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  619. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  620. package/dist/core/code/engine/core/logger.js +339 -0
  621. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  622. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  623. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  624. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  625. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  626. package/dist/core/code/engine/lib/utils.js +121 -0
  627. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  628. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  629. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  630. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  631. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  632. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  633. package/dist/core/code/engine/storage/branch-index.js +72 -0
  634. package/dist/core/code/engine/storage/file-hash.js +95 -0
  635. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  636. package/dist/core/code/engine/storage/git.js +555 -0
  637. package/dist/core/code/engine/storage/index-lock.js +664 -0
  638. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  639. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  640. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  641. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  642. package/dist/core/code/engine/types/pipeline.js +2 -0
  643. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  644. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  645. package/dist/core/code/shared/graph/types.js +8 -0
  646. package/dist/core/code/shared/index.js +105 -0
  647. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  648. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  649. package/dist/core/code/shared/integrations/retry.js +70 -0
  650. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  651. package/dist/core/code/shared/language-detection.js +162 -0
  652. package/dist/core/code/shared/languages.js +27 -0
  653. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  654. package/dist/core/code/shared/mro-strategy.js +2 -0
  655. package/dist/core/code/shared/pipeline.js +5 -0
  656. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  657. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  658. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  659. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  660. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  661. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  662. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  663. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  664. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  665. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  666. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  667. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  668. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  669. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  670. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  671. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  672. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  673. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  674. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  675. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  676. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  677. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  678. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  679. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  680. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  681. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  682. package/dist/core/code/shared/test-helpers.js +17 -0
  683. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  684. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  685. package/dist/core/dbquery/cli.d.ts.map +1 -1
  686. package/dist/core/dbquery/cli.js +5 -4
  687. package/dist/core/dbquery/cli.js.map +1 -1
  688. package/dist/core/dbquery/config.d.ts.map +1 -1
  689. package/dist/core/dbquery/config.js +39 -3
  690. package/dist/core/dbquery/config.js.map +1 -1
  691. package/dist/core/dbquery/drivers/http.d.ts +23 -0
  692. package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
  693. package/dist/core/dbquery/drivers/http.js +125 -0
  694. package/dist/core/dbquery/drivers/http.js.map +1 -0
  695. package/dist/core/dbquery/drivers/mysql.js +1 -1
  696. package/dist/core/dbquery/drivers/mysql.js.map +1 -1
  697. package/dist/core/dbquery/drivers/postgres.js +1 -1
  698. package/dist/core/dbquery/drivers/postgres.js.map +1 -1
  699. package/dist/core/dbquery/executor.d.ts.map +1 -1
  700. package/dist/core/dbquery/executor.js +46 -12
  701. package/dist/core/dbquery/executor.js.map +1 -1
  702. package/dist/core/dbquery/format.d.ts.map +1 -1
  703. package/dist/core/dbquery/format.js +2 -1
  704. package/dist/core/dbquery/format.js.map +1 -1
  705. package/dist/core/dbquery/init.d.ts.map +1 -1
  706. package/dist/core/dbquery/init.js +7 -0
  707. package/dist/core/dbquery/init.js.map +1 -1
  708. package/dist/core/dbquery/types.d.ts +55 -7
  709. package/dist/core/dbquery/types.d.ts.map +1 -1
  710. package/dist/core/directory.d.ts +17 -0
  711. package/dist/core/directory.d.ts.map +1 -1
  712. package/dist/core/directory.js +37 -0
  713. package/dist/core/directory.js.map +1 -1
  714. package/dist/core/features/cli.d.ts.map +1 -1
  715. package/dist/core/features/cli.js +3 -2
  716. package/dist/core/features/cli.js.map +1 -1
  717. package/dist/core/features/scanner.d.ts +1 -1
  718. package/dist/core/features/scanner.d.ts.map +1 -1
  719. package/dist/core/features/scanner.js +20 -4
  720. package/dist/core/features/scanner.js.map +1 -1
  721. package/dist/core/markdown/cli.d.ts.map +1 -1
  722. package/dist/core/markdown/cli.js +9 -8
  723. package/dist/core/markdown/cli.js.map +1 -1
  724. package/dist/core/timeline/cli.d.ts.map +1 -1
  725. package/dist/core/timeline/cli.js +13 -6
  726. package/dist/core/timeline/cli.js.map +1 -1
  727. package/dist/core/timeline/debris.d.ts +20 -0
  728. package/dist/core/timeline/debris.d.ts.map +1 -0
  729. package/dist/core/timeline/debris.js +124 -0
  730. package/dist/core/timeline/debris.js.map +1 -0
  731. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  732. package/dist/core/timeline/hook-runner.js +3 -1
  733. package/dist/core/timeline/hook-runner.js.map +1 -1
  734. package/dist/core/timeline/hooks.d.ts.map +1 -1
  735. package/dist/core/timeline/hooks.js +13 -5
  736. package/dist/core/timeline/hooks.js.map +1 -1
  737. package/dist/core/timeline/installer.d.ts +2 -0
  738. package/dist/core/timeline/installer.d.ts.map +1 -1
  739. package/dist/core/timeline/installer.js +12 -0
  740. package/dist/core/timeline/installer.js.map +1 -1
  741. package/dist/core/timeline/project-root.d.ts +21 -0
  742. package/dist/core/timeline/project-root.d.ts.map +1 -0
  743. package/dist/core/timeline/project-root.js +83 -0
  744. package/dist/core/timeline/project-root.js.map +1 -0
  745. package/dist/web/register.d.ts.map +1 -1
  746. package/dist/web/register.js +2 -1
  747. package/dist/web/register.js.map +1 -1
  748. package/package.json +1 -1
  749. package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
  750. package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
  751. package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
  752. package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
  753. package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
  754. /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
@@ -0,0 +1,594 @@
1
+ "use strict";
2
+ /**
3
+ * `emitScopeCaptures` for Swift.
4
+ *
5
+ * Drives the Swift scope query against tree-sitter-swift and groups raw
6
+ * matches into `CaptureMatch[]` for the central extractor. Synthesizes
7
+ * several streams on top of the raw query captures:
8
+ *
9
+ * 1. **Decomposed imports** — each `import_declaration` is re-emitted
10
+ * with `@import.kind/source/name` markers (and `@import.testable`
11
+ * when present) so `interpretSwiftImport` recovers the ParsedImport
12
+ * shape without re-parsing raw text (`import-decomposer.ts`).
13
+ * 2. **Optional bindings** — `if let u = getUser()` / `guard let …`
14
+ * synthesize a `@type-binding.constructor` (name → callee) by
15
+ * walking the anchored statement (`@optional.binding`).
16
+ * 3. **Receiver bindings** — `self` (+ `super`) `@type-binding.self`
17
+ * anchors on every instance method/init (`receiver-binding.ts`).
18
+ * 4. **Signature bindings** — parameter-type and return-type
19
+ * `@type-binding.*` synthesized from the function node, because
20
+ * Swift's grammar reuses the `name:` field for func-name / param /
21
+ * return so a query can't disambiguate (`signature-bindings.ts`).
22
+ * 5. **Arity metadata** — `@declaration.parameter-count` etc. on
23
+ * function-like declarations and `@reference.arity` on call sites,
24
+ * so the registry can narrow by arity (`arity-metadata.ts`).
25
+ *
26
+ * Extension handling: a `class_declaration` whose `name:` is a
27
+ * `(user_type …)` is an `extension Foo { … }`. The query tags it
28
+ * `@declaration.extension`; we re-key it to `@declaration.class` with a
29
+ * synthesized `@declaration.name` of the extended type so its members
30
+ * hoist onto `Foo`'s scope (`populateClassOwnedMembers` completes the
31
+ * ownership stamp) — the same mechanism C# uses for `partial class`.
32
+ *
33
+ * Pure given the input source text. No I/O, no globals consulted.
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.emitSwiftScopeCaptures = emitSwiftScopeCaptures;
37
+ const ast_helpers_js_1 = require("../../utils/ast-helpers.js");
38
+ const import_decomposer_js_1 = require("./import-decomposer.js");
39
+ const base_type_js_1 = require("./base-type.js");
40
+ const arity_metadata_js_1 = require("./arity-metadata.js");
41
+ const receiver_binding_js_1 = require("./receiver-binding.js");
42
+ const signature_bindings_js_1 = require("./signature-bindings.js");
43
+ const query_js_1 = require("./query.js");
44
+ const conditional_directive_preprocess_js_1 = require("./conditional-directive-preprocess.js");
45
+ const cache_stats_js_1 = require("./cache-stats.js");
46
+ const constants_js_1 = require("../../constants.js");
47
+ const safe_parse_js_1 = require("../../../tree-sitter/safe-parse.js");
48
+ const callable_flow_captures_js_1 = require("../../utils/callable-flow-captures.js");
49
+ const receiver_chain_captures_js_1 = require("../../utils/receiver-chain-captures.js");
50
+ /**
51
+ * Name of the type that lexically owns `node` — the nearest enclosing
52
+ * `class_declaration` (which in tree-sitter-swift is also how `struct` and
53
+ * `extension` parse) or `protocol_declaration`.
54
+ *
55
+ * Qualifies a method def as `<Type>.<method>` (#2807 follow-up). Swift's
56
+ * structure phase already keys the graph node that way (`A.run#1`), but the
57
+ * resolver-side def carried only `run`, and the bridge's every label-scoped key
58
+ * is built from the def's name — so two classes in one file each declaring
59
+ * `func run` fell through to the label-agnostic simple key, which is
60
+ * first-write-wins. The result: EVERY call in both bodies was attributed to
61
+ * whichever `run` registered first, which collected duplicate edges while its
62
+ * twin collected none. Renaming one method, or moving it to another file, made
63
+ * both resolve — which is what identified the collision as name-keyed and
64
+ * per-file rather than positional.
65
+ *
66
+ * An `extension Foo` wraps the extended type in a `user_type`, which may be
67
+ * qualified (`extension Outer.Inner`) or carry generic arguments
68
+ * (`extension Set<Int>`), so the trailing `type_identifier` is taken — the
69
+ * spelling has to match the owner the structure phase used to build the node id.
70
+ *
71
+ * Both halves delegate rather than re-derive: `findEnclosingTypeDeclaration`
72
+ * (receiver-binding.ts) decides what the enclosing type IS, so a method's owner
73
+ * qualifier and its `self` binding cannot disagree, and `swiftBaseTypeIdentifier`
74
+ * reads the name STRUCTURALLY. An earlier version split the node text on `<` and
75
+ * `.`, which only approximates the tree: generic arguments live in a sibling
76
+ * `type_arguments` node that the walk skips outright.
77
+ */
78
+ function swiftEnclosingTypeName(node) {
79
+ const typeNode = (0, receiver_binding_js_1.findEnclosingTypeDeclaration)(node);
80
+ if (typeNode === null)
81
+ return null;
82
+ const nameNode = typeNode.childForFieldName('name');
83
+ if (nameNode === null)
84
+ return null;
85
+ const tail = swiftBaseTypeIdentifier(nameNode)?.text.trim() ?? '';
86
+ return tail.length > 0 ? tail : null;
87
+ }
88
+ /** Declaration anchors that carry function-like arity metadata. */
89
+ const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.constructor'];
90
+ const SWIFT_CALLABLE_CAPTURE_OPTIONS = {
91
+ functionNodeTypes: new Set(['function_declaration', 'lambda_literal']),
92
+ callNodeTypes: new Set(['call_expression']),
93
+ parameterListNodeTypes: new Set(['value_arguments']),
94
+ parameterNodeTypes: new Set(['parameter']),
95
+ bindingNodeTypes: new Set(['property_declaration']),
96
+ assignmentNodeTypes: new Set(['assignment']),
97
+ identifierNodeTypes: new Set(['simple_identifier', 'type_identifier']),
98
+ extractFunctionParameters: (node) => node.namedChildren.filter((child) => child !== null && child.type === 'parameter'),
99
+ };
100
+ /** tree-sitter-swift node types that carry arity. */
101
+ const FUNCTION_NODE_TYPES = [
102
+ 'function_declaration',
103
+ 'protocol_function_declaration',
104
+ 'init_declaration',
105
+ ];
106
+ /** Function-like nodes eligible for receiver-binding synthesis. */
107
+ const RECEIVER_NODE_TYPES = [
108
+ 'function_declaration',
109
+ 'init_declaration',
110
+ 'deinit_declaration',
111
+ ];
112
+ function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
113
+ // Reuse the parse phase's cached Tree when available; otherwise parse.
114
+ // `extractParsedFile` already applies `preprocessSource` on this path, but
115
+ // this emitter is also called directly (benchmarks, capture goldens, the
116
+ // scope-capture tripwire), and those callers must see the same program the
117
+ // pipeline does. The transform is idempotent, so applying it twice is a
118
+ // no-op; it is length-preserving, so offsets still index `sourceText`.
119
+ let tree = cachedTree;
120
+ if (tree === undefined) {
121
+ const parseText = (0, conditional_directive_preprocess_js_1.preprocessSwiftConditionalDirectives)(sourceText);
122
+ tree = (0, safe_parse_js_1.parseSourceSafe)((0, query_js_1.getSwiftParser)(), parseText, undefined, {
123
+ bufferSize: (0, constants_js_1.getTreeSitterBufferSize)(parseText),
124
+ });
125
+ (0, cache_stats_js_1.recordCacheMiss)();
126
+ }
127
+ else {
128
+ (0, cache_stats_js_1.recordCacheHit)();
129
+ }
130
+ const rawMatches = (0, query_js_1.getSwiftScopeQuery)().matches(tree.rootNode);
131
+ const out = [];
132
+ // Dedup genuine field reads by span — tree-sitter-swift can match the
133
+ // same navigation_expression twice (stacked nodes with identical spans).
134
+ const seenReadSpans = new Set();
135
+ for (const m of rawMatches) {
136
+ // Group captures by tag. Tree-sitter strips the leading `@`; put it
137
+ // back so the central extractor's prefix lookups work. Keep a
138
+ // parallel tag → node map so anchors resolve via nodeIfType (the
139
+ // captured node IS the node at that range — no findNodeAtRange
140
+ // root-walk, the O(matches × rootChildren) hot path fixed in #1918).
141
+ const grouped = {};
142
+ const nodeMap = {};
143
+ for (const c of m.captures) {
144
+ const tag = '@' + c.name;
145
+ grouped[tag] = (0, ast_helpers_js_1.nodeToCapture)(tag, c.node);
146
+ nodeMap[tag] = c.node;
147
+ }
148
+ if (Object.keys(grouped).length === 0)
149
+ continue;
150
+ // ── Imports ──────────────────────────────────────────────────────
151
+ if (grouped['@import.statement'] !== undefined) {
152
+ const stmtNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@import.statement'], 'import_declaration');
153
+ if (stmtNode !== null) {
154
+ const decomposed = (0, import_decomposer_js_1.splitSwiftImport)(stmtNode);
155
+ if (decomposed !== null) {
156
+ out.push(decomposed);
157
+ continue;
158
+ }
159
+ }
160
+ // Structural receiver chain for a call whose receiver is itself an
161
+ // expression, so resolution can type it by folding over structure
162
+ // instead of re-parsing the receiver's source text. Self-gating: a
163
+ // non-call match, an absent receiver, or a chain with no nameable base
164
+ // all leave `grouped` untouched.
165
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
166
+ out.push(grouped); // defensive fallback
167
+ continue;
168
+ }
169
+ // ── Optional bindings: if-let / guard-let. Synthesize a
170
+ // @type-binding.constructor (name → callee); chain-follow resolves
171
+ // the callee to its return type. ─────────────────────────────────
172
+ if (grouped['@optional.binding'] !== undefined) {
173
+ const stmtNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@optional.binding'], 'if_statement', 'guard_statement');
174
+ if (stmtNode !== null) {
175
+ for (const synth of synthesizeOptionalBindings(stmtNode))
176
+ out.push(synth);
177
+ }
178
+ continue;
179
+ }
180
+ // ── Field accesses: a `navigation_expression` (`obj.field`) is one of
181
+ // three things. Drop it when it's a call's callee (`u.save` in
182
+ // `u.save()` — the @reference.call.member query already covers that).
183
+ // Re-tag it as a write when it's the LHS of an assignment
184
+ // (`obj.field = x`) so a `write` ACCESSES edge emits (mirrors
185
+ // Kotlin/PHP `@reference.write.member`); otherwise keep it as a
186
+ // genuine read (`u.address`) and dedup identical spans. ───────────
187
+ if (grouped['@reference.read.member'] !== undefined) {
188
+ const navNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@reference.read.member'], 'navigation_expression');
189
+ if (navNode === null)
190
+ continue;
191
+ if (isSwiftMemberCallCallee(navNode))
192
+ continue;
193
+ if (isSwiftMemberWriteLhs(navNode)) {
194
+ // Re-tag the read anchor as a write. The extractor's anchor
195
+ // classifier reads the capture's `.name` (not the map key —
196
+ // `referenceKindFromAnchor` derives the site kind from
197
+ // `@reference.<kind>`), so we build a FRESH capture whose `.name`
198
+ // is the write tag rather than aliasing the read capture object
199
+ // (which would still classify as a read — a silent no-op). The
200
+ // sibling `@reference.name` / `@reference.receiver` captures carry
201
+ // over unchanged so the field + receiver still resolve. (Mirrors
202
+ // the constructor re-tag below and PHP's write re-tag.)
203
+ const reKeyed = { ...grouped };
204
+ delete reKeyed['@reference.read.member'];
205
+ reKeyed['@reference.write.member'] = (0, ast_helpers_js_1.nodeToCapture)('@reference.write.member', navNode);
206
+ out.push(reKeyed);
207
+ continue;
208
+ }
209
+ const span = `${navNode.startIndex}-${navNode.endIndex}`;
210
+ if (seenReadSpans.has(span))
211
+ continue;
212
+ seenReadSpans.add(span);
213
+ // Structural receiver chain for a call whose receiver is itself an
214
+ // expression, so resolution can type it by folding over structure
215
+ // instead of re-parsing the receiver's source text. Self-gating: a
216
+ // non-call match, an absent receiver, or a chain with no nameable base
217
+ // all leave `grouped` untouched.
218
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
219
+ out.push(grouped);
220
+ continue;
221
+ }
222
+ // ── Extensions: re-key @declaration.extension → @declaration.class
223
+ // with the extended type's bare name so members hoist onto it. ────
224
+ if (grouped['@declaration.extension'] !== undefined) {
225
+ const extNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@declaration.extension'], 'class_declaration');
226
+ const reKeyed = { ...grouped };
227
+ delete reKeyed['@declaration.extension'];
228
+ reKeyed['@declaration.class'] = grouped['@declaration.extension'];
229
+ if (extNode !== null) {
230
+ const nameNode = extNode.childForFieldName('name');
231
+ // For a nested type `extension Foo.Bar`, the name is
232
+ // `(user_type (type_identifier Foo) (type_identifier Bar))`; the
233
+ // EXTENDED type is the trailing identifier `Bar` (lastNamedChild),
234
+ // not `Foo`. For a single `extension Foo`, first === last, so this
235
+ // is unchanged. Members must hoist onto `Bar`, not `Foo`.
236
+ const bare = nameNode?.type === 'user_type'
237
+ ? (nameNode.lastNamedChild?.text ?? nameNode.text)
238
+ : (nameNode?.text ?? grouped['@declaration.name']?.text ?? '');
239
+ if (bare !== '') {
240
+ reKeyed['@declaration.name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', extNode, bare);
241
+ }
242
+ }
243
+ out.push(reKeyed);
244
+ continue;
245
+ }
246
+ // ── `let x = Type.init(...)` — explicit-initializer call. The
247
+ // constructor type-binding query only matches a bare `Type(...)`
248
+ // (simple_identifier callee); the `Type.init(...)` navigation form
249
+ // needs a synthesized `x: Type` binding so a later `x.method()`
250
+ // resolves. Emitted in ADDITION to the normal @declaration.property
251
+ // match, which still flows through to the final push below. ───────
252
+ if (grouped['@declaration.property'] !== undefined) {
253
+ const propNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@declaration.property'], 'property_declaration');
254
+ const synth = propNode === null ? null : synthesizeInitCtorBinding(propNode);
255
+ if (synth !== null)
256
+ out.push(synth);
257
+ }
258
+ // ── init: synthesize @declaration.name = "init" (no name field). ──
259
+ if (grouped['@declaration.constructor'] !== undefined &&
260
+ grouped['@declaration.name'] === undefined) {
261
+ const initNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@declaration.constructor'], 'init_declaration');
262
+ if (initNode !== null) {
263
+ grouped['@declaration.name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', initNode, 'init');
264
+ }
265
+ }
266
+ // ── Qualify a method/constructor def with its owning type (#2807). ──
267
+ // Emitted before the `@scope.function` branch below, which pushes and
268
+ // `continue`s; a Swift `function_declaration` matches both patterns.
269
+ if (grouped['@declaration.qualified_name'] === undefined) {
270
+ const ownerTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
271
+ const declaredName = grouped['@declaration.name']?.text;
272
+ const declNode = ownerTag === undefined ? null : nodeMap[ownerTag];
273
+ if (ownerTag !== undefined && declaredName !== undefined && declNode != null) {
274
+ const owner = swiftEnclosingTypeName(declNode);
275
+ if (owner !== null) {
276
+ grouped['@declaration.qualified_name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.qualified_name', declNode, `${owner}.${declaredName}`);
277
+ }
278
+ }
279
+ }
280
+ // ── @scope.function: arity + receiver + signature bindings. ──────
281
+ if (grouped['@scope.function'] !== undefined) {
282
+ const fnNodeForArity = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.function'] ??
283
+ nodeMap['@declaration.method'] ??
284
+ nodeMap['@declaration.constructor'], ...FUNCTION_NODE_TYPES);
285
+ if (fnNodeForArity !== null)
286
+ attachArityMetadata(grouped, fnNodeForArity);
287
+ // Structural receiver chain for a call whose receiver is itself an
288
+ // expression, so resolution can type it by folding over structure
289
+ // instead of re-parsing the receiver's source text. Self-gating: a
290
+ // non-call match, an absent receiver, or a chain with no nameable base
291
+ // all leave `grouped` untouched.
292
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
293
+ out.push(grouped);
294
+ const recvNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.function'], ...RECEIVER_NODE_TYPES);
295
+ if (recvNode !== null) {
296
+ for (const synth of (0, receiver_binding_js_1.synthesizeSwiftReceiverBinding)(recvNode))
297
+ out.push(synth);
298
+ }
299
+ const sigNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.function'], ...FUNCTION_NODE_TYPES);
300
+ if (sigNode !== null) {
301
+ for (const synth of (0, signature_bindings_js_1.synthesizeSwiftSignatureBindings)(sigNode))
302
+ out.push(synth);
303
+ }
304
+ continue;
305
+ }
306
+ // ── Arity metadata on function-like declarations (non-scope). ────
307
+ const declTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
308
+ if (declTag !== undefined) {
309
+ const fnNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap[declTag], ...FUNCTION_NODE_TYPES);
310
+ if (fnNode !== null)
311
+ attachArityMetadata(grouped, fnNode);
312
+ }
313
+ // ── Constructor calls: Swift has no `new`, so `Foo()` is a free call
314
+ // whose callee is a type. Re-tag an UpperCamelCase free-call callee as
315
+ // a constructor reference so the resolver's constructor branch targets
316
+ // the type's Constructor/Class (mirrors how other no-`new` languages
317
+ // classify `Type(...)`). Types are UpperCamelCase by Swift convention;
318
+ // functions are lowerCamelCase — so the first-letter test is a reliable
319
+ // syntactic discriminator with no scope lookup. ──────────────────────
320
+ if (grouped['@reference.call.free'] !== undefined) {
321
+ const calleeName = grouped['@reference.name']?.text ?? '';
322
+ const first = calleeName.charAt(0);
323
+ if (first !== '' && first === first.toUpperCase() && first !== first.toLowerCase()) {
324
+ // Build a fresh capture whose `.name` is the constructor tag — the
325
+ // extractor's anchor classifier reads the capture's `.name`, not the
326
+ // map key, so reusing the free-call capture object would keep
327
+ // classifying it as a free call (silent no-op).
328
+ const callNode = nodeMap['@reference.call.free'];
329
+ grouped['@reference.call.constructor'] = (0, ast_helpers_js_1.nodeToCapture)('@reference.call.constructor', callNode);
330
+ nodeMap['@reference.call.constructor'] = callNode;
331
+ delete grouped['@reference.call.free'];
332
+ }
333
+ }
334
+ // ── @reference.arity on call sites. ──────────────────────────────
335
+ const callTag = ['@reference.call.free', '@reference.call.member', '@reference.call.constructor'].find((t) => grouped[t] !== undefined);
336
+ if (callTag !== undefined && grouped['@reference.arity'] === undefined) {
337
+ const callNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap[callTag], 'call_expression');
338
+ if (callNode !== null) {
339
+ grouped['@reference.arity'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', callNode, String(countCallArguments(callNode)));
340
+ }
341
+ }
342
+ // Structural receiver chain for a call whose receiver is itself an
343
+ // expression, so resolution can type it by folding over structure
344
+ // instead of re-parsing the receiver's source text. Self-gating: a
345
+ // non-call match, an absent receiver, or a chain with no nameable base
346
+ // all leave `grouped` untouched.
347
+ (0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
348
+ out.push(grouped);
349
+ }
350
+ // ── Emit inheritance references for scope-resolution EXTENDS / IMPLEMENTS ──
351
+ // Walk every class/struct/enum/actor/extension and protocol declaration's
352
+ // inheritance specifiers and synthesize `@reference.inherits` captures so
353
+ // the registry-primary path emits EXTENDS / IMPLEMENTS (mirrors C++ /
354
+ // C# / Java). Without this, Swift inheritance edges came only from the
355
+ // legacy heritage-capture leg (removed in #942), which the worker pipeline
356
+ // drops for registry-primary languages (issue #1951).
357
+ out.push(...synthesizeSwiftInheritanceReferences(tree.rootNode));
358
+ out.push(...(0, callable_flow_captures_js_1.synthesizeCallableFlowCaptures)(tree.rootNode, SWIFT_CALLABLE_CAPTURE_OPTIONS));
359
+ return out;
360
+ }
361
+ /**
362
+ * Synthesize `@reference.inherits` captures from Swift inheritance
363
+ * specifiers so the registry-primary scope-resolution path emits
364
+ * EXTENDS / IMPLEMENTS edges (mirrors `synthesizeCsharpInheritanceReferences`
365
+ * / `emitCppInheritanceCaptures`). Without this, Swift inheritance edges came
366
+ * only from the legacy heritage-capture leg (removed in #942), dropped for
367
+ * registry-primary languages in the worker pipeline (issue #1951).
368
+ *
369
+ * Scope matches the legacy SWIFT_QUERIES heritage blocks exactly: a
370
+ * `class_declaration` (class / struct / enum / actor / extension all share
371
+ * this node) or a `protocol_declaration`, each with an
372
+ * `(inheritance_specifier inherits_from: (user_type (type_identifier)))`.
373
+ * The EXTENDS-vs-IMPLEMENTS split is decided downstream from the resolved
374
+ * target's symbol kind (`preEmitInheritanceEdges` → Interface = IMPLEMENTS,
375
+ * else EXTENDS), so every base is emitted with the same `inherits` kind here.
376
+ * The base lookup name is normalized to its bare simple identifier
377
+ * (`SomeProtocol<T>` → `SomeProtocol`, `Outer.Inner` → `Inner`) to match the
378
+ * V1 simple-name `findClassBindingInScope` contract.
379
+ */
380
+ function synthesizeSwiftInheritanceReferences(root) {
381
+ const out = [];
382
+ (0, ast_helpers_js_1.walkNamedTree)(root, (node) => {
383
+ if (node.type !== 'class_declaration' && node.type !== 'protocol_declaration')
384
+ return;
385
+ for (let i = 0; i < node.namedChildCount; i++) {
386
+ const child = node.namedChild(i);
387
+ if (child === null || child.type !== 'inheritance_specifier')
388
+ continue;
389
+ const inheritsFrom = child.childForFieldName('inherits_from') ?? child.firstNamedChild;
390
+ if (inheritsFrom === null)
391
+ continue;
392
+ const nameNode = swiftBaseTypeIdentifier(inheritsFrom);
393
+ if (nameNode === null)
394
+ continue;
395
+ out.push({
396
+ '@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', child),
397
+ '@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', nameNode),
398
+ });
399
+ }
400
+ });
401
+ return out;
402
+ }
403
+ /** Normalize an `inherits_from` node to its bare simple identifier node.
404
+ * Only a `user_type`-shaped base contributes an edge; its trailing
405
+ * `type_identifier` (the actual base — see `swiftQualifiedBaseTail`) is
406
+ * returned. Returns null for any other base shape (e.g. a tuple /
407
+ * function-type conformance), so no edge is synthesized — matching the legacy
408
+ * query's `user_type` gate. */
409
+ function swiftBaseTypeIdentifier(inheritsFrom) {
410
+ if (inheritsFrom.type === 'type_identifier')
411
+ return inheritsFrom;
412
+ if (inheritsFrom.type !== 'user_type')
413
+ return null;
414
+ return (0, base_type_js_1.swiftQualifiedBaseTail)(inheritsFrom);
415
+ }
416
+ /** Pre-order walk over named children (mirrors C#'s `visit`). */
417
+ /** Synthesize a `@type-binding.constructor` for EACH clause of an
418
+ * if-let / guard-let optional binding:
419
+ * `if let u = getUser()` → one binding `u: getUser`
420
+ * `if let a = makeA(), let b = makeB()` → two bindings `a: makeA`, `b: makeB`
421
+ * (chain-follow resolves each callee → its return type).
422
+ *
423
+ * The statement has a FLAT child list (verified, tree-sitter-swift 0.7.1):
424
+ * each clause is `value_binding_pattern` · `simple_identifier` (the bound
425
+ * name) · `=` · value, where value is a `call_expression` directly, or an
426
+ * `await_expression` / `try_expression` wrapping one. NOTE: every bound
427
+ * name carries the `bound_identifier` field, but `childForFieldName`
428
+ * returns only the FIRST — so we walk the children in order instead.
429
+ *
430
+ * Clauses whose value isn't a call (`if let a = optionalVar`) are skipped
431
+ * WITHOUT consuming the following clause's call. Single-clause output is
432
+ * byte-identical to the prior single-binding implementation. `if_statement`
433
+ * and `guard_statement` share this shape and are handled identically. */
434
+ function synthesizeOptionalBindings(stmtNode) {
435
+ const out = [];
436
+ // State machine over the flat clause list. `pendingName` is the bound
437
+ // name of the clause currently awaiting its value; `awaitingName` is set
438
+ // right after a `value_binding_pattern` so the next `simple_identifier`
439
+ // is taken as the name (not as a value).
440
+ let pendingName = null;
441
+ let awaitingName = false;
442
+ for (let i = 0; i < stmtNode.childCount; i++) {
443
+ const child = stmtNode.child(i);
444
+ if (child === null)
445
+ continue;
446
+ // The clause list ends at the body / else / statements.
447
+ if (child.type === 'statements' || child.type === '{' || child.text === 'else')
448
+ break;
449
+ if (child.type === 'value_binding_pattern') {
450
+ // A new clause begins; any prior clause whose value never arrived was
451
+ // a non-call clause — drop it without consuming this one.
452
+ pendingName = null;
453
+ awaitingName = true;
454
+ continue;
455
+ }
456
+ if (awaitingName) {
457
+ if (child.type === 'simple_identifier') {
458
+ pendingName = child;
459
+ awaitingName = false;
460
+ }
461
+ continue;
462
+ }
463
+ if (pendingName === null)
464
+ continue;
465
+ if (child.text === '=' || child.text === ',')
466
+ continue;
467
+ // First non-`=` node after the name is the clause value. Take a binding
468
+ // only when it's a call; clear pendingName either way so a non-call
469
+ // clause doesn't steal the next clause's call.
470
+ const callee = optionalBindingCallee(child);
471
+ if (callee !== null) {
472
+ out.push({
473
+ '@type-binding.constructor': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.constructor', stmtNode),
474
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', pendingName, pendingName.text),
475
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', callee, callee.text),
476
+ });
477
+ }
478
+ pendingName = null;
479
+ }
480
+ return out;
481
+ }
482
+ /** Resolve an optional-binding clause VALUE node to its call callee
483
+ * (`simple_identifier`), unwrapping a single `await`/`try` layer. Returns
484
+ * null when the value isn't a bare-identifier call (e.g. `optionalVar`,
485
+ * or `obj.method()` — which must NOT bind to `obj`). */
486
+ function optionalBindingCallee(value) {
487
+ let call = null;
488
+ if (value.type === 'call_expression') {
489
+ call = value;
490
+ }
491
+ else if (value.type === 'await_expression' || value.type === 'try_expression') {
492
+ for (let j = 0; j < value.namedChildCount; j++) {
493
+ const inner = value.namedChild(j);
494
+ if (inner !== null && inner.type === 'call_expression') {
495
+ call = inner;
496
+ break;
497
+ }
498
+ }
499
+ }
500
+ if (call === null)
501
+ return null;
502
+ const callee = call.namedChild(0);
503
+ return callee !== null && callee.type === 'simple_identifier' ? callee : null;
504
+ }
505
+ /** Synthesize a `@type-binding.constructor` for `let x = Type.init(...)`.
506
+ * The property's `value:` is a call_expression whose callee is a
507
+ * navigation_expression `Type.init`; bind `x` to the navigation target
508
+ * `Type` (the explicit-initializer form of `let x = Type(...)`). Returns
509
+ * null for any other value shape (e.g. `let x = obj.method()`, which must
510
+ * NOT bind x to `obj`). */
511
+ function synthesizeInitCtorBinding(propNode) {
512
+ const namePattern = propNode.childForFieldName('name');
513
+ const nameNode = namePattern?.childForFieldName('bound_identifier') ?? null;
514
+ if (nameNode === null)
515
+ return null;
516
+ const value = propNode.childForFieldName('value');
517
+ if (value === null || value.type !== 'call_expression')
518
+ return null;
519
+ const callee = value.namedChild(0);
520
+ if (callee === null || callee.type !== 'navigation_expression')
521
+ return null;
522
+ const target = callee.childForFieldName('target');
523
+ const suffix = callee.childForFieldName('suffix');
524
+ const member = suffix?.childForFieldName('suffix') ?? null;
525
+ if (target === null ||
526
+ target.type !== 'simple_identifier' ||
527
+ member === null ||
528
+ member.text !== 'init') {
529
+ return null;
530
+ }
531
+ const m = {
532
+ '@type-binding.constructor': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.constructor', propNode),
533
+ '@type-binding.name': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.name', nameNode, nameNode.text),
534
+ '@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', target, target.text),
535
+ };
536
+ return m;
537
+ }
538
+ /** Is this navigation_expression the callee of a call (`a.b` in `a.b()`)?
539
+ * That is a member call, already captured by @reference.call.member, so
540
+ * the read.member emission must be dropped. */
541
+ function isSwiftMemberCallCallee(navNode) {
542
+ return navNode.parent?.type === 'call_expression';
543
+ }
544
+ /** Is this navigation_expression the LHS of an assignment (`a.b = …` — a
545
+ * field write)? tree-sitter-swift wraps the assignment target in a
546
+ * `directly_assignable_expression`, so the write discriminator is the
547
+ * GRANDPARENT `assignment` reached via that wrapper — NOT a direct
548
+ * `parent.type === 'assignment'` (which never matches; the old guard was
549
+ * dead). The inner `obj.a` of `obj.a.b = x` has parent
550
+ * `navigation_expression` (the outer access), so it is correctly NOT a
551
+ * write — only the outermost nav under `directly_assignable_expression`
552
+ * is the write target. */
553
+ function isSwiftMemberWriteLhs(navNode) {
554
+ const parent = navNode.parent;
555
+ if (parent === null || parent.type !== 'directly_assignable_expression')
556
+ return false;
557
+ return parent.parent?.type === 'assignment';
558
+ }
559
+ /** Attach @declaration.parameter-count / required-parameter-count /
560
+ * parameter-types synthesized from a function-like node. */
561
+ function attachArityMetadata(grouped, fnNode) {
562
+ const arity = (0, arity_metadata_js_1.computeSwiftArityMetadata)(fnNode);
563
+ if (arity.parameterCount !== undefined) {
564
+ grouped['@declaration.parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-count', fnNode, String(arity.parameterCount));
565
+ }
566
+ if (arity.requiredParameterCount !== undefined) {
567
+ grouped['@declaration.required-parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.required-parameter-count', fnNode, String(arity.requiredParameterCount));
568
+ }
569
+ if (arity.parameterTypes !== undefined) {
570
+ grouped['@declaration.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
571
+ }
572
+ }
573
+ /** Count call arguments: the `value_argument` named children of the
574
+ * call's `call_suffix > value_arguments`. */
575
+ function countCallArguments(callNode) {
576
+ for (let i = 0; i < callNode.namedChildCount; i++) {
577
+ const child = callNode.namedChild(i);
578
+ if (child === null || child.type !== 'call_suffix')
579
+ continue;
580
+ for (let j = 0; j < child.namedChildCount; j++) {
581
+ const va = child.namedChild(j);
582
+ if (va === null || va.type !== 'value_arguments')
583
+ continue;
584
+ let n = 0;
585
+ for (let k = 0; k < va.namedChildCount; k++) {
586
+ const arg = va.namedChild(k);
587
+ if (arg !== null && arg.type === 'value_argument')
588
+ n++;
589
+ }
590
+ return n;
591
+ }
592
+ }
593
+ return 0;
594
+ }