cgraphx 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,562 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RUST_FUNCTION_TYPES = void 0;
4
+ exports.createRustCfgVisitor = createRustCfgVisitor;
5
+ const cfg_builder_js_1 = require("../cfg-builder.js");
6
+ const control_flow_context_js_1 = require("../control-flow-context.js");
7
+ const rust_harvest_js_1 = require("./rust-harvest.js");
8
+ /** Rust node types that own a CFG-bearing function body. */
9
+ const RUST_FUNCTION_TYPES = new Set(['function_item', 'closure_expression']);
10
+ exports.RUST_FUNCTION_TYPES = RUST_FUNCTION_TYPES;
11
+ /**
12
+ * Expression / statement node types that break a basic block (everything else
13
+ * coalesces). `expression_statement` is the `<expr>;` wrapper; the control-flow
14
+ * EXPRESSIONS inside it are unwrapped by {@link visitStmt}.
15
+ */
16
+ const CONTROL_FLOW_TYPES = new Set([
17
+ 'expression_statement',
18
+ 'if_expression',
19
+ 'loop_expression',
20
+ 'while_expression',
21
+ 'for_expression',
22
+ 'match_expression',
23
+ 'return_expression',
24
+ 'break_expression',
25
+ 'continue_expression',
26
+ 'block',
27
+ ]);
28
+ /** Expression node types that the statement walker treats as control-flow. */
29
+ const CONTROL_FLOW_EXPR_TYPES = new Set([
30
+ 'if_expression',
31
+ 'loop_expression',
32
+ 'while_expression',
33
+ 'for_expression',
34
+ 'match_expression',
35
+ 'return_expression',
36
+ 'break_expression',
37
+ 'continue_expression',
38
+ 'block',
39
+ ]);
40
+ /** Node types whose subtrees are opaque (a nested function owns its own CFG). */
41
+ const NESTED_FUNCTION_TYPES = new Set(['function_item', 'closure_expression']);
42
+ /** Rust comment node types — line (`//`) and block (slash-star) comments. */
43
+ const COMMENT_TYPES = new Set(['line_comment', 'block_comment']);
44
+ const isNotComment = (n) => !COMMENT_TYPES.has(n.type);
45
+ const startLineOf = (n) => n.startPosition.row + 1;
46
+ const endLineOf = (n) => n.endPosition.row + 1;
47
+ /**
48
+ * Per-function Rust walk state. One instance per function so the
49
+ * {@link ControlFlowContext} and label tables are scoped to that function and
50
+ * never leak across functions.
51
+ */
52
+ class RustCfgWalk {
53
+ builder;
54
+ harvest;
55
+ cfc = new control_flow_context_js_1.ControlFlowContext();
56
+ constructor(builder, harvest) {
57
+ this.builder = builder;
58
+ this.harvest = harvest;
59
+ }
60
+ /** Statements of a `block`, ignoring comments. */
61
+ statementsOf(block) {
62
+ return block.namedChildren.filter(isNotComment);
63
+ }
64
+ /** The `body` of a node (a `block`, or a bare expression for a closure / arm). */
65
+ bodyOf(node) {
66
+ return node.childForFieldName('body') ?? undefined;
67
+ }
68
+ /** Visit a body that may be a `block` or a single expression. */
69
+ visitBody(node) {
70
+ return this.builder.withNesting(() => {
71
+ if (!node)
72
+ return null;
73
+ if (node.type === 'block')
74
+ return this.visitSeq(this.statementsOf(node));
75
+ return this.visitStmt(node);
76
+ });
77
+ }
78
+ /** Wire a sequence of statements, coalescing straight-line runs into blocks. */
79
+ visitSeq(stmts) {
80
+ return this.builder.withNesting(() => {
81
+ let entry;
82
+ let dangling = [];
83
+ let openSimple;
84
+ for (const stmt of stmts) {
85
+ if (this.isControlFlow(stmt)) {
86
+ openSimple = undefined; // close any open straight-line block
87
+ const res = this.visitStmt(stmt);
88
+ if (res === null)
89
+ continue; // transparent (empty nested block)
90
+ if (entry === undefined)
91
+ entry = res.entry;
92
+ else
93
+ this.builder.connect(dangling, res.entry, 'seq');
94
+ dangling = [...res.exits];
95
+ }
96
+ else {
97
+ const idx = openSimple === undefined ? this.openBlock(stmt) : this.extendOpen(openSimple, stmt);
98
+ if (openSimple === undefined) {
99
+ if (entry === undefined)
100
+ entry = idx;
101
+ else
102
+ this.builder.connect(dangling, idx, 'seq');
103
+ dangling = [idx];
104
+ }
105
+ openSimple = idx;
106
+ // A straight-line statement that contains a `?` early-returns to EXIT.
107
+ this.wireTryExits(stmt, idx);
108
+ }
109
+ }
110
+ if (entry === undefined)
111
+ return null;
112
+ return { entry, exits: dangling };
113
+ });
114
+ }
115
+ openBlock(stmt) {
116
+ return this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
117
+ }
118
+ extendOpen(open, stmt) {
119
+ this.builder.extendBlock(open, endLineOf(stmt), stmt.text, this.harvest.facts(stmt));
120
+ return open;
121
+ }
122
+ /** Whether a statement node breaks the current straight-line block. */
123
+ isControlFlow(stmt) {
124
+ if (stmt.type === 'expression_statement') {
125
+ const inner = this.exprStmtInner(stmt);
126
+ return inner ? CONTROL_FLOW_EXPR_TYPES.has(inner.type) : false;
127
+ }
128
+ if (stmt.type === 'let_declaration') {
129
+ // `let v = loop {…}` / `let w = if c {…} else {…}` / `let PAT = e else {…}`
130
+ // — the value is a control-flow EXPRESSION, or the let-else alternative
131
+ // block is divergent; either way the let must be modeled structurally.
132
+ const value = stmt.childForFieldName('value');
133
+ const alt = stmt.childForFieldName('alternative');
134
+ return (value !== null && CONTROL_FLOW_EXPR_TYPES.has(value.type)) || alt !== null;
135
+ }
136
+ return CONTROL_FLOW_TYPES.has(stmt.type);
137
+ }
138
+ /** The inner expression of an `expression_statement` (`if x {…};`). */
139
+ exprStmtInner(stmt) {
140
+ return stmt.namedChildren.find(isNotComment);
141
+ }
142
+ /** Dispatch one statement to its handler. Non-null except for empty blocks. */
143
+ visitStmt(stmt) {
144
+ // Unwrap an `expression_statement` to its control-flow expression.
145
+ if (stmt.type === 'expression_statement') {
146
+ const inner = this.exprStmtInner(stmt);
147
+ if (inner && CONTROL_FLOW_EXPR_TYPES.has(inner.type))
148
+ return this.visitStmt(inner);
149
+ return this.visitSimple(stmt);
150
+ }
151
+ if (stmt.type === 'let_declaration')
152
+ return this.visitLet(stmt);
153
+ switch (stmt.type) {
154
+ case 'if_expression':
155
+ return this.visitIf(stmt);
156
+ case 'loop_expression':
157
+ return this.visitLoop(stmt);
158
+ case 'while_expression':
159
+ return this.visitWhile(stmt);
160
+ case 'for_expression':
161
+ return this.visitFor(stmt);
162
+ case 'match_expression':
163
+ return this.visitMatch(stmt);
164
+ case 'return_expression':
165
+ return this.visitReturn(stmt);
166
+ case 'break_expression':
167
+ return this.visitBreak(stmt);
168
+ case 'continue_expression':
169
+ return this.visitContinue(stmt);
170
+ case 'block':
171
+ return this.visitSeq(this.statementsOf(stmt));
172
+ default:
173
+ return this.visitSimple(stmt);
174
+ }
175
+ }
176
+ visitSimple(stmt) {
177
+ const idx = this.openBlock(stmt);
178
+ this.wireTryExits(stmt, idx);
179
+ return { entry: idx, exits: [idx] };
180
+ }
181
+ /**
182
+ * `let PAT = VALUE [else { ALT }]` whose VALUE is a control-flow expression
183
+ * (`let v = loop {…}`, `let w = if c {…} else {…}`, `let m = match …`) or which
184
+ * has a divergent let-else ALT block. A plain `let x = e;` never reaches here
185
+ * (it coalesces into a straight-line block in {@link visitSeq}).
186
+ *
187
+ * The value's control-flow construct is visited as a sub-CFG; the let-pattern's
188
+ * bindings are defs that happen on the value's NORMAL completion — attached to a
189
+ * facts-only continuation block the value's exits feed. For a `let … else`, the
190
+ * ALT block runs on the refutable-failure path and (per Rust's rules) MUST
191
+ * diverge (return/break/continue/panic); it is visited as control flow, so its
192
+ * own jumps wire directly to their targets and it contributes no normal exit.
193
+ */
194
+ visitLet(stmt) {
195
+ const value = stmt.childForFieldName('value');
196
+ const alt = stmt.childForFieldName('alternative');
197
+ const cfValue = value !== null && CONTROL_FLOW_EXPR_TYPES.has(value.type);
198
+ let entry;
199
+ let normalExits;
200
+ if (cfValue && value) {
201
+ // `let v = loop {…}` — the value is a control-flow construct: visit it, then
202
+ // attach ONLY the pattern's binding defs to a facts-only continuation (the
203
+ // value's uses are already harvested onto its own blocks).
204
+ const valueRes = this.visitStmt(value);
205
+ const cont = this.builder.newBlock(startLineOf(stmt), startLineOf(stmt), '', 'normal', this.harvest.letPatternFacts(stmt));
206
+ this.builder.connect(valueRes?.exits ?? [], cont, 'seq');
207
+ entry = valueRes ? valueRes.entry : cont;
208
+ normalExits = [cont];
209
+ }
210
+ else {
211
+ // A simple-value `let PAT = e [else {…}]` — ONE block with the whole let's
212
+ // facts (value uses + pattern defs). It reaches here only via the let-else
213
+ // alternative (a plain `let x = e;` coalesces in visitSeq).
214
+ const idx = this.openBlock(stmt);
215
+ this.wireTryExits(stmt, idx);
216
+ entry = idx;
217
+ normalExits = [idx];
218
+ }
219
+ // `let … else { … }` — the else block runs on the binding-FAILURE path and
220
+ // (per Rust) MUST diverge (return/break/continue/panic); visit it as control
221
+ // flow so its jumps wire themselves to their targets. It is NOT on the normal
222
+ // continuation — branched from the binding site with a `cond-false` (refute)
223
+ // edge.
224
+ if (alt) {
225
+ const altRes = this.visitBody(alt);
226
+ if (altRes)
227
+ this.builder.connect(normalExits, altRes.entry, 'cond-false');
228
+ }
229
+ return { entry, exits: normalExits };
230
+ }
231
+ /**
232
+ * Emit a `throw` (early-return) edge to EXIT for every `?` operator inside a
233
+ * straight-line statement's subtree (excluding nested function bodies). The
234
+ * `?` desugars to "return Err(...) early"; modeling it as a throw-like edge to
235
+ * EXIT keeps the early-exit path represented while the Ok path falls through
236
+ * normally. Deduped by the builder, so repeated `?` in a block emit one edge.
237
+ */
238
+ wireTryExits(stmt, fromBlock) {
239
+ if (this.containsTry(stmt))
240
+ this.builder.edge(fromBlock, this.builder.exitIndex, 'throw');
241
+ }
242
+ containsTry(node) {
243
+ if (node.type === 'try_expression')
244
+ return true;
245
+ if (NESTED_FUNCTION_TYPES.has(node.type))
246
+ return false; // opaque
247
+ for (let i = 0; i < node.namedChildCount; i++) {
248
+ const c = node.namedChild(i);
249
+ if (c && this.containsTry(c))
250
+ return true;
251
+ }
252
+ return false;
253
+ }
254
+ /** `return [expr]` — direct edge to the function EXIT. */
255
+ visitReturn(stmt) {
256
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
257
+ // A `return f()?;` early-returns on the `?` path too.
258
+ this.wireTryExits(stmt, idx);
259
+ this.builder.edge(idx, this.builder.exitIndex, 'return');
260
+ return { entry: idx, exits: [] };
261
+ }
262
+ /**
263
+ * `break ['label] [value]` — targets the labeled loop frame if labeled, else the
264
+ * nearest enclosing loop. `break value` is still a `break` edge (the value is a
265
+ * normal use harvested onto the block).
266
+ */
267
+ visitBreak(stmt) {
268
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text, 'normal', this.harvest.facts(stmt));
269
+ this.wireTryExits(stmt, idx);
270
+ const label = this.jumpLabel(stmt);
271
+ const res = this.cfc.resolveBreak(label);
272
+ const { target, finalizers } = res ?? {
273
+ target: this.builder.exitIndex,
274
+ finalizers: this.cfc.finalizersForReturn(),
275
+ };
276
+ (0, control_flow_context_js_1.wireJumpThroughFinalizers)(this.builder, idx, finalizers, target, 'break');
277
+ return { entry: idx, exits: [] };
278
+ }
279
+ /** `continue ['label]` — re-tests the labeled (or nearest) loop header. */
280
+ visitContinue(stmt) {
281
+ const idx = this.builder.newBlock(startLineOf(stmt), endLineOf(stmt), stmt.text);
282
+ const label = this.jumpLabel(stmt);
283
+ const res = this.cfc.resolveContinue(label);
284
+ const { target, finalizers } = res ?? {
285
+ target: this.builder.exitIndex,
286
+ finalizers: this.cfc.finalizersForReturn(),
287
+ };
288
+ (0, control_flow_context_js_1.wireJumpThroughFinalizers)(this.builder, idx, finalizers, target, 'continue');
289
+ return { entry: idx, exits: [] };
290
+ }
291
+ /** The bare name (`outer`) of a `break`/`continue`'s `'label`, if any. */
292
+ jumpLabel(stmt) {
293
+ const label = stmt.namedChildren.find((c) => c.type === 'label');
294
+ return this.labelName(label);
295
+ }
296
+ /** The bare identifier name of a `label` node (`'outer` ⇒ `outer`). */
297
+ labelName(label) {
298
+ if (!label)
299
+ return undefined;
300
+ const id = label.namedChildren.find((c) => c.type === 'identifier');
301
+ return id?.text ?? label.text.replace(/^'/, '');
302
+ }
303
+ /**
304
+ * The optional `'label` of a loop expression (a NAMED CHILD, not a field — Rust
305
+ * attaches the label directly to the loop, unlike Go's `labeled_statement`).
306
+ */
307
+ loopLabels(stmt) {
308
+ const label = stmt.namedChildren.find((c) => c.type === 'label');
309
+ const name = this.labelName(label);
310
+ return name !== undefined ? [name] : [];
311
+ }
312
+ /**
313
+ * `if COND { … } [else { … } | else if …]`. The condition can be a plain
314
+ * expression, a `let_condition` (`if let PAT = e`), or a `let_chain`. The header
315
+ * carries the condition's def/use facts (an `if let` pattern is a def, its value
316
+ * a use). The else `alternative` is an `else_clause` wrapping a `block` or a
317
+ * nested `if_expression` (the `else if` chain).
318
+ */
319
+ visitIf(stmt) {
320
+ const cond = stmt.childForFieldName('condition') ?? stmt;
321
+ const header = this.builder.newBlock(startLineOf(stmt), endLineOf(cond), cond.text, 'normal', this.condFacts(cond, false));
322
+ this.wireTryExits(cond, header);
323
+ const exits = [];
324
+ const thenRes = this.visitBody(stmt.childForFieldName('consequence'));
325
+ if (thenRes) {
326
+ this.builder.edge(header, thenRes.entry, 'cond-true');
327
+ exits.push(...thenRes.exits);
328
+ }
329
+ else {
330
+ exits.push(header); // empty then — true path falls through
331
+ }
332
+ const elseNode = this.elseBodyOf(stmt);
333
+ if (elseNode) {
334
+ const elseRes = this.visitBody(elseNode);
335
+ if (elseRes) {
336
+ this.builder.edge(header, elseRes.entry, 'cond-false');
337
+ exits.push(...elseRes.exits);
338
+ }
339
+ else {
340
+ exits.push(header);
341
+ }
342
+ }
343
+ else {
344
+ exits.push(header); // no else — false path falls through to the join
345
+ }
346
+ return { entry: header, exits: [...new Set(exits)] };
347
+ }
348
+ /** The else body of an `if_expression` (unwraps the `else_clause` wrapper). */
349
+ elseBodyOf(stmt) {
350
+ const alt = stmt.childForFieldName('alternative');
351
+ if (!alt)
352
+ return undefined;
353
+ if (alt.type === 'else_clause') {
354
+ // The clause wraps a `block` or a nested `if_expression` (`else if`).
355
+ return alt.namedChildren.find(isNotComment);
356
+ }
357
+ return alt;
358
+ }
359
+ /**
360
+ * `loop { … }` — Rust's INFINITE loop (NO condition). Body exits re-enter the
361
+ * header (`loop-back`); a `break` reaches `loopExit`. We ALWAYS emit a
362
+ * structural `header → loopExit` `cond-false` escape edge so EXIT stays
363
+ * reverse-reachable (a `loop {}` with no break never reaches EXIT otherwise, and
364
+ * the CDG pass would be silently skipped for the whole function).
365
+ */
366
+ visitLoop(stmt) {
367
+ const labels = this.loopLabels(stmt);
368
+ const header = this.builder.newBlock(startLineOf(stmt), startLineOf(stmt), 'loop');
369
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
370
+ this.cfc.pushLoop(header, loopExit, labels);
371
+ const body = this.visitBody(this.bodyOf(stmt));
372
+ this.cfc.pop();
373
+ if (body) {
374
+ this.builder.edge(header, body.entry, 'cond-true');
375
+ this.builder.connect(body.exits, header, 'loop-back');
376
+ }
377
+ else {
378
+ this.builder.edge(header, header, 'loop-back'); // empty `loop {}` re-enters
379
+ }
380
+ // Structural escape edge — keeps EXIT reverse-reachable even for `loop {}`
381
+ // with no `break` (the canonical Rust non-terminating case).
382
+ this.builder.edge(header, loopExit, 'cond-false');
383
+ return { entry: header, exits: [loopExit] };
384
+ }
385
+ /**
386
+ * `while COND { … }` (and `while let PAT = e { … }`). Standard loop: header
387
+ * tests, true → body → loop-back, false → loop exit. The `while let` pattern is
388
+ * a may-def on the header (the binding does not happen on the exit iteration).
389
+ */
390
+ visitWhile(stmt) {
391
+ const labels = this.loopLabels(stmt);
392
+ const cond = stmt.childForFieldName('condition') ?? stmt;
393
+ const header = this.builder.newBlock(startLineOf(stmt), endLineOf(cond), cond.text, 'normal', this.condFacts(cond, true));
394
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
395
+ this.cfc.pushLoop(header, loopExit, labels);
396
+ const body = this.visitBody(this.bodyOf(stmt));
397
+ this.cfc.pop();
398
+ if (body) {
399
+ this.builder.edge(header, body.entry, 'cond-true');
400
+ this.builder.connect(body.exits, header, 'loop-back');
401
+ }
402
+ else {
403
+ this.builder.edge(header, header, 'loop-back'); // empty body re-tests
404
+ }
405
+ // Structural exit edge — even `while true {}` keeps EXIT reverse-reachable.
406
+ this.builder.edge(header, loopExit, 'cond-false');
407
+ return { entry: header, exits: [loopExit] };
408
+ }
409
+ /**
410
+ * `for PAT in ITER { … }`. The header binds the loop pattern (a def) and uses
411
+ * the iterated expression. Standard loop topology.
412
+ */
413
+ visitFor(stmt) {
414
+ const labels = this.loopLabels(stmt);
415
+ const value = stmt.childForFieldName('value');
416
+ const headEnd = value ? endLineOf(value) : startLineOf(stmt);
417
+ const header = this.builder.newBlock(startLineOf(stmt), headEnd, this.forHeaderText(stmt), 'normal', this.harvest.forHeadFacts(stmt));
418
+ const loopExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
419
+ this.cfc.pushLoop(header, loopExit, labels);
420
+ const body = this.visitBody(this.bodyOf(stmt));
421
+ this.cfc.pop();
422
+ if (body) {
423
+ this.builder.edge(header, body.entry, 'cond-true');
424
+ this.builder.connect(body.exits, header, 'loop-back');
425
+ }
426
+ else {
427
+ this.builder.edge(header, header, 'loop-back'); // empty body re-iterates
428
+ }
429
+ this.builder.edge(header, loopExit, 'cond-false');
430
+ return { entry: header, exits: [loopExit] };
431
+ }
432
+ forHeaderText(stmt) {
433
+ const pat = stmt.childForFieldName('pattern')?.text ?? '';
434
+ const value = stmt.childForFieldName('value')?.text ?? '';
435
+ return pat || value ? `for ${pat} in ${value}` : 'for';
436
+ }
437
+ /**
438
+ * `match VALUE { PAT [if guard] => ARM, … }`. Arms do NOT fall through (like
439
+ * Go / Python). Each arm body is dispatched from the subject block with a
440
+ * `switch-case` edge; arm bodies rejoin AFTER the match. A `match` with no
441
+ * irrefutable `_` arm also reaches the join directly (no-match path), keeping
442
+ * EXIT reverse-reachable.
443
+ */
444
+ visitMatch(stmt) {
445
+ const value = stmt.childForFieldName('value');
446
+ const dispatch = this.builder.newBlock(startLineOf(stmt), value ? endLineOf(value) : startLineOf(stmt), value ? `match ${value.text}` : 'match', 'normal', value ? this.harvest.facts(value) : undefined);
447
+ if (value)
448
+ this.wireTryExits(value, dispatch);
449
+ const matchExit = this.builder.newBlock(endLineOf(stmt), endLineOf(stmt), '');
450
+ const body = stmt.childForFieldName('body') ?? stmt.namedChildren.find((c) => c.type === 'match_block');
451
+ const arms = body ? body.namedChildren.filter((c) => c.type === 'match_arm') : [];
452
+ // Each arm's pattern bindings (`Some(n) =>`) are MAY-defs from the matched
453
+ // subject, and a guarded arm (`PAT if g`) evaluates `g` conditionally — both
454
+ // are harvested onto the dispatch block (co-located with the subject's use, so
455
+ // a tainted subject reaches the binding), as may-defs (a later arm binds/tests
456
+ // only when earlier ones didn't match). #2206.
457
+ for (const arm of arms) {
458
+ const patFacts = this.harvest.matchArmPatternFacts(arm);
459
+ if (patFacts)
460
+ this.builder.attachFacts(dispatch, patFacts);
461
+ const guard = this.armGuard(arm);
462
+ if (guard)
463
+ this.builder.attachFacts(dispatch, this.harvest.factsConditional(guard));
464
+ }
465
+ this.cfc.pushSwitch(matchExit, []);
466
+ let hasIrrefutable = false;
467
+ for (const arm of arms) {
468
+ // The arm body may be an expr or block; its pattern bindings were harvested
469
+ // onto the dispatch above (#2206).
470
+ const armBody = this.visitBody(arm.childForFieldName('value'));
471
+ const entry = armBody?.entry ?? matchExit;
472
+ this.builder.edge(dispatch, entry, 'switch-case');
473
+ if (armBody)
474
+ this.builder.connect(armBody.exits, matchExit, 'seq');
475
+ if (this.isIrrefutableArm(arm))
476
+ hasIrrefutable = true;
477
+ }
478
+ this.cfc.pop();
479
+ // No catch-all arm → a no-match path reaches the exit directly. (A real Rust
480
+ // match is exhaustive, but a non-`_`-tailed match keeps EXIT reverse-reachable
481
+ // even when every arm body jumps.)
482
+ if (!hasIrrefutable)
483
+ this.builder.edge(dispatch, matchExit, 'switch-case');
484
+ return { entry: dispatch, exits: [matchExit] };
485
+ }
486
+ /** The guard condition of a `match_arm` (`PAT if g`), if any. */
487
+ armGuard(arm) {
488
+ const pat = arm.childForFieldName('pattern');
489
+ return pat?.childForFieldName('condition') ?? undefined;
490
+ }
491
+ /** A `_ =>` arm with no guard is the unconditional catch-all. */
492
+ isIrrefutableArm(arm) {
493
+ if (this.armGuard(arm))
494
+ return false;
495
+ const pat = arm.childForFieldName('pattern');
496
+ return pat?.text.trim() === '_';
497
+ }
498
+ /**
499
+ * Def/use facts for an `if`/`while` condition. A `let_condition` binds a pattern
500
+ * (a def — a may-def for `while let`, which re-tests) and uses its value; a
501
+ * `let_chain` threads through each `let_condition`. A plain expression is walked
502
+ * for uses.
503
+ */
504
+ condFacts(cond, loopCond) {
505
+ if (cond.type === 'let_condition') {
506
+ return this.harvest.letConditionFacts(cond, loopCond);
507
+ }
508
+ // A `let_chain` (`let PAT = e && cond`) — harvest the whole chain. The let
509
+ // bindings inside it are defs (may-defs for a while-let chain).
510
+ return this.harvest.facts(cond);
511
+ }
512
+ }
513
+ /** Build the CFG for one Rust function / closure node, or `undefined`. */
514
+ function buildFunctionCfg(fnNode, filePath) {
515
+ try {
516
+ if (!RUST_FUNCTION_TYPES.has(fnNode.type))
517
+ return undefined;
518
+ const startLine = startLineOf(fnNode);
519
+ const endLine = endLineOf(fnNode);
520
+ const startColumn = fnNode.startPosition.column;
521
+ const body = fnNode.childForFieldName('body');
522
+ if (!body)
523
+ return undefined; // trait method signature / no body
524
+ const builder = new cfg_builder_js_1.CfgBuilder(filePath, startLine, endLine, startColumn);
525
+ const harvest = new rust_harvest_js_1.RustHarvester(fnNode);
526
+ const paramFacts = harvest.paramFacts();
527
+ if (paramFacts)
528
+ builder.attachFacts(builder.entryIndex, paramFacts);
529
+ const walk = new RustCfgWalk(builder, harvest);
530
+ if (body.type !== 'block') {
531
+ // A closure with an expression body (`|x| x + 1`): one block whose value is
532
+ // the returned expression. A `?` inside it early-returns to EXIT.
533
+ const res = walk.visitStmt(body);
534
+ builder.edge(builder.entryIndex, res ? res.entry : builder.exitIndex, 'seq');
535
+ builder.connect(res ? res.exits : [builder.entryIndex], builder.exitIndex, 'seq');
536
+ return builder.finish(harvest.bindingTable());
537
+ }
538
+ const res = walk.visitSeq(body.namedChildren.filter(isNotComment));
539
+ if (!res) {
540
+ builder.edge(builder.entryIndex, builder.exitIndex, 'seq'); // empty body
541
+ return builder.finish(harvest.bindingTable());
542
+ }
543
+ builder.edge(builder.entryIndex, res.entry, 'seq');
544
+ builder.connect(res.exits, builder.exitIndex, 'seq'); // normal fall-off → EXIT
545
+ return builder.finish(harvest.bindingTable());
546
+ }
547
+ catch (err) {
548
+ // Never throw out of buildFunctionCfg — a malformed AST shape must skip only
549
+ // this one function's CFG, never drop the whole file's language group (R4).
550
+ // eslint-disable-next-line no-console
551
+ console.warn(`[cfg] Rust buildFunctionCfg skipped a function in ${filePath}: ${String(err)}`);
552
+ return undefined;
553
+ }
554
+ }
555
+ /** Whether a node is a Rust function/closure this visitor builds a CFG for. */
556
+ function isFunction(node) {
557
+ return RUST_FUNCTION_TYPES.has(node.type);
558
+ }
559
+ /** The Rust CFG visitor. */
560
+ function createRustCfgVisitor() {
561
+ return { buildFunctionCfg, isFunction };
562
+ }
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScopeTreeHarvester = void 0;
4
+ /**
5
+ * Abstract base owning the lexical scope tree + the two-phase resolution
6
+ * substrate. Subclasses provide the per-language constructor wiring (param /
7
+ * receiver declaration + the body `prescan` kick-off) and the abstract
8
+ * `prescan`; Go additionally overrides `declare` / `def` / `use` for its `_`
9
+ * blank-identifier semantics.
10
+ */
11
+ class ScopeTreeHarvester {
12
+ fnNode;
13
+ bindings = [];
14
+ scopeByNode = new Map();
15
+ root = { parent: null, table: new Map() };
16
+ synthetic = new Map();
17
+ fnId;
18
+ /** Innermost enclosing scope per visited node id (prescan-filled) — O(scope-chain) phase-2 resolution. */
19
+ nearestScopeCache = new Map();
20
+ /** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
21
+ conditionalDepth = 0;
22
+ /**
23
+ * Call/new node id → bindings whose declaration/assignment VALUE is exactly
24
+ * that call (#2195 U6). Registered before the value walk, consumed by the
25
+ * language harvester's `visitCall` (mirrors the TS harvester's
26
+ * `resultDefTargets`).
27
+ */
28
+ resultDefTargets = new Map();
29
+ constructor(fnNode) {
30
+ this.fnNode = fnNode;
31
+ this.fnId = fnNode.id;
32
+ this.scopeByNode.set(fnNode.id, this.root);
33
+ }
34
+ /** The completed binding table — pass to `CfgBuilder.finish`. */
35
+ bindingTable() {
36
+ return this.bindings;
37
+ }
38
+ // ── phase 1: declaration pre-scan ────────────────────────────────────────
39
+ openScope(node) {
40
+ const existing = this.scopeByNode.get(node.id);
41
+ if (existing)
42
+ return existing;
43
+ const scope = { parent: this.nearestScopeOf(node), table: new Map() };
44
+ this.scopeByNode.set(node.id, scope);
45
+ return scope;
46
+ }
47
+ nearestScopeOf(node) {
48
+ for (let p = node.parent; p; p = p.parent) {
49
+ const s = this.scopeByNode.get(p.id);
50
+ if (s)
51
+ return s;
52
+ if (p.id === this.fnId)
53
+ break;
54
+ }
55
+ return this.root;
56
+ }
57
+ declare(nameNode, kind, scope) {
58
+ const name = nameNode.text;
59
+ if (!name || scope.table.has(name))
60
+ return;
61
+ scope.table.set(name, this.bindings.length);
62
+ this.bindings.push({
63
+ name,
64
+ declLine: nameNode.startPosition.row + 1,
65
+ declColumn: nameNode.startPosition.column,
66
+ kind,
67
+ });
68
+ }
69
+ // ── phase 2: per-statement fact extraction ───────────────────────────────
70
+ resolve(nameNode) {
71
+ const name = nameNode.text;
72
+ const cached = this.nearestScopeCache.get(nameNode.id);
73
+ let startScope = cached ?? null;
74
+ if (!startScope) {
75
+ for (let p = nameNode; p; p = p.parent) {
76
+ const scope = this.scopeByNode.get(p.id) ?? this.nearestScopeCache.get(p.id);
77
+ if (scope) {
78
+ startScope = scope;
79
+ break;
80
+ }
81
+ if (p.id === this.fnId) {
82
+ startScope = this.root;
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ for (let s = startScope; s; s = s.parent) {
88
+ const idx = s.table.get(name);
89
+ if (idx !== undefined)
90
+ return idx;
91
+ }
92
+ let idx = this.synthetic.get(name);
93
+ if (idx === undefined) {
94
+ idx = this.bindings.length;
95
+ this.synthetic.set(name, idx);
96
+ this.bindings.push({ name, declLine: 0, declColumn: 0, kind: 'module', synthetic: true });
97
+ }
98
+ return idx;
99
+ }
100
+ def(nameNode, acc) {
101
+ if (this.conditionalDepth > 0)
102
+ acc.addMayDef(this.resolve(nameNode));
103
+ else
104
+ acc.addDef(this.resolve(nameNode));
105
+ }
106
+ use(nameNode, acc) {
107
+ acc.addUse(this.resolve(nameNode));
108
+ }
109
+ /** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
110
+ conditional(fn) {
111
+ this.conditionalDepth++;
112
+ try {
113
+ fn();
114
+ }
115
+ finally {
116
+ this.conditionalDepth--;
117
+ }
118
+ }
119
+ }
120
+ exports.ScopeTreeHarvester = ScopeTreeHarvester;