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,843 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractReturnTypeName = exports.indexOnlyElementType = exports.extractCalleeName = exports.unwrapAwait = exports.stripNullable = exports.hasTypeAnnotation = exports.extractRubyConstructorAssignment = exports.extractGenericTypeArgs = exports.TYPED_PARAMETER_TYPES = exports.extractVarName = exports.extractSimpleTypeName = void 0;
4
+ exports.methodToTypeArgPosition = methodToTypeArgPosition;
5
+ exports.getContainerDescriptor = getContainerDescriptor;
6
+ exports.resolveIterableElementType = resolveIterableElementType;
7
+ exports.extractElementTypeFromString = extractElementTypeFromString;
8
+ /** Empty set for containers that have no key-yielding methods */
9
+ const NO_KEYS = new Set();
10
+ /** Standard key-yielding methods across languages */
11
+ const STD_KEY_METHODS = new Set(['keys']);
12
+ const JAVA_KEY_METHODS = new Set(['keySet']);
13
+ const CSHARP_KEY_METHODS = new Set(['Keys']);
14
+ /** Standard value-yielding methods across languages */
15
+ const STD_VALUE_METHODS = new Set(['values', 'get', 'pop', 'remove']);
16
+ const CSHARP_VALUE_METHODS = new Set(['Values', 'TryGetValue']);
17
+ const SINGLE_ELEMENT_METHODS = new Set([
18
+ 'iter',
19
+ 'into_iter',
20
+ 'iterator',
21
+ 'get',
22
+ 'first',
23
+ 'last',
24
+ 'pop',
25
+ 'peek',
26
+ 'poll',
27
+ 'find',
28
+ 'filter',
29
+ 'map',
30
+ ]);
31
+ const CONTAINER_DESCRIPTORS = new Map([
32
+ // --- Map / Dict types (arity 2: key + value) ---
33
+ ['Map', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
34
+ ['WeakMap', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
35
+ ['HashMap', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
36
+ ['BTreeMap', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
37
+ ['LinkedHashMap', { arity: 2, keyMethods: JAVA_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
38
+ ['TreeMap', { arity: 2, keyMethods: JAVA_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
39
+ ['dict', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
40
+ ['Dict', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
41
+ ['Dictionary', { arity: 2, keyMethods: CSHARP_KEY_METHODS, valueMethods: CSHARP_VALUE_METHODS }],
42
+ [
43
+ 'SortedDictionary',
44
+ { arity: 2, keyMethods: CSHARP_KEY_METHODS, valueMethods: CSHARP_VALUE_METHODS },
45
+ ],
46
+ ['Record', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
47
+ ['OrderedDict', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
48
+ [
49
+ 'ConcurrentHashMap',
50
+ { arity: 2, keyMethods: JAVA_KEY_METHODS, valueMethods: STD_VALUE_METHODS },
51
+ ],
52
+ [
53
+ 'ConcurrentDictionary',
54
+ { arity: 2, keyMethods: CSHARP_KEY_METHODS, valueMethods: CSHARP_VALUE_METHODS },
55
+ ],
56
+ // --- Single-element containers (arity 1) ---
57
+ ['Array', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
58
+ ['List', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
59
+ ['ArrayList', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
60
+ ['LinkedList', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
61
+ ['Vec', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
62
+ ['VecDeque', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
63
+ ['Set', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
64
+ ['HashSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
65
+ ['BTreeSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
66
+ ['TreeSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
67
+ ['Queue', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
68
+ ['Deque', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
69
+ ['Stack', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
70
+ ['Sequence', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
71
+ ['Iterable', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
72
+ ['Iterator', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
73
+ ['IEnumerable', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
74
+ ['IList', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
75
+ ['ICollection', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
76
+ ['Collection', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
77
+ ['ObservableCollection', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
78
+ ['IEnumerator', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
79
+ ['SortedSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
80
+ ['Stream', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
81
+ ['MutableList', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
82
+ ['MutableSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
83
+ ['LinkedHashSet', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
84
+ ['ArrayDeque', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
85
+ ['PriorityQueue', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
86
+ ['MutableMap', { arity: 2, keyMethods: STD_KEY_METHODS, valueMethods: STD_VALUE_METHODS }],
87
+ ['list', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
88
+ ['set', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
89
+ ['tuple', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
90
+ ['frozenset', { arity: 1, keyMethods: NO_KEYS, valueMethods: SINGLE_ELEMENT_METHODS }],
91
+ ]);
92
+ /** Determine which type arg to extract based on container type name and access method.
93
+ *
94
+ * Resolution order:
95
+ * 1. If container is known and method is in keyMethods → 'first'
96
+ * 2. If container is known with arity 1 → 'last' (same as 'first' for single-arg)
97
+ * 3. If container is unknown → fall back to method name heuristic
98
+ * 4. Default: 'last' (value type)
99
+ */
100
+ function methodToTypeArgPosition(methodName, containerTypeName) {
101
+ if (containerTypeName) {
102
+ const desc = CONTAINER_DESCRIPTORS.get(containerTypeName);
103
+ if (desc) {
104
+ // Single-element container: always 'last' (= only arg)
105
+ if (desc.arity === 1)
106
+ return 'last';
107
+ // Multi-element: check if method yields key type
108
+ if (methodName && desc.keyMethods.has(methodName))
109
+ return 'first';
110
+ // Default for multi-element: value type
111
+ return 'last';
112
+ }
113
+ }
114
+ // Fallback for unknown containers: simple method name heuristic
115
+ if (methodName && (methodName === 'keys' || methodName === 'keySet' || methodName === 'Keys')) {
116
+ return 'first';
117
+ }
118
+ return 'last';
119
+ }
120
+ /** Look up the container descriptor for a type name. Exported for heritage-chain lookups. */
121
+ function getContainerDescriptor(typeName) {
122
+ return CONTAINER_DESCRIPTORS.get(typeName);
123
+ }
124
+ /**
125
+ * Shared 3-strategy fallback for resolving the element type of a container variable.
126
+ * Used by all for-loop extractors to resolve the loop variable's type from the iterable.
127
+ *
128
+ * Strategy 1: declarationTypeNodes — raw AST type annotation node (handles container types
129
+ * where extractSimpleTypeName returned undefined, e.g., User[], List[User])
130
+ * Strategy 2: scopeEnv string — extractElementTypeFromString on the stored type string
131
+ * Strategy 3: AST walk — language-specific upward walk to enclosing function parameters
132
+ *
133
+ * @param extractFromTypeNode Language-specific function to extract element type from AST node
134
+ * @param findParamElementType Optional language-specific AST walk to find parameter type
135
+ * @param typeArgPos Which generic type arg to extract: 'first' for keys, 'last' for values (default)
136
+ */
137
+ function resolveIterableElementType(iterableName, node, scopeEnv, declarationTypeNodes, scope, extractFromTypeNode, findParamElementType, typeArgPos = 'last') {
138
+ // Strategy 1: declarationTypeNodes AST node (check current scope, then file scope)
139
+ const typeNode = declarationTypeNodes.get(`${scope}\0${iterableName}`) ??
140
+ (scope !== '' ? declarationTypeNodes.get(`\0${iterableName}`) : undefined);
141
+ if (typeNode) {
142
+ const t = extractFromTypeNode(typeNode, typeArgPos);
143
+ if (t)
144
+ return t;
145
+ }
146
+ // Strategy 2: scopeEnv string → extractElementTypeFromString
147
+ const iterableType = scopeEnv.get(iterableName);
148
+ if (iterableType) {
149
+ const el = extractElementTypeFromString(iterableType, typeArgPos);
150
+ if (el)
151
+ return el;
152
+ }
153
+ // Strategy 3: AST walk to function parameters
154
+ if (findParamElementType)
155
+ return findParamElementType(iterableName, node, typeArgPos);
156
+ return undefined;
157
+ }
158
+ /** Known single-arg nullable wrapper types that unwrap to their inner type
159
+ * for receiver resolution. Optional<User> → "User", Option<User> → "User".
160
+ * Only nullable wrappers — NOT containers (List, Vec) or async wrappers (Promise, Future).
161
+ * See WRAPPER_GENERICS below for the full set used in return-type inference. */
162
+ const NULLABLE_WRAPPER_TYPES = new Set([
163
+ 'Optional', // Java
164
+ 'Option', // Rust, Scala
165
+ 'Maybe', // Haskell-style, Kotlin Arrow
166
+ ]);
167
+ /**
168
+ * Extract the simple type name from a type AST node.
169
+ * Handles generic types (e.g., List<User> → List), qualified names
170
+ * (e.g., models.User → User), and nullable types (e.g., User? → User).
171
+ * Returns undefined for complex types (unions, intersections, function types).
172
+ */
173
+ const extractSimpleTypeName = (typeNode, depth = 0) => {
174
+ if (depth > 50 || typeNode.text.length > 2048)
175
+ return undefined;
176
+ // Direct type identifier (includes Ruby 'constant' for class names)
177
+ if (typeNode.type === 'type_identifier' ||
178
+ typeNode.type === 'identifier' ||
179
+ typeNode.type === 'simple_identifier' ||
180
+ typeNode.type === 'constant') {
181
+ return typeNode.text;
182
+ }
183
+ // Qualified/scoped names: take the last segment (e.g., models.User → User, Models::User → User)
184
+ if (typeNode.type === 'scoped_identifier' ||
185
+ typeNode.type === 'qualified_identifier' ||
186
+ typeNode.type === 'scoped_type_identifier' ||
187
+ typeNode.type === 'qualified_name' ||
188
+ typeNode.type === 'qualified_type' ||
189
+ typeNode.type === 'member_expression' ||
190
+ typeNode.type === 'member_access_expression' ||
191
+ typeNode.type === 'attribute' ||
192
+ typeNode.type === 'scope_resolution' ||
193
+ typeNode.type === 'selector_expression') {
194
+ const last = typeNode.lastNamedChild;
195
+ if (last &&
196
+ (last.type === 'type_identifier' ||
197
+ last.type === 'identifier' ||
198
+ last.type === 'simple_identifier' ||
199
+ last.type === 'name' ||
200
+ last.type === 'constant' ||
201
+ last.type === 'property_identifier' ||
202
+ last.type === 'field_identifier')) {
203
+ return last.text;
204
+ }
205
+ }
206
+ // C++ template_type (e.g., vector<User>, map<string, User>): extract base name
207
+ if (typeNode.type === 'template_type') {
208
+ const base = typeNode.childForFieldName('name') ?? typeNode.firstNamedChild;
209
+ if (base)
210
+ return (0, exports.extractSimpleTypeName)(base, depth + 1);
211
+ }
212
+ // Generic types: extract the base type (e.g., List<User> → List)
213
+ // For nullable wrappers (Optional<User>, Option<User>), unwrap to inner type.
214
+ if (typeNode.type === 'generic_type' || typeNode.type === 'generic_name') {
215
+ const base = typeNode.childForFieldName('name') ??
216
+ typeNode.childForFieldName('type') ??
217
+ typeNode.firstNamedChild;
218
+ if (!base)
219
+ return undefined;
220
+ const baseName = (0, exports.extractSimpleTypeName)(base, depth + 1);
221
+ // Unwrap known nullable wrappers: Optional<User> → User, Option<User> → User
222
+ if (baseName && NULLABLE_WRAPPER_TYPES.has(baseName)) {
223
+ const args = (0, exports.extractGenericTypeArgs)(typeNode);
224
+ if (args.length >= 1)
225
+ return args[0];
226
+ }
227
+ return baseName;
228
+ }
229
+ // Nullable types (Kotlin User?, C# User?)
230
+ if (typeNode.type === 'nullable_type') {
231
+ const inner = typeNode.firstNamedChild;
232
+ if (inner)
233
+ return (0, exports.extractSimpleTypeName)(inner, depth + 1);
234
+ }
235
+ // Nullable union types (TS/JS: User | null, User | undefined, User | null | undefined)
236
+ // Extract the single non-null/undefined type from the union.
237
+ if (typeNode.type === 'union_type') {
238
+ const nonNullTypes = [];
239
+ for (let i = 0; i < typeNode.namedChildCount; i++) {
240
+ const child = typeNode.namedChild(i);
241
+ if (!child)
242
+ continue;
243
+ // Skip null/undefined/void literal types
244
+ const text = child.text;
245
+ if (text === 'null' || text === 'undefined' || text === 'void')
246
+ continue;
247
+ nonNullTypes.push(child);
248
+ }
249
+ // Only unwrap if exactly one meaningful type remains
250
+ if (nonNullTypes.length === 1) {
251
+ return (0, exports.extractSimpleTypeName)(nonNullTypes[0], depth + 1);
252
+ }
253
+ }
254
+ // Type annotations that wrap the actual type (TS/Python: `: Foo`, Kotlin: user_type)
255
+ if (typeNode.type === 'type_annotation' ||
256
+ typeNode.type === 'type' ||
257
+ typeNode.type === 'user_type') {
258
+ const inner = typeNode.firstNamedChild;
259
+ if (inner)
260
+ return (0, exports.extractSimpleTypeName)(inner, depth + 1);
261
+ }
262
+ // Pointer/reference types (C++, Rust): User*, &User, &mut User
263
+ if (typeNode.type === 'pointer_type' || typeNode.type === 'reference_type') {
264
+ // Skip mutable_specifier for Rust &mut references — firstNamedChild would be
265
+ // `mutable_specifier` not the actual type. Walk named children to find the type.
266
+ for (let i = 0; i < typeNode.namedChildCount; i++) {
267
+ const child = typeNode.namedChild(i);
268
+ if (child && child.type !== 'mutable_specifier') {
269
+ return (0, exports.extractSimpleTypeName)(child, depth + 1);
270
+ }
271
+ }
272
+ }
273
+ // Primitive/predefined types: string, int, float, bool, number, unknown, any
274
+ // PHP: primitive_type; TS/JS: predefined_type
275
+ // Java: integral_type (int/long/short/byte), floating_point_type (float/double),
276
+ // boolean_type (boolean), void_type (void)
277
+ if (typeNode.type === 'primitive_type' ||
278
+ typeNode.type === 'predefined_type' ||
279
+ typeNode.type === 'integral_type' ||
280
+ typeNode.type === 'floating_point_type' ||
281
+ typeNode.type === 'boolean_type' ||
282
+ typeNode.type === 'void_type') {
283
+ return typeNode.text;
284
+ }
285
+ // PHP named_type / optional_type
286
+ if (typeNode.type === 'named_type' || typeNode.type === 'optional_type') {
287
+ const inner = typeNode.childForFieldName('name') ?? typeNode.firstNamedChild;
288
+ if (inner)
289
+ return (0, exports.extractSimpleTypeName)(inner, depth + 1);
290
+ }
291
+ // Name node (PHP)
292
+ if (typeNode.type === 'name') {
293
+ return typeNode.text;
294
+ }
295
+ return undefined;
296
+ };
297
+ exports.extractSimpleTypeName = extractSimpleTypeName;
298
+ /**
299
+ * Extract variable name from a declarator or pattern node.
300
+ * Returns the simple identifier text, or undefined for destructuring/complex patterns.
301
+ */
302
+ const extractVarName = (node) => {
303
+ if (node.type === 'identifier' ||
304
+ node.type === 'simple_identifier' ||
305
+ node.type === 'variable_name' ||
306
+ node.type === 'name' ||
307
+ node.type === 'constant' ||
308
+ node.type === 'property_identifier') {
309
+ return node.text;
310
+ }
311
+ // variable_declarator (Java/C#): has a 'name' field
312
+ if (node.type === 'variable_declarator') {
313
+ const nameChild = node.childForFieldName('name');
314
+ if (nameChild)
315
+ return (0, exports.extractVarName)(nameChild);
316
+ }
317
+ // Rust: let mut x = ... — mut_pattern wraps an identifier
318
+ if (node.type === 'mut_pattern') {
319
+ const inner = node.firstNamedChild;
320
+ if (inner)
321
+ return (0, exports.extractVarName)(inner);
322
+ }
323
+ // Swift: pattern node wraps a simple_identifier
324
+ if (node.type === 'pattern') {
325
+ const inner = node.firstNamedChild;
326
+ if (inner)
327
+ return (0, exports.extractVarName)(inner);
328
+ }
329
+ return undefined;
330
+ };
331
+ exports.extractVarName = extractVarName;
332
+ /** Node types for function/method parameters with type annotations */
333
+ exports.TYPED_PARAMETER_TYPES = new Set([
334
+ 'required_parameter', // TS: (x: Foo)
335
+ 'optional_parameter', // TS: (x?: Foo)
336
+ 'formal_parameter', // Java/Kotlin
337
+ 'parameter', // C#/Rust/Go/Python/Swift
338
+ 'typed_parameter', // Python: def f(x: Foo) — distinct from 'parameter' in tree-sitter-python
339
+ 'parameter_declaration', // C/C++ void f(Type name)
340
+ 'simple_parameter', // PHP function(Foo $x)
341
+ 'property_promotion_parameter', // PHP 8.0+ constructor promotion: __construct(private Foo $x)
342
+ 'closure_parameter', // Rust: |user: User| — typed closure parameters
343
+ ]);
344
+ /**
345
+ * Extract type arguments from a generic type node.
346
+ * e.g., List<User, String> → ['User', 'String'], Vec<User> → ['User']
347
+ *
348
+ * Used by extractSimpleTypeName to unwrap nullable wrappers (Optional<User> → User).
349
+ *
350
+ * Handles language-specific AST structures:
351
+ * - TS/Java/Rust/Go: generic_type > type_arguments > type nodes
352
+ * - C#: generic_type > type_argument_list > type nodes
353
+ * - Kotlin: generic_type > type_arguments > type_projection > type nodes
354
+ *
355
+ * Note: Go slices/maps use slice_type/map_type, not generic_type — those are
356
+ * NOT handled here. Use language-specific extractors for Go container types.
357
+ *
358
+ * @param typeNode A generic_type / generic_name / user_type AST node (or any
359
+ * node — returns [] for non-generic types).
360
+ * @returns Array of resolved type argument names. Unresolvable arguments are omitted.
361
+ */
362
+ const extractGenericTypeArgs = (typeNode, depth = 0) => {
363
+ if (depth > 50)
364
+ return [];
365
+ // Unwrap pure wrapper nodes (which carry no type_arguments of their own) that
366
+ // may sit above the generic type. `user_type` is intentionally NOT unwrapped
367
+ // here: a Kotlin `user_type` can itself carry a `type_arguments` child
368
+ // (`List<User>` → user_type > [type_identifier, type_arguments]), so it is
369
+ // handled as a generic-bearing node below.
370
+ if (typeNode.type === 'type_annotation' ||
371
+ typeNode.type === 'type' ||
372
+ typeNode.type === 'nullable_type' ||
373
+ typeNode.type === 'optional_type') {
374
+ const inner = typeNode.firstNamedChild;
375
+ if (inner)
376
+ return (0, exports.extractGenericTypeArgs)(inner, depth + 1);
377
+ return [];
378
+ }
379
+ // Generic-bearing nodes hold their arguments in a `type_arguments` /
380
+ // `type_argument_list` child: generic_type (Java/TypeScript/Rust/Go),
381
+ // generic_name (C#), and Kotlin's user_type. Verified against the installed
382
+ // grammars by real parse (#1920). A user_type without its own type_arguments
383
+ // is unwrapped at the argsNode guard below.
384
+ if (typeNode.type !== 'generic_type' &&
385
+ typeNode.type !== 'generic_name' &&
386
+ typeNode.type !== 'user_type') {
387
+ return [];
388
+ }
389
+ // Find the type_arguments / type_argument_list child
390
+ let argsNode = null;
391
+ for (let i = 0; i < typeNode.namedChildCount; i++) {
392
+ const child = typeNode.namedChild(i);
393
+ if (child && (child.type === 'type_arguments' || child.type === 'type_argument_list')) {
394
+ argsNode = child;
395
+ break;
396
+ }
397
+ }
398
+ if (!argsNode) {
399
+ // A `user_type` without its own type_arguments wraps an inner type node
400
+ // (e.g. user_type > generic_type, or a plain user_type > type_identifier with
401
+ // no generics) — recurse into that child. generic_type / generic_name with no
402
+ // args simply have no type arguments to report.
403
+ if (typeNode.type === 'user_type') {
404
+ const inner = typeNode.firstNamedChild;
405
+ return inner ? (0, exports.extractGenericTypeArgs)(inner, depth + 1) : [];
406
+ }
407
+ return [];
408
+ }
409
+ const result = [];
410
+ for (let i = 0; i < argsNode.namedChildCount; i++) {
411
+ let argNode = argsNode.namedChild(i);
412
+ if (!argNode)
413
+ continue;
414
+ // Kotlin: type_arguments > type_projection > user_type > type_identifier
415
+ if (argNode.type === 'type_projection') {
416
+ argNode = argNode.firstNamedChild;
417
+ if (!argNode)
418
+ continue;
419
+ }
420
+ const name = (0, exports.extractSimpleTypeName)(argNode);
421
+ if (name)
422
+ result.push(name);
423
+ }
424
+ return result;
425
+ };
426
+ exports.extractGenericTypeArgs = extractGenericTypeArgs;
427
+ /**
428
+ * Match Ruby constructor assignment: `user = User.new` or `service = Models::User.new`.
429
+ * Returns { varName, calleeName } or undefined if the node is not a Ruby constructor assignment.
430
+ * Handles both simple constants and scope_resolution (namespaced) receivers.
431
+ */
432
+ const extractRubyConstructorAssignment = (node) => {
433
+ if (node.type !== 'assignment')
434
+ return undefined;
435
+ const left = node.childForFieldName('left');
436
+ const right = node.childForFieldName('right');
437
+ if (!left || !right)
438
+ return undefined;
439
+ if (left.type !== 'identifier' && left.type !== 'constant')
440
+ return undefined;
441
+ if (right.type !== 'call')
442
+ return undefined;
443
+ const method = right.childForFieldName('method');
444
+ if (!method || method.text !== 'new')
445
+ return undefined;
446
+ const receiver = right.childForFieldName('receiver');
447
+ if (!receiver)
448
+ return undefined;
449
+ let calleeName;
450
+ if (receiver.type === 'constant') {
451
+ calleeName = receiver.text;
452
+ }
453
+ else if (receiver.type === 'scope_resolution') {
454
+ // Models::User → extract last segment "User"
455
+ const last = receiver.lastNamedChild;
456
+ if (!last || last.type !== 'constant')
457
+ return undefined;
458
+ calleeName = last.text;
459
+ }
460
+ else {
461
+ return undefined;
462
+ }
463
+ return { varName: left.text, calleeName };
464
+ };
465
+ exports.extractRubyConstructorAssignment = extractRubyConstructorAssignment;
466
+ /**
467
+ * Check if an AST node has an explicit type annotation.
468
+ * Checks both named fields ('type') and child nodes ('type_annotation').
469
+ * Used by constructor binding scanners to skip annotated declarations.
470
+ */
471
+ const hasTypeAnnotation = (node) => {
472
+ if (node.childForFieldName('type'))
473
+ return true;
474
+ for (let i = 0; i < node.childCount; i++) {
475
+ if (node.child(i)?.type === 'type_annotation')
476
+ return true;
477
+ }
478
+ return false;
479
+ };
480
+ exports.hasTypeAnnotation = hasTypeAnnotation;
481
+ /** Bare nullable keywords that should not produce a receiver binding. */
482
+ const NULLABLE_KEYWORDS = new Set(['null', 'undefined', 'void', 'None', 'nil']);
483
+ /**
484
+ * Strip nullable wrappers from a type name string.
485
+ * Used by both lookupInEnv (TypeEnv annotations) and extractReturnTypeName
486
+ * (return-type text) to normalize types before receiver lookup.
487
+ *
488
+ * "User | null" → "User"
489
+ * "User | undefined" → "User"
490
+ * "User | null | undefined" → "User"
491
+ * "User?" → "User"
492
+ * "User | Repo" → undefined (genuine union — refuse)
493
+ * "null" → undefined
494
+ */
495
+ const stripNullable = (typeName) => {
496
+ let text = typeName.trim();
497
+ if (!text)
498
+ return undefined;
499
+ if (NULLABLE_KEYWORDS.has(text))
500
+ return undefined;
501
+ // Strip nullable suffix: User? → User
502
+ if (text.endsWith('?'))
503
+ text = text.slice(0, -1).trim();
504
+ // Strip union with null/undefined/None/nil/void
505
+ if (text.includes('|')) {
506
+ const parts = text
507
+ .split('|')
508
+ .map((p) => p.trim())
509
+ .filter((p) => p !== '' && !NULLABLE_KEYWORDS.has(p));
510
+ if (parts.length === 1)
511
+ return parts[0];
512
+ return undefined; // genuine union or all-nullable — refuse
513
+ }
514
+ return text || undefined;
515
+ };
516
+ exports.stripNullable = stripNullable;
517
+ /**
518
+ * Unwrap an await_expression to get the inner value.
519
+ * Returns the node itself if not an await_expression, or null if input is null.
520
+ */
521
+ const unwrapAwait = (node) => {
522
+ if (!node)
523
+ return null;
524
+ return node.type === 'await_expression' ? node.firstNamedChild : node;
525
+ };
526
+ exports.unwrapAwait = unwrapAwait;
527
+ /**
528
+ * Extract the callee name from a call_expression node.
529
+ * Navigates to the 'function' field (or first named child) and extracts a simple type name.
530
+ */
531
+ const extractCalleeName = (callNode) => {
532
+ const func = callNode.childForFieldName('function') ?? callNode.firstNamedChild;
533
+ if (!func)
534
+ return undefined;
535
+ return (0, exports.extractSimpleTypeName)(func);
536
+ };
537
+ exports.extractCalleeName = extractCalleeName;
538
+ // Internal helper: extract the first comma-separated argument from a string,
539
+ // respecting nested angle-bracket and square-bracket depth.
540
+ function extractFirstArg(args) {
541
+ let depth = 0;
542
+ for (let i = 0; i < args.length; i++) {
543
+ const ch = args[i];
544
+ if (ch === '<' || ch === '[')
545
+ depth++;
546
+ else if (ch === '>' || ch === ']')
547
+ depth--;
548
+ else if (ch === ',' && depth === 0)
549
+ return args.slice(0, i).trim();
550
+ }
551
+ return args.trim();
552
+ }
553
+ /**
554
+ * Extract element type from a container type string.
555
+ * Uses bracket-balanced parsing (no regex) for generic argument extraction.
556
+ * Returns undefined for ambiguous or unparseable strings.
557
+ *
558
+ * Handles:
559
+ * - Array<User> → User (generic angle brackets)
560
+ * - User[] → User (array suffix)
561
+ * - []User → User (Go slice prefix)
562
+ * - List[User] → User (Python subscript)
563
+ * - [User] → User (Swift array sugar)
564
+ * - vector<User> → User (C++ container)
565
+ * - Vec<User> → User (Rust container)
566
+ *
567
+ * For multi-argument generics (Map<K, V>), returns the first or last type arg
568
+ * based on `pos` ('first' for keys, 'last' for values — default 'last').
569
+ * Returns undefined when the extracted type is not a simple word.
570
+ */
571
+ function extractElementTypeFromString(typeStr, pos = 'last') {
572
+ if (!typeStr || typeStr.length === 0 || typeStr.length > 2048)
573
+ return undefined;
574
+ // 1. Array suffix: User[] → User
575
+ if (typeStr.endsWith('[]')) {
576
+ const base = typeStr.slice(0, -2).trim();
577
+ return base && /^\w+$/.test(base) ? base : undefined;
578
+ }
579
+ // 2. Go slice prefix: []User → User
580
+ if (typeStr.startsWith('[]')) {
581
+ const element = typeStr.slice(2).trim();
582
+ return element && /^\w+$/.test(element) ? element : undefined;
583
+ }
584
+ // 3. Swift array sugar: [User] → User
585
+ // Must start with '[', end with ']', and contain no angle brackets
586
+ // (to avoid confusing with List[User] handled below).
587
+ if (typeStr.startsWith('[') && typeStr.endsWith(']') && !typeStr.includes('<')) {
588
+ const element = typeStr.slice(1, -1).trim();
589
+ return element && /^\w+$/.test(element) ? element : undefined;
590
+ }
591
+ // 4. Generic bracket-balanced extraction: Array<User> / List[User] / Vec<User>
592
+ // Find the first opening bracket (< or [) and pick the one that appears first.
593
+ const openAngle = typeStr.indexOf('<');
594
+ const openSquare = typeStr.indexOf('[');
595
+ let openIdx = -1;
596
+ let openChar = '';
597
+ let closeChar = '';
598
+ if (openAngle >= 0 && (openSquare < 0 || openAngle < openSquare)) {
599
+ openIdx = openAngle;
600
+ openChar = '<';
601
+ closeChar = '>';
602
+ }
603
+ else if (openSquare >= 0) {
604
+ openIdx = openSquare;
605
+ openChar = '[';
606
+ closeChar = ']';
607
+ }
608
+ if (openIdx < 0)
609
+ return undefined;
610
+ // Walk bracket-balanced from the character after the opening bracket to find
611
+ // the matching close bracket, tracking depth for nested brackets.
612
+ // All bracket types (<, >, [, ]) contribute to depth uniformly, but only the
613
+ // selected closeChar can match at depth 0 (prevents cross-bracket miscounting).
614
+ let depth = 0;
615
+ const start = openIdx + 1;
616
+ let lastCommaIdx = -1; // Track last top-level comma for 'last' position
617
+ for (let i = start; i < typeStr.length; i++) {
618
+ const ch = typeStr[i];
619
+ if (ch === '<' || ch === '[') {
620
+ depth++;
621
+ }
622
+ else if (ch === '>' || ch === ']') {
623
+ if (depth === 0) {
624
+ // At depth 0 — only match if it is our selected close bracket.
625
+ if (ch !== closeChar)
626
+ return undefined; // mismatched bracket = malformed
627
+ if (pos === 'last' && lastCommaIdx >= 0) {
628
+ // Return last arg (text after last comma)
629
+ const lastArg = typeStr.slice(lastCommaIdx + 1, i).trim();
630
+ return lastArg && /^\w+$/.test(lastArg) ? lastArg : undefined;
631
+ }
632
+ const inner = typeStr.slice(start, i).trim();
633
+ const firstArg = extractFirstArg(inner);
634
+ return firstArg && /^\w+$/.test(firstArg) ? firstArg : undefined;
635
+ }
636
+ depth--;
637
+ }
638
+ else if (ch === ',' && depth === 0) {
639
+ if (pos === 'first') {
640
+ // Return first arg (text before first comma)
641
+ const arg = typeStr.slice(start, i).trim();
642
+ return arg && /^\w+$/.test(arg) ? arg : undefined;
643
+ }
644
+ lastCommaIdx = i;
645
+ }
646
+ }
647
+ return undefined;
648
+ }
649
+ /**
650
+ * `elementTypeOf` for a language with no property-style collection view:
651
+ * answer the subscript route from the written spelling, decline the accessor
652
+ * route.
653
+ *
654
+ * Languages whose collection views are spelled as method calls (`.values()`,
655
+ * `.iter()`) never reach the accessor route — the compound resolver's
656
+ * call-expression branch handles those — so the whole hook is this one
657
+ * decision. Declining (returning `undefined`) is the answer "this spelling is
658
+ * not a container", which is what stops an index-overloading class from
659
+ * folding `x[k].m()` onto its own members.
660
+ *
661
+ * Languages that DO expose a collection view as a property (C#'s `.Values`)
662
+ * need a bespoke body instead.
663
+ */
664
+ const indexOnlyElementType = (containerType, via) => via.kind === 'index' ? extractElementTypeFromString(containerType) : undefined;
665
+ exports.indexOnlyElementType = indexOnlyElementType;
666
+ // ── Return type text helpers ─────────────────────────────────────────────
667
+ // extractReturnTypeName works on raw return-type text already stored in
668
+ // SymbolDefinition (e.g. "User", "Promise<User>", "User | null", "*User").
669
+ // Extracts the base user-defined type name.
670
+ /** Primitive / built-in types that should NOT produce a receiver binding. */
671
+ const PRIMITIVE_TYPES = new Set([
672
+ 'string',
673
+ 'number',
674
+ 'boolean',
675
+ 'void',
676
+ 'int',
677
+ 'float',
678
+ 'double',
679
+ 'long',
680
+ 'short',
681
+ 'byte',
682
+ 'char',
683
+ 'bool',
684
+ 'str',
685
+ 'i8',
686
+ 'i16',
687
+ 'i32',
688
+ 'i64',
689
+ 'u8',
690
+ 'u16',
691
+ 'u32',
692
+ 'u64',
693
+ 'f32',
694
+ 'f64',
695
+ 'usize',
696
+ 'isize',
697
+ 'undefined',
698
+ 'null',
699
+ 'None',
700
+ 'nil',
701
+ ]);
702
+ /**
703
+ * Extract a simple type name from raw return-type text.
704
+ * Handles common patterns:
705
+ * "User" → "User"
706
+ * "Promise<User>" → "User" (unwrap wrapper generics)
707
+ * "Option<User>" → "User"
708
+ * "Result<User, Error>" → "User" (first type arg)
709
+ * "User | null" → "User" (strip nullable union)
710
+ * "User?" → "User" (strip nullable suffix)
711
+ * "*User" → "User" (Go pointer)
712
+ * "&User" → "User" (Rust reference)
713
+ * Returns undefined for complex types or primitives.
714
+ */
715
+ const WRAPPER_GENERICS = new Set([
716
+ 'Promise',
717
+ 'Observable',
718
+ 'Future',
719
+ 'CompletableFuture',
720
+ 'Task',
721
+ 'ValueTask', // async wrappers
722
+ 'Option',
723
+ 'Some',
724
+ 'Optional',
725
+ 'Maybe', // nullable wrappers
726
+ 'Result',
727
+ 'Either', // result wrappers
728
+ // Rust smart pointers (Deref to inner type)
729
+ 'Rc',
730
+ 'Arc',
731
+ 'Weak', // pointer types
732
+ 'MutexGuard',
733
+ 'RwLockReadGuard',
734
+ 'RwLockWriteGuard', // guard types
735
+ 'Ref',
736
+ 'RefMut', // RefCell guards
737
+ 'Cow', // copy-on-write
738
+ // Containers (List, Array, Vec, Set, etc.) are intentionally excluded —
739
+ // methods are called on the container, not the element type.
740
+ // Non-wrapper generics return the base type (e.g., List) via the else branch.
741
+ ]);
742
+ /**
743
+ * Extracts the first type argument from a comma-separated generic argument string,
744
+ * respecting nested angle brackets. For example:
745
+ * "Result<User, Error>" → "Result<User, Error>" (no top-level comma)
746
+ * "User, Error" → "User"
747
+ * "Map<K, V>, string" → "Map<K, V>"
748
+ */
749
+ function extractFirstGenericArg(args) {
750
+ let depth = 0;
751
+ for (let i = 0; i < args.length; i++) {
752
+ if (args[i] === '<')
753
+ depth++;
754
+ else if (args[i] === '>')
755
+ depth--;
756
+ else if (args[i] === ',' && depth === 0)
757
+ return args.slice(0, i).trim();
758
+ }
759
+ return args.trim();
760
+ }
761
+ /**
762
+ * Extract the first non-lifetime type argument from a generic argument string.
763
+ * Skips Rust lifetime parameters (e.g., `'a`, `'_`) to find the actual type.
764
+ * "'_, User" → "User"
765
+ * "'a, User" → "User"
766
+ * "User, Error" → "User" (no lifetime — delegates to extractFirstGenericArg)
767
+ */
768
+ function extractFirstTypeArg(args) {
769
+ let remaining = args;
770
+ while (remaining) {
771
+ const first = extractFirstGenericArg(remaining);
772
+ if (!first.startsWith("'"))
773
+ return first;
774
+ // Skip past this lifetime arg + the comma separator
775
+ const commaIdx = remaining.indexOf(',', first.length);
776
+ if (commaIdx < 0)
777
+ return first; // only lifetimes — fall through
778
+ remaining = remaining.slice(commaIdx + 1).trim();
779
+ }
780
+ return args.trim();
781
+ }
782
+ const MAX_RETURN_TYPE_INPUT_LENGTH = 2048;
783
+ const MAX_RETURN_TYPE_LENGTH = 512;
784
+ const extractReturnTypeName = (raw, depth = 0) => {
785
+ if (depth > 10)
786
+ return undefined;
787
+ if (raw.length > MAX_RETURN_TYPE_INPUT_LENGTH)
788
+ return undefined;
789
+ let text = raw.trim();
790
+ if (!text)
791
+ return undefined;
792
+ // Strip pointer/reference prefixes: *User, &User, &mut User
793
+ text = text.replace(/^[&*]+\s*(mut\s+)?/, '');
794
+ // Strip nullable suffix: User?
795
+ text = text.replace(/\?$/, '');
796
+ // Handle union types: "User | null" → "User"
797
+ if (text.includes('|')) {
798
+ const parts = text
799
+ .split('|')
800
+ .map((p) => p.trim())
801
+ .filter((p) => p !== 'null' && p !== 'undefined' && p !== 'void' && p !== 'None' && p !== 'nil');
802
+ if (parts.length === 1)
803
+ text = parts[0];
804
+ else
805
+ return undefined; // genuine union — too complex
806
+ }
807
+ // Handle generics: Promise<User> → unwrap if wrapper, else take base
808
+ const genericMatch = text.match(/^(\w+)\s*<(.+)>$/);
809
+ if (genericMatch) {
810
+ const [, base, args] = genericMatch;
811
+ if (WRAPPER_GENERICS.has(base)) {
812
+ // Take the first non-lifetime type argument, using bracket-balanced splitting
813
+ // so that nested generics like Result<User, Error> are not split at the inner
814
+ // comma. Lifetime parameters (Rust 'a, '_) are skipped.
815
+ const firstArg = extractFirstTypeArg(args);
816
+ return (0, exports.extractReturnTypeName)(firstArg, depth + 1);
817
+ }
818
+ // Non-wrapper generic: return the base type (e.g., Map<K,V> → Map)
819
+ return PRIMITIVE_TYPES.has(base.toLowerCase()) ? undefined : base;
820
+ }
821
+ // Bare wrapper type without generic argument (e.g. Task, Promise, Option)
822
+ // should not produce a binding — these are meaningless without a type parameter
823
+ if (WRAPPER_GENERICS.has(text))
824
+ return undefined;
825
+ // Handle qualified names: models.User → User, Models::User → User, \App\Models\User → User
826
+ if (text.includes('::') || text.includes('.') || text.includes('\\')) {
827
+ text = text.split(/::|[.\\]/).pop();
828
+ }
829
+ // Final check: skip primitives
830
+ if (PRIMITIVE_TYPES.has(text) || PRIMITIVE_TYPES.has(text.toLowerCase()))
831
+ return undefined;
832
+ // Must start with uppercase (class/type convention) or be a valid identifier
833
+ if (!/^[A-Z_]\w*$/.test(text))
834
+ return undefined;
835
+ // If the final extracted type name is too long, reject it
836
+ if (text.length > MAX_RETURN_TYPE_LENGTH)
837
+ return undefined;
838
+ return text;
839
+ };
840
+ exports.extractReturnTypeName = extractReturnTypeName;
841
+ // extractPropertyDeclaredType removed — all 14 languages register a FieldExtractor
842
+ // via defineLanguage() which is the single source of truth for Property metadata
843
+ // (declaredType, visibility, isStatic, isReadonly).