cgraphx 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +7 -5
  2. package/dist/.claude-template/commands/end.md +1 -1
  3. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
  6. package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
  7. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
  8. package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
  9. package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
  10. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  11. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  12. package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
  13. package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
  14. package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
  15. package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
  16. package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
  17. package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
  18. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  19. package/dist/core/code/engine/cli/analyze.js +1086 -0
  20. package/dist/core/code/engine/cli/cli-message.js +83 -0
  21. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  22. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  23. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  24. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  25. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  26. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  27. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  28. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  29. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  30. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  31. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  32. package/dist/core/code/engine/cli/status.js +156 -0
  33. package/dist/core/code/engine/cli/tool.js +384 -0
  34. package/dist/core/code/engine/config/ignore-service.js +511 -0
  35. package/dist/core/code/engine/config/supported-languages.js +17 -0
  36. package/dist/core/code/engine/core/analysis-features.js +64 -0
  37. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  38. package/dist/core/code/engine/core/git-staleness.js +180 -0
  39. package/dist/core/code/engine/core/graph/graph.js +180 -0
  40. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  41. package/dist/core/code/engine/core/graph/types.js +2 -0
  42. package/dist/core/code/engine/core/index-freshness.js +12 -0
  43. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  44. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  45. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  46. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  47. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  48. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  49. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  50. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  51. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  52. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  56. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  57. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  58. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  98. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  99. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  100. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  101. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  102. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  103. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  104. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  105. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  106. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  110. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  111. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  112. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  113. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  114. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  115. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  116. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  117. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  118. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  119. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  120. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  121. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  122. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  123. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  124. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  125. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  126. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  127. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  128. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  129. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  136. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  137. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  138. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  139. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  140. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  141. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  142. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  143. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  144. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  145. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  146. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  147. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  148. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  158. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  159. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  160. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  174. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  175. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  176. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  177. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  178. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  179. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  180. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  181. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  182. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  183. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  184. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  185. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  199. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  200. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  217. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  218. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  219. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  220. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  221. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  222. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  223. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  224. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  234. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  235. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  236. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  237. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  238. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  239. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  240. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  241. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  242. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  257. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  258. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  259. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  274. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  281. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  282. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  283. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  298. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  299. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  300. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  301. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  302. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  303. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  304. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  305. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  306. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  307. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  308. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  315. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  316. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  317. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  332. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  333. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  334. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  335. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  336. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  337. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  338. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  339. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  340. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  347. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  348. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  349. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  350. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  351. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  352. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  353. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  354. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  355. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  363. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  364. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  365. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  366. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  367. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  368. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  369. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  370. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  371. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  375. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  376. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  377. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  378. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  379. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  380. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  381. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  382. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  383. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  396. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  397. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  398. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  399. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  400. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  414. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  415. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  416. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  417. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  418. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  419. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  420. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  421. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  431. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  432. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  433. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  434. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  435. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  436. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  437. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  438. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  439. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  440. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  442. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  443. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  444. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  445. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  449. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  450. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  451. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  452. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  453. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  454. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  455. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  456. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  457. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  458. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  459. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  460. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  461. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  468. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  469. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  470. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  485. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  486. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  487. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  488. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  489. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  490. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  491. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  492. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  493. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  494. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  495. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  501. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  502. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  530. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  531. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  532. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  533. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  534. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  535. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  536. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  537. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  538. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  539. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  540. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  541. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  542. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  547. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  548. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  549. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  550. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  551. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  552. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  553. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  554. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  555. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  556. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  557. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  558. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  559. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  560. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  561. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  562. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  564. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  565. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  566. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  567. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  568. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  569. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  570. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  571. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  572. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  573. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  574. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  575. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  576. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  577. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  582. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  583. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  584. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  585. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  586. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  587. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  588. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  589. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  590. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  591. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  592. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  593. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  594. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  595. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  596. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  597. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  598. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  599. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  600. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  601. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  602. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  603. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  604. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  605. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  606. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  607. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  608. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  609. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  610. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  611. package/dist/core/code/engine/core/logger.js +339 -0
  612. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  613. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  614. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  615. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  616. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  617. package/dist/core/code/engine/lib/utils.js +121 -0
  618. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  619. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  620. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  621. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  622. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  623. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  624. package/dist/core/code/engine/storage/branch-index.js +72 -0
  625. package/dist/core/code/engine/storage/file-hash.js +95 -0
  626. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  627. package/dist/core/code/engine/storage/git.js +555 -0
  628. package/dist/core/code/engine/storage/index-lock.js +664 -0
  629. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  630. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  631. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  632. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  633. package/dist/core/code/engine/types/pipeline.js +2 -0
  634. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  635. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  636. package/dist/core/code/shared/graph/types.js +8 -0
  637. package/dist/core/code/shared/index.js +105 -0
  638. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  639. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  640. package/dist/core/code/shared/integrations/retry.js +70 -0
  641. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  642. package/dist/core/code/shared/language-detection.js +162 -0
  643. package/dist/core/code/shared/languages.js +27 -0
  644. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  645. package/dist/core/code/shared/mro-strategy.js +2 -0
  646. package/dist/core/code/shared/pipeline.js +5 -0
  647. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  648. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  649. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  650. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  651. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  652. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  653. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  654. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  655. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  656. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  657. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  658. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  659. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  660. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  661. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  662. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  663. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  664. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  665. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  666. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  667. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  668. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  669. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  670. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  671. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  672. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  673. package/dist/core/code/shared/test-helpers.js +17 -0
  674. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  675. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  676. package/dist/core/features/scanner.d.ts +2 -0
  677. package/dist/core/features/scanner.d.ts.map +1 -1
  678. package/dist/core/features/scanner.js +27 -6
  679. package/dist/core/features/scanner.js.map +1 -1
  680. package/dist/core/timeline/cli.d.ts.map +1 -1
  681. package/dist/core/timeline/cli.js +13 -6
  682. package/dist/core/timeline/cli.js.map +1 -1
  683. package/dist/core/timeline/debris.d.ts +20 -0
  684. package/dist/core/timeline/debris.d.ts.map +1 -0
  685. package/dist/core/timeline/debris.js +124 -0
  686. package/dist/core/timeline/debris.js.map +1 -0
  687. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  688. package/dist/core/timeline/hook-runner.js +3 -1
  689. package/dist/core/timeline/hook-runner.js.map +1 -1
  690. package/dist/core/timeline/hooks.d.ts.map +1 -1
  691. package/dist/core/timeline/hooks.js +13 -5
  692. package/dist/core/timeline/hooks.js.map +1 -1
  693. package/dist/core/timeline/installer.d.ts +2 -0
  694. package/dist/core/timeline/installer.d.ts.map +1 -1
  695. package/dist/core/timeline/installer.js +12 -0
  696. package/dist/core/timeline/installer.js.map +1 -1
  697. package/dist/core/timeline/project-root.d.ts +21 -0
  698. package/dist/core/timeline/project-root.d.ts.map +1 -0
  699. package/dist/core/timeline/project-root.js +83 -0
  700. package/dist/core/timeline/project-root.js.map +1 -0
  701. package/package.json +1 -1
@@ -0,0 +1,587 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TS_FUNCTION_TYPES = void 0;
4
+ exports.createTypeScriptCfgVisitor = createTypeScriptCfgVisitor;
5
+ const cfg_builder_js_1 = require("../cfg-builder.js");
6
+ const control_flow_context_js_1 = require("../control-flow-context.js");
7
+ const typescript_harvest_js_1 = require("./typescript-harvest.js");
8
+ /** TS/JS node types that own a CFG-bearing function body. */
9
+ const TS_FUNCTION_TYPES = new Set([
10
+ 'function_declaration',
11
+ 'function_expression',
12
+ 'arrow_function',
13
+ 'method_definition',
14
+ 'generator_function_declaration',
15
+ 'generator_function',
16
+ ]);
17
+ exports.TS_FUNCTION_TYPES = TS_FUNCTION_TYPES;
18
+ /** Statement node types that break a basic block (everything else coalesces). */
19
+ const CONTROL_FLOW_TYPES = new Set([
20
+ 'if_statement',
21
+ 'while_statement',
22
+ 'do_statement',
23
+ 'for_statement',
24
+ 'for_in_statement',
25
+ 'switch_statement',
26
+ 'try_statement',
27
+ 'return_statement',
28
+ 'break_statement',
29
+ 'continue_statement',
30
+ 'throw_statement',
31
+ 'labeled_statement',
32
+ 'statement_block',
33
+ ]);
34
+ const LOOP_OR_SWITCH_TYPES = new Set([
35
+ 'while_statement',
36
+ 'do_statement',
37
+ 'for_statement',
38
+ 'for_in_statement',
39
+ 'switch_statement',
40
+ ]);
41
+ const startLineOf = (n) => n.startPosition.row + 1;
42
+ const endLineOf = (n) => n.endPosition.row + 1;
43
+ /**
44
+ * Per-function walk state. One instance is created per function so the
45
+ * {@link ControlFlowContext}, exception-handler stack, and pending label are
46
+ * scoped to that function and never leak across functions.
47
+ */
48
+ class TsCfgWalk {
49
+ builder;
50
+ harvest;
51
+ cfc = new control_flow_context_js_1.ControlFlowContext();
52
+ /** Stack of exception-handler entry blocks (catch/finally) a `throw` jumps to. */
53
+ handlers = [];
54
+ /** Labels awaiting the construct they precede (`outer: inner: for` = both). */
55
+ pendingLabels = [];
56
+ constructor(builder,
57
+ /** Def/use fact extractor (#2082 M2 U1) — phase-2 only; its scope tree is
58
+ * already complete, so any walk order resolves names correctly. */
59
+ harvest) {
60
+ this.builder = builder;
61
+ this.harvest = harvest;
62
+ }
63
+ /** Statements of a block node, ignoring comments. */
64
+ statementsOf(block) {
65
+ return block.namedChildren.filter((c) => c.type !== 'comment');
66
+ }
67
+ /** The `body` block of a node (field, or the first statement_block child). */
68
+ bodyBlockOf(node) {
69
+ return (node.childForFieldName('body') ?? node.namedChildren.find((c) => c.type === 'statement_block'));
70
+ }
71
+ /** Visit a body that may be a `statement_block` or a single statement. */
72
+ visitBody(node) {
73
+ return this.builder.withNesting(() => {
74
+ if (!node)
75
+ return null;
76
+ if (node.type === 'statement_block')
77
+ return this.visitSeq(this.statementsOf(node));
78
+ return this.visitStmt(node);
79
+ });
80
+ }
81
+ /** Wire a sequence of statements, coalescing straight-line runs into blocks. */
82
+ visitSeq(stmts) {
83
+ return this.builder.withNesting(() => {
84
+ let entry;
85
+ let dangling = [];
86
+ let openSimple;
87
+ for (const stmt of stmts) {
88
+ if (CONTROL_FLOW_TYPES.has(stmt.type)) {
89
+ openSimple = undefined; // close any open straight-line block
90
+ const res = this.visitStmt(stmt);
91
+ if (res === null)
92
+ continue; // transparent (empty nested block)
93
+ if (entry === undefined)
94
+ entry = res.entry;
95
+ else
96
+ this.builder.connect(dangling, res.entry, 'seq');
97
+ dangling = [...res.exits];
98
+ }
99
+ else {
100
+ // Simple statement — coalesce into the current straight-line block.
101
+ if (openSimple === undefined) {
102
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
103
+ if (entry === undefined)
104
+ entry = idx;
105
+ else
106
+ this.builder.connect(dangling, idx, 'seq');
107
+ openSimple = idx;
108
+ dangling = [idx];
109
+ }
110
+ else {
111
+ this.builder.extendBlock(openSimple, endLineOf(stmt), stmt.text, this.harvest.facts(stmt));
112
+ }
113
+ }
114
+ }
115
+ if (entry === undefined)
116
+ return null;
117
+ return { entry, exits: dangling };
118
+ });
119
+ }
120
+ /** Dispatch one statement to its handler. Non-null except for empty blocks. */
121
+ visitStmt(stmt) {
122
+ switch (stmt.type) {
123
+ case 'if_statement':
124
+ return this.visitIf(stmt);
125
+ case 'while_statement':
126
+ return this.visitWhile(stmt);
127
+ case 'do_statement':
128
+ return this.visitDoWhile(stmt);
129
+ case 'for_statement':
130
+ return this.visitFor(stmt);
131
+ case 'for_in_statement':
132
+ return this.visitForIn(stmt);
133
+ case 'switch_statement':
134
+ return this.visitSwitch(stmt);
135
+ case 'try_statement':
136
+ return this.visitTry(stmt);
137
+ case 'return_statement':
138
+ return this.visitReturn(stmt);
139
+ case 'throw_statement':
140
+ return this.visitThrow(stmt);
141
+ case 'break_statement':
142
+ return this.visitBreak(stmt);
143
+ case 'continue_statement':
144
+ return this.visitContinue(stmt);
145
+ case 'labeled_statement':
146
+ return this.visitLabeled(stmt);
147
+ case 'statement_block':
148
+ return this.visitSeq(this.statementsOf(stmt));
149
+ default:
150
+ return this.visitSimple(stmt);
151
+ }
152
+ }
153
+ visitSimple(stmt) {
154
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
155
+ return { entry: idx, exits: [idx] };
156
+ }
157
+ visitReturn(stmt) {
158
+ // Harvest the argument expression's uses — `return x` blocks live in this
159
+ // dedicated handler, not visitSeq, and were a silently-missed site once.
160
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
161
+ // A return crosses EVERY active finally before reaching EXIT.
162
+ (0, control_flow_context_js_1.wireJumpThroughFinalizers)(this.builder, idx, this.cfc.finalizersForReturn(), this.builder.exitIndex, 'return');
163
+ return { entry: idx, exits: [] };
164
+ }
165
+ visitThrow(stmt) {
166
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
167
+ this.builder.edge(idx, this.currentHandler(), 'throw');
168
+ return { entry: idx, exits: [] };
169
+ }
170
+ visitBreak(stmt) {
171
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text);
172
+ const res = this.cfc.resolveBreak(this.labelOf(stmt));
173
+ // An unresolved target — a label this visitor doesn't model (a stacked
174
+ // outer label like `outer: inner: for`, or a labeled non-loop block) —
175
+ // would otherwise leave this block with NO out-edge, stranding it and
176
+ // breaking the single-exit invariant a downstream post-dominator / PDG pass
177
+ // relies on. Conservatively route an unresolved jump to the function EXIT
178
+ // ("escapes the function") and thread ALL active finallys — a superset of
179
+ // the truly-crossed set (the real target is somewhere in the function, so
180
+ // execution provably runs every finally between the jump and wherever it
181
+ // lands... up to the ones the conservative EXIT routing over-includes).
182
+ // Sound for dataflow either way: extra paths, never a bypassed finally.
183
+ const { target, finalizers } = res ?? {
184
+ target: this.builder.exitIndex,
185
+ finalizers: this.cfc.finalizersForReturn(),
186
+ };
187
+ (0, control_flow_context_js_1.wireJumpThroughFinalizers)(this.builder, idx, finalizers, target, 'break');
188
+ return { entry: idx, exits: [] };
189
+ }
190
+ visitContinue(stmt) {
191
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text);
192
+ const res = this.cfc.resolveContinue(this.labelOf(stmt));
193
+ // See visitBreak: an unresolved label routes to EXIT (threading all
194
+ // active finallys) to preserve single-exit without bypassing a finally.
195
+ const { target, finalizers } = res ?? {
196
+ target: this.builder.exitIndex,
197
+ finalizers: this.cfc.finalizersForReturn(),
198
+ };
199
+ (0, control_flow_context_js_1.wireJumpThroughFinalizers)(this.builder, idx, finalizers, target, 'continue');
200
+ return { entry: idx, exits: [] };
201
+ }
202
+ visitLabeled(stmt) {
203
+ const body = stmt.childForFieldName('body') ?? stmt.namedChildren[stmt.namedChildren.length - 1];
204
+ const label = this.labelOf(stmt);
205
+ if (body && (LOOP_OR_SWITCH_TYPES.has(body.type) || body.type === 'labeled_statement')) {
206
+ // Loop/switch consumes the accumulated labels via takeLabels(); a nested
207
+ // labeled_statement keeps accumulating (`outer: inner: for` → both
208
+ // labels land on the loop frame).
209
+ if (label)
210
+ this.pendingLabels.push(label);
211
+ const res = this.visitStmt(body);
212
+ this.pendingLabels = []; // clear leftovers if the construct didn't consume
213
+ return res;
214
+ }
215
+ // Labeled NON-loop statement (`blk: { … break blk; … }`): break-to-label
216
+ // targets a synthesized join after the body. Routing it to EXIT instead
217
+ // (the M1 behavior) removed the real continuation and falsely killed
218
+ // every def live at the jump for post-construct uses (tri-review P1).
219
+ const labels = [...this.pendingLabels, ...(label ? [label] : [])];
220
+ this.pendingLabels = [];
221
+ const join = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
222
+ this.cfc.pushLabeledBlock(join, labels);
223
+ const res = this.visitBody(body);
224
+ this.cfc.pop();
225
+ if (res)
226
+ this.builder.connect(res.exits, join, 'seq');
227
+ return { entry: res?.entry ?? join, exits: [join] };
228
+ }
229
+ visitIf(stmt) {
230
+ const cond = stmt.childForFieldName('condition') ?? stmt;
231
+ const condBlock = this.builder.newBlock(startLineOf(stmt), endLineOf(cond), cond.text, 'normal', this.harvest.facts(cond));
232
+ const exits = [];
233
+ const thenRes = this.visitBody(stmt.childForFieldName('consequence'));
234
+ if (thenRes) {
235
+ this.builder.edge(condBlock, thenRes.entry, 'cond-true');
236
+ exits.push(...thenRes.exits);
237
+ }
238
+ else {
239
+ exits.push(condBlock); // empty then — true path falls through
240
+ }
241
+ const elseNode = this.elseBodyOf(stmt);
242
+ if (elseNode) {
243
+ const elseRes = this.visitBody(elseNode);
244
+ if (elseRes) {
245
+ this.builder.edge(condBlock, elseRes.entry, 'cond-false');
246
+ exits.push(...elseRes.exits);
247
+ }
248
+ else {
249
+ exits.push(condBlock); // empty else block
250
+ }
251
+ }
252
+ else {
253
+ exits.push(condBlock); // no else — false path falls through to the join
254
+ }
255
+ return { entry: condBlock, exits: [...new Set(exits)] };
256
+ }
257
+ /** The else body node (unwraps an `else_clause` wrapper if present). */
258
+ elseBodyOf(ifStmt) {
259
+ const alt = ifStmt.childForFieldName('alternative');
260
+ if (!alt)
261
+ return undefined;
262
+ if (alt.type === 'else_clause') {
263
+ return alt.childForFieldName('body') ?? alt.namedChildren[0];
264
+ }
265
+ return alt;
266
+ }
267
+ visitWhile(stmt) {
268
+ const labels = this.takeLabels();
269
+ const cond = stmt.childForFieldName('condition') ?? stmt;
270
+ const header = this.builder.newBlock(startLineOf(stmt), endLineOf(cond), cond.text, 'normal', this.harvest.facts(cond));
271
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
272
+ this.cfc.pushLoop(header, loopExit, labels);
273
+ const body = this.visitBody(this.bodyBlockOf(stmt));
274
+ this.cfc.pop();
275
+ if (body) {
276
+ this.builder.edge(header, body.entry, 'cond-true');
277
+ this.builder.connect(body.exits, header, 'loop-back');
278
+ }
279
+ else {
280
+ this.builder.edge(header, header, 'loop-back'); // empty body re-tests
281
+ }
282
+ this.builder.edge(header, loopExit, 'cond-false');
283
+ return { entry: header, exits: [loopExit] };
284
+ }
285
+ visitDoWhile(stmt) {
286
+ const labels = this.takeLabels();
287
+ const cond = stmt.childForFieldName('condition') ?? stmt;
288
+ const condBlock = this.builder.newBlock(startLineOf(cond), endLineOf(cond), cond.text, 'normal', this.harvest.facts(cond));
289
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
290
+ this.cfc.pushLoop(condBlock, loopExit, labels);
291
+ const body = this.visitBody(this.bodyBlockOf(stmt));
292
+ this.cfc.pop();
293
+ const backTarget = body ? body.entry : condBlock;
294
+ if (body)
295
+ this.builder.connect(body.exits, condBlock, 'seq');
296
+ this.builder.edge(condBlock, backTarget, 'loop-back'); // cond true → run body again
297
+ this.builder.edge(condBlock, loopExit, 'cond-false');
298
+ return { entry: backTarget, exits: [loopExit] };
299
+ }
300
+ visitFor(stmt) {
301
+ const labels = this.takeLabels();
302
+ const init = stmt.childForFieldName('initializer');
303
+ const cond = stmt.childForFieldName('condition');
304
+ const incr = stmt.childForFieldName('increment');
305
+ const header = this.builder.newBlock(startLineOf(stmt), cond ? endLineOf(cond) : startLineOf(stmt), cond ? cond.text : 'for(;;)', 'normal', cond ? this.harvest.facts(cond) : undefined);
306
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
307
+ let incrBlock = header;
308
+ if (incr) {
309
+ incrBlock = this.builder.newBlock(startLineOf(incr), endLineOf(incr), incr.text, 'normal', this.harvest.facts(incr));
310
+ this.builder.edge(incrBlock, header, 'loop-back');
311
+ }
312
+ this.cfc.pushLoop(incrBlock, loopExit, labels);
313
+ const body = this.visitBody(this.bodyBlockOf(stmt));
314
+ this.cfc.pop();
315
+ if (body) {
316
+ this.builder.edge(header, body.entry, 'cond-true');
317
+ // With no increment clause the body's exits ARE the back-edge — carry
318
+ // the loop-back kind on them (mirroring visitWhile/visitForIn) instead
319
+ // of a phantom header→header self-loop that models a path which never
320
+ // executes the body. With an increment, the body falls through to the
321
+ // increment (`seq`) and the increment carries the loop-back (:338).
322
+ this.builder.connect(body.exits, incrBlock, incr ? 'seq' : 'loop-back');
323
+ }
324
+ else {
325
+ this.builder.edge(header, incrBlock, 'cond-true');
326
+ // Empty body with no increment: the header genuinely re-tests itself.
327
+ if (!incr)
328
+ this.builder.edge(header, header, 'loop-back');
329
+ }
330
+ this.builder.edge(header, loopExit, 'cond-false');
331
+ let entry = header;
332
+ if (init) {
333
+ const initBlock = this.builder.newBlock(startLineOf(init), endLineOf(init), init.text, 'normal', this.harvest.facts(init));
334
+ this.builder.edge(initBlock, header, 'seq');
335
+ entry = initBlock;
336
+ }
337
+ return { entry, exits: [loopExit] };
338
+ }
339
+ visitForIn(stmt) {
340
+ const labels = this.takeLabels();
341
+ // Header text is SYNTHESIZED, so facts come from the left/right AST nodes
342
+ // directly (the loop variable is a def, the iterated expression a use).
343
+ const header = this.builder.newBlock(startLineOf(stmt), startLineOf(stmt), this.forInHeaderText(stmt), 'normal', this.harvest.forInHeadFacts(stmt));
344
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
345
+ this.cfc.pushLoop(header, loopExit, labels);
346
+ const body = this.visitBody(this.bodyBlockOf(stmt));
347
+ this.cfc.pop();
348
+ if (body) {
349
+ this.builder.edge(header, body.entry, 'cond-true');
350
+ this.builder.connect(body.exits, header, 'loop-back');
351
+ }
352
+ else {
353
+ this.builder.edge(header, header, 'loop-back');
354
+ }
355
+ this.builder.edge(header, loopExit, 'cond-false');
356
+ return { entry: header, exits: [loopExit] };
357
+ }
358
+ forInHeaderText(stmt) {
359
+ const left = stmt.childForFieldName('left')?.text ?? '';
360
+ const right = stmt.childForFieldName('right')?.text ?? '';
361
+ return left || right ? `for(${left} … ${right})` : 'for(… in/of …)';
362
+ }
363
+ visitSwitch(stmt) {
364
+ const labels = this.takeLabels();
365
+ const value = stmt.childForFieldName('value') ?? stmt;
366
+ const dispatch = this.builder.newBlock(startLineOf(stmt), endLineOf(value), value.text, 'normal', this.harvest.facts(value));
367
+ const switchExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
368
+ this.cfc.pushSwitch(switchExit, labels);
369
+ const body = stmt.childForFieldName('body');
370
+ const cases = body
371
+ ? body.namedChildren.filter((c) => c.type === 'switch_case' || c.type === 'switch_default')
372
+ : [];
373
+ // `case x:` test expressions live in no block (caseStatements filters the
374
+ // value node out) — harvest their uses onto the dispatch block, one record
375
+ // per case in source order (a sound over-approximation of JS's in-order
376
+ // case evaluation). Conditionally: a later case test only evaluates when
377
+ // earlier cases didn't match, so any def inside one is a may-def — as a
378
+ // must-def on the always-executed dispatch block it would falsely kill
379
+ // prior defs for earlier-matching arms (tri-review).
380
+ for (const c of cases) {
381
+ const caseValue = c.childForFieldName('value');
382
+ if (caseValue)
383
+ this.builder.attachFacts(dispatch, this.harvest.factsConditional(caseValue));
384
+ }
385
+ const caseResults = cases.map((c) => this.visitSeq(this.caseStatements(c)));
386
+ const hasDefault = cases.some((c) => c.type === 'switch_default');
387
+ // entryOf[i] = block a dispatch/fallthrough INTO case i lands on (empty
388
+ // cases are transparent — they resolve to the next case, or the exit).
389
+ const entryOf = new Array(cases.length);
390
+ let after = switchExit;
391
+ for (let i = cases.length - 1; i >= 0; i--) {
392
+ entryOf[i] = caseResults[i]?.entry ?? after;
393
+ after = entryOf[i];
394
+ }
395
+ for (let i = 0; i < cases.length; i++) {
396
+ this.builder.edge(dispatch, entryOf[i], 'switch-case');
397
+ }
398
+ if (!hasDefault)
399
+ this.builder.edge(dispatch, switchExit, 'switch-case'); // no-match path
400
+ for (let i = 0; i < cases.length; i++) {
401
+ const res = caseResults[i];
402
+ if (!res)
403
+ continue;
404
+ const fallTarget = i + 1 < cases.length ? entryOf[i + 1] : switchExit;
405
+ this.builder.connect(res.exits, fallTarget, 'fallthrough');
406
+ }
407
+ this.cfc.pop();
408
+ return { entry: dispatch, exits: [switchExit] };
409
+ }
410
+ caseStatements(caseNode) {
411
+ const value = caseNode.childForFieldName('value');
412
+ return caseNode.namedChildren.filter((c) => c.id !== value?.id && c.type !== 'comment');
413
+ }
414
+ visitTry(stmt) {
415
+ const bodyNode = stmt.childForFieldName('body');
416
+ // Single pass over named children — tree-sitter's `namedChildren` getter
417
+ // allocates a fresh array on every access, so avoid the double `.find`.
418
+ let catchClause;
419
+ let finallyClause;
420
+ for (let i = 0; i < stmt.namedChildCount; i++) {
421
+ const c = stmt.namedChild(i);
422
+ if (c?.type === 'catch_clause')
423
+ catchClause = c;
424
+ else if (c?.type === 'finally_clause')
425
+ finallyClause = c;
426
+ }
427
+ // Build finally first so its entry is known as both a normal join and a
428
+ // handler target. The finally body runs in the OUTER handler context — and
429
+ // OUTSIDE this try's finalizer frame: a return inside the finally must not
430
+ // thread itself (it threads only outer finallys, matching JS semantics).
431
+ const finallyRes = finallyClause
432
+ ? this.visitSeq(this.statementsOf(this.bodyBlockOf(finallyClause)))
433
+ : null;
434
+ // Finalizer frame for early-exit threading (#2082 M2 U2): active while the
435
+ // catch and protected bodies are walked, so a crossing `return`/`break`/
436
+ // `continue` inside either routes through the finally. An empty/comment-only
437
+ // finally (`finallyRes` null — the #2099-F2 empty-catch bug shape) pushes
438
+ // NO frame: it can define nothing, so jumps soundly keep direct edges.
439
+ const finFrame = finallyRes ? this.cfc.pushFinalizer(finallyRes.entry) : null;
440
+ // A throw inside catch propagates to finally (if any), else the outer handler.
441
+ let catchRes = null;
442
+ if (catchClause) {
443
+ if (finallyRes)
444
+ this.handlers.push(finallyRes.entry);
445
+ catchRes = this.visitSeq(this.statementsOf(this.bodyBlockOf(catchClause)));
446
+ if (finallyRes)
447
+ this.handlers.pop();
448
+ if (catchRes === null) {
449
+ // Empty (or comment-only) catch body — `catch {}`. The clause still
450
+ // CATCHES: handler semantics key off the syntactic clause, not the
451
+ // traversal result. Treating it as "no catch" sent the swallowed
452
+ // exception to the outer handler/EXIT and left post-try code
453
+ // unreachable when the body always throws — a hard false-negative
454
+ // for downstream taint. Synthesize one empty block spanning the
455
+ // clause (entry == sole exit) so exception flow lands in it and
456
+ // rejoins the normal continuation. Created BEFORE the protected
457
+ // region is walked, so it never receives a spurious throw edge.
458
+ const idx = this.builder.newBlock(startLineOf(catchClause), endLineOf(catchClause), '');
459
+ catchRes = { entry: idx, exits: [idx] };
460
+ }
461
+ // `catch (e)` has no header block — the param def gets its OWN
462
+ // facts-only block in front of the body entry. It must NOT be prepended
463
+ // into the body's entry block: when the catch body STARTS with a loop,
464
+ // that entry is the loop HEADER, re-entered on every iteration — the
465
+ // param def would re-gen there and falsely KILL loop-carried
466
+ // redefinitions of the param (`catch (e) { while (c) { e = fix(e); }
467
+ // sink(e); }` would lose the fix→sink fact, a taint false negative).
468
+ // The param block becomes the handler entry, which is also semantically
469
+ // right: the binding happens exactly once, on handler entry.
470
+ const paramFacts = this.harvest.catchParamFacts(catchClause);
471
+ if (paramFacts) {
472
+ const paramBlock = this.builder.newBlock(startLineOf(catchClause), startLineOf(catchClause), '', 'normal', paramFacts);
473
+ this.builder.edge(paramBlock, catchRes.entry, 'seq');
474
+ catchRes = { entry: paramBlock, exits: catchRes.exits };
475
+ }
476
+ }
477
+ // Handler for the try body: catch if present, else finally, else outer.
478
+ const tryHandler = catchRes?.entry ?? finallyRes?.entry ?? this.currentHandler();
479
+ const protectedStart = this.builder.blockCount;
480
+ this.handlers.push(tryHandler);
481
+ const bodyRes = bodyNode ? this.visitSeq(this.statementsOf(bodyNode)) : null;
482
+ this.handlers.pop();
483
+ // Conservative exceptional edges: ANY block in the protected region may raise
484
+ // to the handler — not just an explicit `throw`, and not just the body ENTRY.
485
+ // Edging every block created during the try-body walk keeps exception flow
486
+ // sound when the body BRANCHES: an `if` / nested-try / post-branch block whose
487
+ // interior blocks would otherwise have no path to the handler — i.e. a taint
488
+ // false-negative into `catch` for the downstream PDG analysis. The
489
+ // per-function edge cap bounds the count; explicit `throw`s add their own
490
+ // (idempotent) edge to the same handler.
491
+ if (catchClause || finallyClause) {
492
+ for (let b = protectedStart; b < this.builder.blockCount; b++) {
493
+ this.builder.edge(b, tryHandler, 'throw');
494
+ }
495
+ }
496
+ // The finalizer frame closes once the protected/catch walks are done; any
497
+ // jumps that crossed it left their completion legs on `pending`, wired
498
+ // here from the finally's exits (see drainFinalizerPending for the
499
+ // finally-override semantics of an always-jumping finally).
500
+ if (finFrame && finallyRes) {
501
+ this.cfc.pop();
502
+ (0, control_flow_context_js_1.drainFinalizerPending)(this.builder, finFrame, finallyRes.exits);
503
+ }
504
+ const exits = [];
505
+ if (finallyRes) {
506
+ // Normal completion of try AND catch both flow through finally.
507
+ if (bodyRes)
508
+ this.builder.connect(bodyRes.exits, finallyRes.entry, 'seq');
509
+ if (catchRes)
510
+ this.builder.connect(catchRes.exits, finallyRes.entry, 'seq');
511
+ exits.push(...finallyRes.exits);
512
+ // No catch → an exception re-propagates out after finally runs.
513
+ if (!catchRes)
514
+ this.builder.connect(finallyRes.exits, this.currentHandler(), 'throw');
515
+ }
516
+ else {
517
+ if (bodyRes)
518
+ exits.push(...bodyRes.exits);
519
+ if (catchRes)
520
+ exits.push(...catchRes.exits);
521
+ }
522
+ const entry = bodyRes?.entry ?? finallyRes?.entry ?? catchRes?.entry;
523
+ if (entry === undefined)
524
+ return null;
525
+ return { entry, exits: [...new Set(exits)] };
526
+ }
527
+ /** Nearest enclosing exception handler, or the function EXIT. */
528
+ currentHandler() {
529
+ return this.handlers.length ? this.handlers[this.handlers.length - 1] : this.builder.exitIndex;
530
+ }
531
+ /** Consume the labels awaiting the loop/switch this call is building. */
532
+ takeLabels() {
533
+ const labels = this.pendingLabels;
534
+ this.pendingLabels = [];
535
+ return labels;
536
+ }
537
+ labelOf(stmt) {
538
+ const id = stmt.childForFieldName('label') ??
539
+ stmt.namedChildren.find((c) => c.type === 'statement_identifier');
540
+ return id?.text;
541
+ }
542
+ }
543
+ /** Build the CFG for one TS/JS function node (or `undefined` if not a function). */
544
+ function buildFunctionCfg(fnNode, filePath) {
545
+ if (!TS_FUNCTION_TYPES.has(fnNode.type))
546
+ return undefined;
547
+ const startLine = startLineOf(fnNode);
548
+ const endLine = endLineOf(fnNode);
549
+ const startColumn = fnNode.startPosition.column;
550
+ const builder = new cfg_builder_js_1.CfgBuilder(filePath, startLine, endLine, startColumn);
551
+ const body = fnNode.childForFieldName('body');
552
+ if (!body)
553
+ return undefined; // overload signature / abstract method — no body
554
+ // Phase-1 declaration pre-scan (#2082 M2 U1) — must complete before any
555
+ // facts are extracted; the CFG walk below is not source-order.
556
+ const harvest = new typescript_harvest_js_1.TsHarvester(fnNode);
557
+ // Parameters define at ENTRY (facts only — never touch the entry block's
558
+ // text or span: bench fingerprints and CFG snapshots include block text).
559
+ const paramFacts = harvest.paramFacts();
560
+ if (paramFacts)
561
+ builder.attachFacts(builder.entryIndex, paramFacts);
562
+ if (body.type !== 'statement_block') {
563
+ // Expression-bodied arrow: `() => expr` — one block whose value is returned.
564
+ // Lives outside the walk class, so it harvests explicitly.
565
+ const blk = builder.newBlock(startLineOf(body), endLineOf(body), body.text, 'normal', harvest.facts(body));
566
+ builder.edge(builder.entryIndex, blk, 'seq');
567
+ builder.edge(blk, builder.exitIndex, 'return');
568
+ return builder.finish(harvest.table());
569
+ }
570
+ const walk = new TsCfgWalk(builder, harvest);
571
+ const res = walk.visitSeq(body.namedChildren.filter((c) => c.type !== 'comment'));
572
+ if (!res) {
573
+ builder.edge(builder.entryIndex, builder.exitIndex, 'seq'); // empty body
574
+ return builder.finish(harvest.table());
575
+ }
576
+ builder.edge(builder.entryIndex, res.entry, 'seq');
577
+ builder.connect(res.exits, builder.exitIndex, 'seq'); // normal fall-off → EXIT
578
+ return builder.finish(harvest.table());
579
+ }
580
+ /** Whether a node is a TS/JS function this visitor builds a CFG for. */
581
+ function isFunction(node) {
582
+ return TS_FUNCTION_TYPES.has(node.type);
583
+ }
584
+ /** The TS/JS CFG visitor (shared by TypeScript and JavaScript). */
585
+ function createTypeScriptCfgVisitor() {
586
+ return { buildFunctionCfg, isFunction };
587
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ // cgraph/src/core/ingestion/class-extractors/configs/c-cpp.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.cppClassConfig = exports.cClassConfig = void 0;
5
+ const index_js_1 = require("../../../../../shared/index.js");
6
+ const template_arguments_js_1 = require("../../utils/template-arguments.js");
7
+ function shouldSkipCppTemplateDuplicateCapture(captureMap, definitionName, capturedName) {
8
+ if (captureMap['template-arguments'] !== undefined)
9
+ return false;
10
+ if (!definitionName)
11
+ return false;
12
+ const argsFromDefinitionName = (0, template_arguments_js_1.extractTemplateArguments)(definitionName);
13
+ if (argsFromDefinitionName === undefined)
14
+ return false;
15
+ const argsFromCaptureName = capturedName ? (0, template_arguments_js_1.extractTemplateArguments)(capturedName) : undefined;
16
+ // Generic class capture emits only `List`, while the specialization-aware
17
+ // capture emits `List` + `@declaration.template-arguments`. Skip the former
18
+ // when the declaration name itself is templated to avoid duplicate class defs.
19
+ return argsFromCaptureName === undefined;
20
+ }
21
+ function extractCppTemplateArgumentsWithFallback(captureMap, definitionName, capturedName) {
22
+ return ((captureMap['template-arguments']
23
+ ? (0, template_arguments_js_1.extractTemplateArguments)(captureMap['template-arguments'].text)
24
+ : undefined) ??
25
+ (definitionName ? (0, template_arguments_js_1.extractTemplateArguments)(definitionName) : undefined) ??
26
+ (capturedName ? (0, template_arguments_js_1.extractTemplateArguments)(capturedName) : undefined));
27
+ }
28
+ exports.cClassConfig = {
29
+ language: index_js_1.SupportedLanguages.C,
30
+ typeDeclarationNodes: ['struct_specifier', 'enum_specifier'],
31
+ };
32
+ exports.cppClassConfig = {
33
+ language: index_js_1.SupportedLanguages.CPlusPlus,
34
+ typeDeclarationNodes: ['class_specifier', 'struct_specifier', 'enum_specifier'],
35
+ // #1995: `union_specifier` is included so a type nested in a NAMED union
36
+ // (`union U1 { struct Inner {...} }`) qualifies as `U1.Inner`. Anonymous unions
37
+ // have no `name` child → extractScopeSegmentsFromNode returns [] → they correctly
38
+ // contribute nothing (members inject into the enclosing scope). C uses the
39
+ // separate cClassConfig (no qualifiedNodeId), so it is intentionally untouched.
40
+ ancestorScopeNodeTypes: [
41
+ 'namespace_definition',
42
+ 'class_specifier',
43
+ 'struct_specifier',
44
+ 'union_specifier',
45
+ ],
46
+ // #1978: key nested-type nodes by their fully-qualified path (Outer.Inner) so
47
+ // same-tail nested types in one TU stay distinct instead of silently merging.
48
+ qualifiedNodeId: true,
49
+ // #1995: anonymous namespaces have no `name` child, so the generic scope walker
50
+ // drops them (empty segment) and two `namespace { struct Inner {} }` blocks in one
51
+ // TU collapse onto a single `Inner` node. Give each anonymous namespace_definition
52
+ // a deterministic per-block discriminator (its start byte — stable across the
53
+ // sequential and worker full-file parses) so the nested types stay distinct.
54
+ // Returning `undefined` for every other scope — named namespaces (incl. `inline
55
+ // namespace`), classes, structs, named unions — falls through to the default
56
+ // name-based extraction, leaving them unchanged. Anonymous UNIONS are not matched
57
+ // here (members inject into the enclosing scope), so they keep yielding [].
58
+ extractScopeSegments: (node) => node.type === 'namespace_definition' && !node.childForFieldName?.('name')
59
+ ? [`@anon${node.startIndex}`]
60
+ : undefined,
61
+ extractName: (node) => {
62
+ const nameNode = node.childForFieldName?.('name');
63
+ if (!nameNode)
64
+ return undefined;
65
+ if (nameNode.type !== 'template_type')
66
+ return undefined;
67
+ return (0, template_arguments_js_1.stripTemplateArguments)(nameNode.text);
68
+ },
69
+ extractTemplateArguments: (node) => {
70
+ const nameNode = node.childForFieldName?.('name');
71
+ if (!nameNode || nameNode.type !== 'template_type')
72
+ return undefined;
73
+ return (0, template_arguments_js_1.extractTemplateArguments)(nameNode.text);
74
+ },
75
+ shouldSkipClassCapture: ({ captureMap, definitionNode, nameNode }) => shouldSkipCppTemplateDuplicateCapture(captureMap, definitionNode?.childForFieldName?.('name')?.text, nameNode?.text),
76
+ extractTemplateArgumentsFromCapture: ({ captureMap, definitionNode, nameNode }) => extractCppTemplateArgumentsWithFallback(captureMap, definitionNode?.childForFieldName?.('name')?.text, nameNode?.text),
77
+ };