gitnexus 1.6.8-rc.9 → 1.6.8

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 (430) hide show
  1. package/README.md +3 -3
  2. package/dist/_shared/graph/types.d.ts +31 -1
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/language-detection.d.ts.map +1 -1
  5. package/dist/_shared/language-detection.js +11 -1
  6. package/dist/_shared/language-detection.js.map +1 -1
  7. package/dist/_shared/lbug/schema-constants.d.ts +1 -1
  8. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  9. package/dist/_shared/lbug/schema-constants.js +6 -0
  10. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  11. package/dist/_shared/scope-resolution/parsed-file.d.ts +21 -0
  12. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  13. package/dist/_shared/scope-resolution/symbol-definition.d.ts +6 -0
  14. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  15. package/dist/cli/ai-context.d.ts +31 -1
  16. package/dist/cli/ai-context.js +18 -16
  17. package/dist/cli/analyze-config.js +11 -0
  18. package/dist/cli/analyze.d.ts +14 -0
  19. package/dist/cli/analyze.js +98 -0
  20. package/dist/cli/embedding-dims.d.ts +33 -0
  21. package/dist/cli/embedding-dims.js +39 -0
  22. package/dist/cli/eval-server.d.ts +8 -0
  23. package/dist/cli/eval-server.js +242 -2
  24. package/dist/cli/help-i18n.js +19 -0
  25. package/dist/cli/i18n/en.d.ts +15 -1
  26. package/dist/cli/i18n/en.js +15 -1
  27. package/dist/cli/i18n/resources.d.ts +29 -1
  28. package/dist/cli/i18n/zh-CN.d.ts +14 -0
  29. package/dist/cli/i18n/zh-CN.js +15 -1
  30. package/dist/cli/index.js +89 -1
  31. package/dist/cli/mcp.d.ts +6 -1
  32. package/dist/cli/mcp.js +26 -1
  33. package/dist/cli/optional-grammars.d.ts +6 -8
  34. package/dist/cli/optional-grammars.js +8 -11
  35. package/dist/cli/setup.d.ts +3 -1
  36. package/dist/cli/setup.js +67 -17
  37. package/dist/cli/skill-gen.js +2 -1
  38. package/dist/cli/tool.d.ts +19 -1
  39. package/dist/cli/tool.js +96 -3
  40. package/dist/core/embeddings/hf-env.d.ts +0 -66
  41. package/dist/core/embeddings/http-client.d.ts +7 -0
  42. package/dist/core/embeddings/http-client.js +5 -3
  43. package/dist/core/embeddings/server-mapping.d.ts +1 -1
  44. package/dist/core/embeddings/server-mapping.js +7 -3
  45. package/dist/core/graph/import-cycles.d.ts +10 -0
  46. package/dist/core/graph/import-cycles.js +103 -0
  47. package/dist/core/group/cross-impact.d.ts +2 -1
  48. package/dist/core/group/cross-impact.js +5 -1
  49. package/dist/core/group/extractors/grpc-patterns/proto.js +10 -6
  50. package/dist/core/group/extractors/http-patterns/kotlin.js +7 -7
  51. package/dist/core/group/extractors/http-route-extractor.d.ts +24 -0
  52. package/dist/core/group/extractors/http-route-extractor.js +22 -4
  53. package/dist/core/group/extractors/include-extractor.js +22 -13
  54. package/dist/core/group/sync.d.ts +27 -1
  55. package/dist/core/group/sync.js +0 -0
  56. package/dist/core/incremental/subgraph-extract.js +18 -1
  57. package/dist/core/ingestion/cfg/cfg-builder.d.ts +114 -0
  58. package/dist/core/ingestion/cfg/cfg-builder.js +196 -0
  59. package/dist/core/ingestion/cfg/collect.d.ts +51 -0
  60. package/dist/core/ingestion/cfg/collect.js +77 -0
  61. package/dist/core/ingestion/cfg/control-dependence.d.ts +58 -0
  62. package/dist/core/ingestion/cfg/control-dependence.js +182 -0
  63. package/dist/core/ingestion/cfg/control-flow-context.d.ts +106 -0
  64. package/dist/core/ingestion/cfg/control-flow-context.js +124 -0
  65. package/dist/core/ingestion/cfg/emit.d.ts +293 -0
  66. package/dist/core/ingestion/cfg/emit.js +646 -0
  67. package/dist/core/ingestion/cfg/post-dominators.d.ts +79 -0
  68. package/dist/core/ingestion/cfg/post-dominators.js +176 -0
  69. package/dist/core/ingestion/cfg/reaching-def-reason-codec.d.ts +106 -0
  70. package/dist/core/ingestion/cfg/reaching-def-reason-codec.js +133 -0
  71. package/dist/core/ingestion/cfg/reaching-defs-graph.d.ts +18 -0
  72. package/dist/core/ingestion/cfg/reaching-defs-graph.js +312 -0
  73. package/dist/core/ingestion/cfg/reaching-defs.d.ts +162 -0
  74. package/dist/core/ingestion/cfg/reaching-defs.js +785 -0
  75. package/dist/core/ingestion/cfg/synthetic-escape.d.ts +124 -0
  76. package/dist/core/ingestion/cfg/synthetic-escape.js +300 -0
  77. package/dist/core/ingestion/cfg/traversal-result.d.ts +20 -0
  78. package/dist/core/ingestion/cfg/traversal-result.js +2 -0
  79. package/dist/core/ingestion/cfg/types.d.ts +274 -0
  80. package/dist/core/ingestion/cfg/types.js +13 -0
  81. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.d.ts +111 -0
  82. package/dist/core/ingestion/cfg/visitors/c-cpp-harvest.js +541 -0
  83. package/dist/core/ingestion/cfg/visitors/c-cpp.d.ts +74 -0
  84. package/dist/core/ingestion/cfg/visitors/c-cpp.js +584 -0
  85. package/dist/core/ingestion/cfg/visitors/call-site-harvest.d.ts +195 -0
  86. package/dist/core/ingestion/cfg/visitors/call-site-harvest.js +350 -0
  87. package/dist/core/ingestion/cfg/visitors/csharp-harvest.d.ts +124 -0
  88. package/dist/core/ingestion/cfg/visitors/csharp-harvest.js +589 -0
  89. package/dist/core/ingestion/cfg/visitors/csharp.d.ts +87 -0
  90. package/dist/core/ingestion/cfg/visitors/csharp.js +867 -0
  91. package/dist/core/ingestion/cfg/visitors/dart-harvest.d.ts +278 -0
  92. package/dist/core/ingestion/cfg/visitors/dart-harvest.js +870 -0
  93. package/dist/core/ingestion/cfg/visitors/dart.d.ts +119 -0
  94. package/dist/core/ingestion/cfg/visitors/dart.js +836 -0
  95. package/dist/core/ingestion/cfg/visitors/go-harvest.d.ts +160 -0
  96. package/dist/core/ingestion/cfg/visitors/go-harvest.js +621 -0
  97. package/dist/core/ingestion/cfg/visitors/go.d.ts +108 -0
  98. package/dist/core/ingestion/cfg/visitors/go.js +638 -0
  99. package/dist/core/ingestion/cfg/visitors/java-harvest.d.ts +108 -0
  100. package/dist/core/ingestion/cfg/visitors/java-harvest.js +513 -0
  101. package/dist/core/ingestion/cfg/visitors/java.d.ts +101 -0
  102. package/dist/core/ingestion/cfg/visitors/java.js +812 -0
  103. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.d.ts +253 -0
  104. package/dist/core/ingestion/cfg/visitors/kotlin-harvest.js +719 -0
  105. package/dist/core/ingestion/cfg/visitors/kotlin.d.ts +121 -0
  106. package/dist/core/ingestion/cfg/visitors/kotlin.js +809 -0
  107. package/dist/core/ingestion/cfg/visitors/php-harvest.d.ts +172 -0
  108. package/dist/core/ingestion/cfg/visitors/php-harvest.js +626 -0
  109. package/dist/core/ingestion/cfg/visitors/php.d.ts +96 -0
  110. package/dist/core/ingestion/cfg/visitors/php.js +721 -0
  111. package/dist/core/ingestion/cfg/visitors/python-harvest.d.ts +212 -0
  112. package/dist/core/ingestion/cfg/visitors/python-harvest.js +739 -0
  113. package/dist/core/ingestion/cfg/visitors/python.d.ts +103 -0
  114. package/dist/core/ingestion/cfg/visitors/python.js +558 -0
  115. package/dist/core/ingestion/cfg/visitors/ruby-harvest.d.ts +223 -0
  116. package/dist/core/ingestion/cfg/visitors/ruby-harvest.js +587 -0
  117. package/dist/core/ingestion/cfg/visitors/ruby.d.ts +112 -0
  118. package/dist/core/ingestion/cfg/visitors/ruby.js +756 -0
  119. package/dist/core/ingestion/cfg/visitors/rust-harvest.d.ts +324 -0
  120. package/dist/core/ingestion/cfg/visitors/rust-harvest.js +873 -0
  121. package/dist/core/ingestion/cfg/visitors/rust.d.ts +95 -0
  122. package/dist/core/ingestion/cfg/visitors/rust.js +558 -0
  123. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.d.ts +87 -0
  124. package/dist/core/ingestion/cfg/visitors/scope-tree-harvest.js +116 -0
  125. package/dist/core/ingestion/cfg/visitors/swift-harvest.d.ts +255 -0
  126. package/dist/core/ingestion/cfg/visitors/swift-harvest.js +679 -0
  127. package/dist/core/ingestion/cfg/visitors/swift.d.ts +116 -0
  128. package/dist/core/ingestion/cfg/visitors/swift.js +787 -0
  129. package/dist/core/ingestion/cfg/visitors/typescript-harvest.d.ts +149 -0
  130. package/dist/core/ingestion/cfg/visitors/typescript-harvest.js +1056 -0
  131. package/dist/core/ingestion/cfg/visitors/typescript.d.ts +66 -0
  132. package/dist/core/ingestion/cfg/visitors/typescript.js +583 -0
  133. package/dist/core/ingestion/import-resolvers/utils.js +2 -0
  134. package/dist/core/ingestion/language-provider.d.ts +11 -0
  135. package/dist/core/ingestion/languages/c-cpp.js +6 -1
  136. package/dist/core/ingestion/languages/cobol.js +4 -0
  137. package/dist/core/ingestion/languages/cpp/arity-metadata.js +41 -2
  138. package/dist/core/ingestion/languages/cpp/captures.js +50 -1
  139. package/dist/core/ingestion/languages/cpp/conversion-rank.d.ts +2 -0
  140. package/dist/core/ingestion/languages/cpp/conversion-rank.js +89 -0
  141. package/dist/core/ingestion/languages/cpp/header-scan.d.ts +1 -1
  142. package/dist/core/ingestion/languages/cpp/header-scan.js +2 -2
  143. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +7 -2
  144. package/dist/core/ingestion/languages/cpp/member-lookup.js +2 -1
  145. package/dist/core/ingestion/languages/cpp/query.js +23 -0
  146. package/dist/core/ingestion/languages/cpp/scope-resolver.js +2 -1
  147. package/dist/core/ingestion/languages/csharp.js +2 -0
  148. package/dist/core/ingestion/languages/dart.js +2 -0
  149. package/dist/core/ingestion/languages/go.js +2 -0
  150. package/dist/core/ingestion/languages/java.js +3 -0
  151. package/dist/core/ingestion/languages/kotlin/query.js +3 -2
  152. package/dist/core/ingestion/languages/kotlin.js +3 -0
  153. package/dist/core/ingestion/languages/php.js +2 -0
  154. package/dist/core/ingestion/languages/python.js +2 -0
  155. package/dist/core/ingestion/languages/ruby.js +2 -0
  156. package/dist/core/ingestion/languages/rust.js +2 -0
  157. package/dist/core/ingestion/languages/swift.js +2 -0
  158. package/dist/core/ingestion/languages/typescript.js +5 -0
  159. package/dist/core/ingestion/languages/vue.js +6 -0
  160. package/dist/core/ingestion/method-extractors/configs/c-cpp.js +6 -13
  161. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  162. package/dist/core/ingestion/method-types.d.ts +2 -0
  163. package/dist/core/ingestion/model/symbol-table.d.ts +1 -0
  164. package/dist/core/ingestion/model/symbol-table.js +1 -0
  165. package/dist/core/ingestion/mro-processor.js +109 -0
  166. package/dist/core/ingestion/parsing-processor.js +23 -0
  167. package/dist/core/ingestion/pipeline-phases/call-summaries.d.ts +26 -0
  168. package/dist/core/ingestion/pipeline-phases/call-summaries.js +46 -0
  169. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  170. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  171. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +0 -21
  172. package/dist/core/ingestion/pipeline-phases/parse-impl.js +18 -1
  173. package/dist/core/ingestion/pipeline-phases/routes.d.ts +10 -0
  174. package/dist/core/ingestion/pipeline-phases/routes.js +30 -1
  175. package/dist/core/ingestion/pipeline-phases/taint-summaries.d.ts +30 -0
  176. package/dist/core/ingestion/pipeline-phases/taint-summaries.js +81 -0
  177. package/dist/core/ingestion/pipeline.d.ts +92 -10
  178. package/dist/core/ingestion/pipeline.js +11 -2
  179. package/dist/core/ingestion/scope-extractor.js +12 -2
  180. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +9 -0
  181. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +75 -0
  182. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +67 -0
  183. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -2
  184. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +14 -2
  185. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +6 -1
  186. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +13 -1
  187. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +9 -1
  188. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +28 -2
  189. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.d.ts +4 -0
  190. package/dist/core/ingestion/scope-resolution/passes/overload-narrowing.js +9 -0
  191. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +6 -1
  192. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +174 -40
  193. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +24 -0
  194. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +276 -190
  195. package/dist/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +43 -3
  196. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +75 -0
  197. package/dist/core/ingestion/scope-resolution/pipeline/run.js +349 -1
  198. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  199. package/dist/core/ingestion/taint/call-summary-codec.d.ts +75 -0
  200. package/dist/core/ingestion/taint/call-summary-codec.js +128 -0
  201. package/dist/core/ingestion/taint/call-summary-emit.d.ts +43 -0
  202. package/dist/core/ingestion/taint/call-summary-emit.js +70 -0
  203. package/dist/core/ingestion/taint/call-summary-harvest.d.ts +77 -0
  204. package/dist/core/ingestion/taint/call-summary-harvest.js +179 -0
  205. package/dist/core/ingestion/taint/call-summary-model.d.ts +47 -0
  206. package/dist/core/ingestion/taint/call-summary-model.js +25 -0
  207. package/dist/core/ingestion/taint/emit.d.ts +125 -0
  208. package/dist/core/ingestion/taint/emit.js +208 -0
  209. package/dist/core/ingestion/taint/interproc-emit.d.ts +50 -0
  210. package/dist/core/ingestion/taint/interproc-emit.js +88 -0
  211. package/dist/core/ingestion/taint/interproc-solver.d.ts +110 -0
  212. package/dist/core/ingestion/taint/interproc-solver.js +312 -0
  213. package/dist/core/ingestion/taint/match.d.ts +153 -0
  214. package/dist/core/ingestion/taint/match.js +278 -0
  215. package/dist/core/ingestion/taint/path-codec.d.ts +134 -0
  216. package/dist/core/ingestion/taint/path-codec.js +190 -0
  217. package/dist/core/ingestion/taint/propagate.d.ts +216 -0
  218. package/dist/core/ingestion/taint/propagate.js +659 -0
  219. package/dist/core/ingestion/taint/site-safety.d.ts +29 -0
  220. package/dist/core/ingestion/taint/site-safety.js +98 -0
  221. package/dist/core/ingestion/taint/source-sink-config.d.ts +107 -23
  222. package/dist/core/ingestion/taint/source-sink-config.js +35 -12
  223. package/dist/core/ingestion/taint/source-sink-registry.d.ts +6 -4
  224. package/dist/core/ingestion/taint/source-sink-registry.js +6 -4
  225. package/dist/core/ingestion/taint/summary-harvest-driver.d.ts +80 -0
  226. package/dist/core/ingestion/taint/summary-harvest-driver.js +179 -0
  227. package/dist/core/ingestion/taint/summary-harvest.d.ts +89 -0
  228. package/dist/core/ingestion/taint/summary-harvest.js +537 -0
  229. package/dist/core/ingestion/taint/summary-model.d.ts +200 -0
  230. package/dist/core/ingestion/taint/summary-model.js +86 -0
  231. package/dist/core/ingestion/taint/typescript-model.d.ts +38 -0
  232. package/dist/core/ingestion/taint/typescript-model.js +102 -0
  233. package/dist/core/ingestion/type-extractors/c-cpp.js +21 -0
  234. package/dist/core/ingestion/utils/env.d.ts +7 -0
  235. package/dist/core/ingestion/utils/env.js +12 -0
  236. package/dist/core/ingestion/utils/method-props.js +1 -0
  237. package/dist/core/ingestion/workers/parse-worker.d.ts +13 -0
  238. package/dist/core/ingestion/workers/parse-worker.js +76 -17
  239. package/dist/core/ingestion/workers/worker-pool.d.ts +9 -40
  240. package/dist/core/ingestion/workers/worker-pool.js +15 -2
  241. package/dist/core/lbug/csv-generator.d.ts +51 -3
  242. package/dist/core/lbug/csv-generator.js +369 -255
  243. package/dist/core/lbug/lbug-adapter.d.ts +58 -18
  244. package/dist/core/lbug/lbug-adapter.js +346 -84
  245. package/dist/core/lbug/lbug-config.d.ts +19 -0
  246. package/dist/core/lbug/lbug-config.js +29 -0
  247. package/dist/core/lbug/pdg-emit-sink.d.ts +127 -0
  248. package/dist/core/lbug/pdg-emit-sink.js +358 -0
  249. package/dist/core/lbug/pool-adapter.d.ts +35 -0
  250. package/dist/core/lbug/pool-adapter.js +90 -1
  251. package/dist/core/lbug/rel-pair-routing.d.ts +54 -0
  252. package/dist/core/lbug/rel-pair-routing.js +140 -0
  253. package/dist/core/lbug/schema.d.ts +2 -2
  254. package/dist/core/lbug/schema.js +3 -0
  255. package/dist/core/logger.d.ts +0 -5
  256. package/dist/core/run-analyze.d.ts +96 -0
  257. package/dist/core/run-analyze.js +207 -3
  258. package/dist/core/tree-sitter/parser-loader.js +5 -4
  259. package/dist/core/tree-sitter/safe-parse.d.ts +0 -5
  260. package/dist/core/tree-sitter/vendored-grammars.d.ts +39 -0
  261. package/dist/core/tree-sitter/vendored-grammars.js +57 -0
  262. package/dist/core/wiki/generator.js +3 -1
  263. package/dist/core/wiki/graph-queries.d.ts +6 -0
  264. package/dist/core/wiki/graph-queries.js +9 -1
  265. package/dist/mcp/http-transport.d.ts +134 -0
  266. package/dist/mcp/http-transport.js +503 -0
  267. package/dist/mcp/local/local-backend.d.ts +110 -24
  268. package/dist/mcp/local/local-backend.js +1225 -19
  269. package/dist/mcp/local/pdg-impact.d.ts +384 -0
  270. package/dist/mcp/local/pdg-impact.js +1972 -0
  271. package/dist/mcp/resources.js +13 -1
  272. package/dist/mcp/tools.d.ts +12 -0
  273. package/dist/mcp/tools.js +214 -7
  274. package/dist/server/analyze-launch.d.ts +29 -0
  275. package/dist/server/analyze-launch.js +137 -0
  276. package/dist/server/analyze-upload.d.ts +33 -0
  277. package/dist/server/analyze-upload.js +123 -0
  278. package/dist/server/analyze-worker.d.ts +17 -1
  279. package/dist/server/api.d.ts +17 -0
  280. package/dist/server/api.js +132 -168
  281. package/dist/server/git-clone.d.ts +43 -2
  282. package/dist/server/git-clone.js +211 -16
  283. package/dist/server/mcp-http.d.ts +5 -6
  284. package/dist/server/mcp-http.js +9 -82
  285. package/dist/server/middleware.d.ts +40 -0
  286. package/dist/server/middleware.js +92 -0
  287. package/dist/server/private-ip.d.ts +1 -0
  288. package/dist/server/private-ip.js +15 -0
  289. package/dist/server/upload-ingest.d.ts +56 -0
  290. package/dist/server/upload-ingest.js +276 -0
  291. package/dist/server/upload-paths.d.ts +37 -0
  292. package/dist/server/upload-paths.js +57 -0
  293. package/dist/server/upload-sweep.d.ts +20 -0
  294. package/dist/server/upload-sweep.js +57 -0
  295. package/dist/storage/git.js +5 -8
  296. package/dist/storage/parse-cache.d.ts +22 -1
  297. package/dist/storage/parse-cache.js +41 -10
  298. package/dist/storage/repo-manager.d.ts +121 -10
  299. package/dist/storage/repo-manager.js +43 -5
  300. package/dist/types/pipeline.d.ts +9 -0
  301. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +110 -10
  302. package/hooks/claude/gitnexus-hook.cjs +110 -13
  303. package/hooks/claude/hook-db-lock-probe.cjs +513 -26
  304. package/package.json +8 -2
  305. package/scripts/assert-publish-grammar-coverage.cjs +31 -0
  306. package/scripts/build-tree-sitter-grammars.cjs +16 -10
  307. package/scripts/cross-platform-tests.ts +1 -0
  308. package/skills/gitnexus-debugging.md +16 -4
  309. package/skills/gitnexus-exploring.md +3 -3
  310. package/skills/gitnexus-guide.md +33 -0
  311. package/skills/gitnexus-pdg-query.md +89 -0
  312. package/skills/gitnexus-refactoring.md +1 -1
  313. package/skills/gitnexus-taint-analysis.md +178 -0
  314. package/vendor/tree-sitter-c/package.json +1 -1
  315. package/vendor/tree-sitter-dart/package.json +1 -1
  316. package/vendor/tree-sitter-kotlin/package.json +1 -1
  317. package/vendor/tree-sitter-proto/package.json +1 -1
  318. package/vendor/tree-sitter-swift/package.json +1 -1
  319. package/web/assets/{agent-CKPMqImC.js → agent-D3Xd7zZE.js} +123 -123
  320. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +1 -0
  321. package/web/assets/architectureDiagram-UL44E2DR-ChH9xW-N.js +36 -0
  322. package/web/assets/{blockDiagram-7IZFK4PR-B4niSLvR.js → blockDiagram-7IZFK4PR-BkWhpzWB.js} +1 -1
  323. package/web/assets/{c4Diagram-Y2BXMSZH-DIzEXalR.js → c4Diagram-Y2BXMSZH-DtBvpzWD.js} +1 -1
  324. package/web/assets/{chunk-3SSMPTDK-BzGeeheI.js → chunk-3SSMPTDK-B4_etUhr.js} +2 -2
  325. package/web/assets/{chunk-5IMINLNL-CnTLsXIV.js → chunk-5IMINLNL-DOdTeQri.js} +1 -1
  326. package/web/assets/{chunk-5VCL7Z4A-w1BCx98Z.js → chunk-5VCL7Z4A-CQ-2dYWj.js} +1 -1
  327. package/web/assets/chunk-6764PJDD-DpIS7hxD.js +1 -0
  328. package/web/assets/{chunk-67TQ5CYL-CChC2cAv.js → chunk-67TQ5CYL-4sNPJU1q.js} +3 -3
  329. package/web/assets/{chunk-7W6UQGC5-CgFyfZ6k.js → chunk-7W6UQGC5-KyEG0HQg.js} +1 -1
  330. package/web/assets/{chunk-AZZRMDJM-5E9ARdDQ.js → chunk-AZZRMDJM-y-xJBuMz.js} +1 -1
  331. package/web/assets/{chunk-INKRHTLW-ELpfuk9h.js → chunk-INKRHTLW-Nu4ri9P-.js} +1 -1
  332. package/web/assets/{chunk-JQRUD6KW-Dcq_Qnyy.js → chunk-JQRUD6KW-Dbva2Z17.js} +1 -1
  333. package/web/assets/{chunk-KGFNY3KK-W-VR57xb.js → chunk-KGFNY3KK-JGMJvKCK.js} +1 -1
  334. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +161 -0
  335. package/web/assets/{chunk-KNLZD3CH-BuZBOcso.js → chunk-KNLZD3CH-BGlP6X9R.js} +1 -1
  336. package/web/assets/{chunk-KRXBNO2N-DH2NPM7I.js → chunk-KRXBNO2N-BW5o0KUN.js} +1 -1
  337. package/web/assets/{chunk-LCXTWHL2-Dfmux4m1.js → chunk-LCXTWHL2-zoomRtWX.js} +1 -1
  338. package/web/assets/{chunk-LII3EMHJ-3X33tCpU.js → chunk-LII3EMHJ-D-jm-dLa.js} +1 -1
  339. package/web/assets/{chunk-QA3QBVWF-D5Ha3GgB.js → chunk-QA3QBVWF-BgRW3SXd.js} +1 -1
  340. package/web/assets/{chunk-RG4AUYOV-CAkzcoRj.js → chunk-RG4AUYOV-DD0B2N2B.js} +1 -1
  341. package/web/assets/{chunk-T2UQINTJ-kGYG7ppP.js → chunk-T2UQINTJ-DSBqkzH7.js} +1 -1
  342. package/web/assets/chunk-T5OCTHI4-DdZvN-9i.js +1 -0
  343. package/web/assets/{chunk-UY5QBCOK-Du-c56gs.js → chunk-UY5QBCOK-DyF0vyGd.js} +1 -1
  344. package/web/assets/{chunk-W44A43WB-lrCpuupA.js → chunk-W44A43WB-JqMLIpR0.js} +1 -1
  345. package/web/assets/{chunk-ZXARS5L4-CSZRiyOf.js → chunk-ZXARS5L4-CxN8oiwI.js} +1 -1
  346. package/web/assets/classDiagram-KGZ6W3CR-DJm9BgF-.js +1 -0
  347. package/web/assets/classDiagram-v2-72OJOZXJ-DJm9BgF-.js +1 -0
  348. package/web/assets/{context-builder-_HS0v2ma.js → context-builder-BHiFUA8O.js} +10 -2
  349. package/web/assets/{cose-bilkent-UX7MHV2Q-BHv2bbtl.js → cose-bilkent-UX7MHV2Q-D71wNYRJ.js} +1 -1
  350. package/web/assets/dagre-ND4H6XIP-BIkxmhcu.js +4 -0
  351. package/web/assets/diagram-3NCE3AQN-BTa6iH0T.js +43 -0
  352. package/web/assets/diagram-GF46GFSD-DZDV0vBj.js +24 -0
  353. package/web/assets/{diagram-HNR7UZ2L-fUWreZzx.js → diagram-HNR7UZ2L-DFCfd5LI.js} +2 -2
  354. package/web/assets/diagram-QXG6HAR7-BzM--Jj0.js +24 -0
  355. package/web/assets/diagram-WEQXMOUZ-DFFwz0k4.js +10 -0
  356. package/web/assets/{erDiagram-L5TCEMPS-QN2eEP1e.js → erDiagram-L5TCEMPS-CfHMJJqo.js} +1 -1
  357. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +1 -0
  358. package/web/assets/{flowDiagram-H6V6AXG4-CXbXImlN.js → flowDiagram-H6V6AXG4-Be805QiJ.js} +3 -3
  359. package/web/assets/{ganttDiagram-JCBTUEKG-BHQssTz6.js → ganttDiagram-JCBTUEKG-D3iL2Aet.js} +1 -1
  360. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +1 -0
  361. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +106 -0
  362. package/web/assets/index-BvYev1UJ.js +635 -0
  363. package/web/assets/index-_lgn7hs5.css +2 -0
  364. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +1 -0
  365. package/web/assets/infoDiagram-3YFTVSEB-Y7BKSoke.js +2 -0
  366. package/web/assets/{ishikawaDiagram-BNXS4ZKH-6LKOvBfp.js → ishikawaDiagram-BNXS4ZKH-CT4SHFuI.js} +1 -1
  367. package/web/assets/{journeyDiagram-M6C3CM3L-DNPYCpvq.js → journeyDiagram-M6C3CM3L-CvArszLo.js} +1 -1
  368. package/web/assets/{kanban-definition-75IXJCU3-DgDi9oJT.js → kanban-definition-75IXJCU3-C6yDxr7N.js} +3 -3
  369. package/web/assets/{katex-K3KEBU37-CrVLz8l7.js → katex-K3KEBU37-CTc5BslQ.js} +1 -1
  370. package/web/assets/{mindmap-definition-2TDM6QVE-CwR5sBB-.js → mindmap-definition-2TDM6QVE-BOc2WEne.js} +1 -1
  371. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +1 -0
  372. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +1 -0
  373. package/web/assets/{pieDiagram-CU6KROY3-By8g6f6B.js → pieDiagram-CU6KROY3-Cvc0f_Pd.js} +1 -1
  374. package/web/assets/{quadrantDiagram-VICAPDV7-bAm6Hi_5.js → quadrantDiagram-VICAPDV7-yXSZ2lLz.js} +1 -1
  375. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +1 -0
  376. package/web/assets/{requirementDiagram-JXO7QTGE-7oDcJ1_J.js → requirementDiagram-JXO7QTGE-BRcZvHs4.js} +1 -1
  377. package/web/assets/{sankeyDiagram-URQDO5SZ-LFJz53u5.js → sankeyDiagram-URQDO5SZ-1qEjlFIB.js} +1 -1
  378. package/web/assets/{sequenceDiagram-VS2MUI6T-FySeKCUy.js → sequenceDiagram-VS2MUI6T-PcSCuvrB.js} +3 -3
  379. package/web/assets/stateDiagram-7D4R322I-D6qYSV1E.js +1 -0
  380. package/web/assets/stateDiagram-v2-36443NZ5-Bg-ImOSX.js +1 -0
  381. package/web/assets/{timeline-definition-O6YCAMPW-Ds2CnVZK.js → timeline-definition-O6YCAMPW-QWkh01xw.js} +1 -1
  382. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +1 -0
  383. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +1 -0
  384. package/web/assets/{vennDiagram-MWXL3ELB-DUIEwXWp.js → vennDiagram-MWXL3ELB-ak4DfwuM.js} +3 -3
  385. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +1 -0
  386. package/web/assets/{wardleyDiagram-CUQ6CDDI-DEiFPQih.js → wardleyDiagram-CUQ6CDDI-CTzR4Loq.js} +1 -1
  387. package/web/assets/{xychartDiagram-N2JHSOCM-BUbayhST.js → xychartDiagram-N2JHSOCM-DA1BEaQz.js} +1 -1
  388. package/web/index.html +13 -15
  389. package/scripts/materialize-vendor-grammars.cjs +0 -97
  390. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BETj2x4g.js +0 -1
  391. package/web/assets/architectureDiagram-UL44E2DR-D1EXI0zA.js +0 -36
  392. package/web/assets/chunk-2T2R6R2M-n6s9JZqv.js +0 -4
  393. package/web/assets/chunk-2UTLFMKG-CMBB1TMN.js +0 -1
  394. package/web/assets/chunk-4R4BOZG6-mKhL59ul.js +0 -159
  395. package/web/assets/chunk-6764PJDD-ChwMM2z4.js +0 -1
  396. package/web/assets/chunk-7J6CGLKN-DT-b53FT.js +0 -10
  397. package/web/assets/chunk-C62D2QBJ-CDAWj26E.js +0 -1
  398. package/web/assets/chunk-CEXFNPSA-D68Tk6ls.js +0 -1
  399. package/web/assets/chunk-CilyBKbf.js +0 -1
  400. package/web/assets/chunk-J5EP6P6S-DxWW0yvu.js +0 -1
  401. package/web/assets/chunk-KGYTTC2M-C6PHeuay.js +0 -1
  402. package/web/assets/chunk-RERM46MO-DQNbXtfw.js +0 -1
  403. package/web/assets/chunk-RKZBBQEN-BmTPLSyv.js +0 -1
  404. package/web/assets/chunk-RLI5ZMPA-DExu2DOK.js +0 -1
  405. package/web/assets/chunk-T5OCTHI4--9wWpVws.js +0 -1
  406. package/web/assets/chunk-UP6H54XL-DsKdC6jC.js +0 -1
  407. package/web/assets/chunk-UXSXWOXI-DR81EqLr.js +0 -1
  408. package/web/assets/classDiagram-KGZ6W3CR-Bv93af_b.js +0 -1
  409. package/web/assets/classDiagram-v2-72OJOZXJ-CLfEqHUa.js +0 -1
  410. package/web/assets/dagre-ND4H6XIP-DsIr9MOv.js +0 -4
  411. package/web/assets/diagram-3NCE3AQN-BqAtKUpW.js +0 -43
  412. package/web/assets/diagram-GF46GFSD-CaBG6n6o.js +0 -24
  413. package/web/assets/diagram-QXG6HAR7-CZ-O3rcV.js +0 -24
  414. package/web/assets/diagram-WEQXMOUZ-P4lSL4GH.js +0 -10
  415. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-B3myHUst.js +0 -1
  416. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DF3rtf4A.js +0 -1
  417. package/web/assets/gitGraphDiagram-S2ZK5IYY-CCwVLT__.js +0 -106
  418. package/web/assets/index-BKWA-m7o.css +0 -2
  419. package/web/assets/index-CG6q8eTs.js +0 -626
  420. package/web/assets/info-J43DQDTF-KCYPFFUO-R4XV_akJ.js +0 -1
  421. package/web/assets/infoDiagram-3YFTVSEB-DmLICZx1.js +0 -2
  422. package/web/assets/packet-YPE3B663-LP52Z2RK-CgQPdNZa.js +0 -1
  423. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BzWOwc_c.js +0 -1
  424. package/web/assets/radar-GUYGQ44K-RDLRG3WG-B7KG0FN7.js +0 -1
  425. package/web/assets/stateDiagram-7D4R322I-CB2nABwH.js +0 -1
  426. package/web/assets/stateDiagram-v2-36443NZ5-COBGd2RL.js +0 -1
  427. package/web/assets/treeView-BLDUP644-QA4HXRO3-CRSxEwLO.js +0 -1
  428. package/web/assets/treemap-LRROVOQU-LLAWBHMP-a0PfKoVn.js +0 -1
  429. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-BKQ6e5mC.js +0 -1
  430. /package/web/assets/{chunk-AQ6EADP3-CCFje6lL.js → chunk-AQ6EADP3-CZhslHi-.js} +0 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Rust def/use harvester (#2195 U7) — the Rust analogue of
3
+ * {@link import('./typescript-harvest.js').TsHarvester} and the C-family /
4
+ * Go / Python / Swift / Kotlin / Dart harvesters. Like the Swift / Kotlin / Go /
5
+ * Python / Dart harvesters it harvests the per-function binding table
6
+ * ({@link BindingEntry}[]) plus {@link StatementFacts} (defs / uses / mayDefs)
7
+ * AND a taint {@link import('../types.js').SiteRecord} per call (callee path,
8
+ * receiver, per-arg occurrence entries, result defs, and an `at` anchor) via the
9
+ * shared {@link CallSiteFactAccumulator} — the same site substrate the
10
+ * C-family / Go / TS / Kotlin / Python / Dart / Swift harvesters emit, so Rust
11
+ * BasicBlocks get `callees` + `calleeIds`.
12
+ *
13
+ * RUST CALL SHAPE (verified by a real parse — see the probe table below). Rust
14
+ * has ONE call node, `call_expression { function, arguments }`, whose `function`
15
+ * field takes three shapes:
16
+ * 1. a bare `identifier` (`foo(x)`) — a FREE call; callee path = the name.
17
+ * 2. a `field_expression { value, field }` (`a.method(x)`) — a METHOD call
18
+ * (the `.` access). The dotted path is `a.method` (leaf `method`); the
19
+ * receiver is the chain ROOT binding (`a`). Chained `a.b.c()` nests
20
+ * `field_expression`s (path `a.b.c`, root `a`, mid-chain read `a.b`).
21
+ * 3. a `scoped_identifier { path, name }` (`Foo::bar(x)` / `a::b::c(x)`) — an
22
+ * associated-fn / path call. The path is joined with `.` (NOT `::`) so the
23
+ * LEAF after the last separator is the tail (`Foo::bar` ⇒ `Foo.bar` ⇒ leaf
24
+ * `bar`), exactly matching the Rust CALLS query, which tags this
25
+ * `@reference.call.free` with `@reference.name` = the tail `name:
26
+ * (identifier)` (`bar`), and matching how {@link
27
+ * import('../emit.js').calleesOfBlock} extracts the leaf via
28
+ * `callee.slice(callee.lastIndexOf('.') + 1)`. The receiver is set only when
29
+ * the path ROOT is a bound local (`a::b::c` with `a` a local ⇒ receiver `a`);
30
+ * a type/module root (`Foo`, `crate`) is not a value binding, so no receiver.
31
+ * 4. a `generic_function { function, type_arguments }` (`foo::<T>(x)`) — the
32
+ * turbofish form; `visitCall` unwraps the `function` field and recurses, so
33
+ * `foo::<T>(x)` records the same site as `foo(x)`.
34
+ * A `try_expression` (`foo()?`) wraps a `call_expression` — the inner call walks
35
+ * normally.
36
+ *
37
+ * STRUCT LITERALS ARE HARVESTED AS `kind: 'new'` (U4). A struct-literal
38
+ * expression `Point { x: 1 }` is a `struct_expression { name, body }`, NOT a
39
+ * `call_expression`. The Rust CALLS query tags it `@reference.call.constructor`
40
+ * (resolving to a constructor id), so `visitStruct` opens a `kind: 'new'` site
41
+ * whose callee path is the struct TYPE name (`mymod::Point` ⇒ dotted `mymod.Point`
42
+ * ⇒ leaf `Point`, the SAME tail the `@reference.name` capture resolves) and whose
43
+ * `at` is the `struct_expression` start (== the broadest-span
44
+ * `@reference.call.constructor` anchor — verified byte-equal for plain / scoped /
45
+ * turbofish / scoped+turbofish forms). The `name` field shapes are
46
+ * `type_identifier` (`Point`), `scoped_type_identifier` (`mymod::Point`), and
47
+ * `generic_type_with_turbofish` (`Foo::<T>` / `mymod::Bar::<T>`); all start at the
48
+ * same column as the `struct_expression`, so the anchor aligns. The struct's
49
+ * type/module head is no value binding ⇒ no receiver. Field-init VALUES
50
+ * (`field_initializer` `value`, shorthand `y`, base `..rest`) walk for
51
+ * uses/occurrences; field NAMES are not uses.
52
+ *
53
+ * MACROS ARE NOT HARVESTED. `println!(...)` / `vec!(...)` are `macro_invocation`
54
+ * nodes (a `macro` ident + a `token_tree`), NOT `call_expression`s. The Rust
55
+ * CALLS query tags them `@reference.macro` (a DISJOINT namespace resolved via the
56
+ * MacroRegistry to Macro defs, never a fn of the same name) — NOT
57
+ * `@reference.call.*`. So no resolved callee-id is keyed at a macro's position,
58
+ * and opening a call site there would put a leaf (`println`) into `callees` that
59
+ * the resolution side never produces — a spurious, unjoinable callee. We
60
+ * therefore record NO site for a macro (its argument identifiers still walk for
61
+ * uses via the default token-tree descent), keeping `callees` aligned with the
62
+ * CALLS resolution.
63
+ *
64
+ * ANCHOR ALIGNMENT (plan KTD7 — load-bearing): a call site's `at` MUST be the
65
+ * SAME `[line (1-based), col (0-based)]` the Rust CALLS resolution keys its
66
+ * `atRange` on, because a downstream unit joins the two by EXACT position. The
67
+ * Rust scope query (captures.ts) anchors `@reference.call.free` (free + scoped),
68
+ * `@reference.call.member`, and `@reference.call.constructor` on the WHOLE
69
+ * `call_expression` node (the `@reference.name` identifier / `field_identifier`
70
+ * and the `@reference.receiver` are SUB-tags in `KNOWN_SUB_TAGS`, excluded by the
71
+ * broadest-span rule in `anchorCaptureFor`; `atRange: anchor.range` at
72
+ * scope-extractor.ts:1030). So for a free call `foo(x)`, a method call
73
+ * `a.method(x)`, a path call `Foo::bar(x)`, and a chained call `a.b.c(x)` alike,
74
+ * `at` is the start of the enclosing `call_expression` node — which, for a
75
+ * method/chained call, starts at the RECEIVER (`a`), and for a path call at the
76
+ * head segment (`Foo`), exactly where the CALLS anchor starts too. This is the
77
+ * Swift / Go / Python / Kotlin whole-call-node model, NOT the Dart callee-name
78
+ * model. `visitCall` receives exactly the `call_expression` node and records
79
+ * `[node.startPosition.row + 1, node.startPosition.column]`.
80
+ *
81
+ * Runs in the parse worker next to the Rust CFG visitor. Output is the binding
82
+ * table the {@link import('../cfg-builder.js').CfgBuilder} stamps onto the CFG,
83
+ * plus the per-block def/use facts the reaching-defs / CDG solvers consume.
84
+ *
85
+ * Every node type and field literal below was grammar-validated against
86
+ * tree-sitter-rust via the introspection probe before use (mandatory pre-step).
87
+ * Rust shapes pre-empted (verified by a real parse):
88
+ * - functions: `function_item` (fields `name`/`parameters`/`return_type`/`body`;
89
+ * methods are `function_item` inside an `impl_item`'s `declaration_list`) and
90
+ * `closure_expression` (field `parameters`=`closure_parameters`, `body` is a
91
+ * `block` OR a bare expression).
92
+ * - parameters: `parameter` (field `pattern`, optional `mutable_specifier`),
93
+ * `self_parameter`. A `closure_parameters` lists bare `identifier`s and/or
94
+ * `parameter` nodes.
95
+ * - declarations: `let_declaration` (field `pattern`, optional `value`, optional
96
+ * `alternative` block for `let … else`; optional `mutable_specifier`). The
97
+ * `mut` keyword is irrelevant to def-ness.
98
+ * - patterns (each bound `identifier` leaf is a def): `identifier`,
99
+ * `tuple_pattern`, `slice_pattern`, `struct_pattern` (`field_pattern`s whose
100
+ * `name` is a `shorthand_field_identifier`, or `name: pat`), `tuple_struct_pattern`
101
+ * (field `type` is the variant path — NOT a binding; the inner patterns bind),
102
+ * `ref_pattern` / `mut_pattern` (the inner identifier binds), `captured_pattern`
103
+ * (`v @ subpat` — `v` binds, and the subpattern's leaves bind), `or_pattern`,
104
+ * `range_pattern` (binds nothing). The wildcard `_` binds nothing.
105
+ * - assignments: `assignment_expression` (fields `left`/`right`),
106
+ * `compound_assignment_expr` (fields `left`/`operator`/`right` — read+write).
107
+ * - loop / match binders: `for_expression` `pattern`; `match_arm` `pattern`
108
+ * (a `match_pattern` whose leaves bind, plus an optional `if` guard with field
109
+ * `condition`); `let_condition` `pattern` (`if let` / `while let`).
110
+ * - reads: `field_expression` (fields `value`/`field`), `call_expression`
111
+ * (fields `function`/`arguments`), `binary_expression` (fields
112
+ * `left`/`operator`/`right`), `try_expression` (`expr?`).
113
+ *
114
+ * TWO-PHASE, ORDER-INDEPENDENT (load-bearing — mirrors the TS / Go / C
115
+ * harvesters): the CFG walk is NOT source-order, so resolving names against a
116
+ * scope stack populated *during* the walk would mis-resolve. Phase 1 pre-scans
117
+ * the whole function subtree once, declaring every bound name into ONE function
118
+ * table; phase 2 resolves defs/uses against that finished table from any walk
119
+ * order. Rust DOES have block scope + shadowing, but a single function table is
120
+ * the documented v1 simplification used by the Python harvester — distinct
121
+ * shadowing redeclarations of the same name collapse onto one binding (an
122
+ * over-approximation that can falsely kill across a shadow, the sound direction
123
+ * for taint: never a missed flow).
124
+ *
125
+ * v1 def-semantics scope:
126
+ * - `let PAT = …` (and `let PAT = … else { … }`) — each identifier leaf of PAT
127
+ * is a def; the value (and the `else` block) are walked for uses.
128
+ * - `assignment_expression` plain `=` — a plain-identifier lvalue is a def; a
129
+ * `field_expression` / index lvalue is NOT a scalar def (its root is a use).
130
+ * - `compound_assignment_expr` (`x += 1`) — def AND use the lvalue.
131
+ * - `for PAT in ITER` — the loop pattern's leaves are defs, ITER a use.
132
+ * - `match` arm patterns bind their leaves; `if let` / `while let` patterns bind.
133
+ * - parameters (incl. `mut`, typed, closure params) are `param`-kind defs.
134
+ * EXCLUDED, deliberately (TypeScript-CFA precedent): field / index writes
135
+ * (`obj.f = …`, `arr[i] = …`) are NOT scalar defs — their root identifiers are
136
+ * uses only. Nested-function bodies (`closure_expression`, an inner
137
+ * `function_item`) are opaque in BOTH directions (captured reads/writes invisible).
138
+ *
139
+ * MAY-DEFS: a def inside a conditionally-evaluated subexpression — the right
140
+ * operand of `&&` / `||` short-circuit, and a match-arm guard / `if let` pattern
141
+ * test — is a may-def (gen WITHOUT kill), so the not-taken path's prior def is
142
+ * not falsely killed. (Rust assignment is an expression but yields `()`, so an
143
+ * in-`&&` assignment is rare; the machinery is kept for guard / case-test parity.)
144
+ *
145
+ * Identifiers with no in-function declaration (module items, imported names,
146
+ * constants, enum variants) resolve to a SYNTHETIC module-level binding
147
+ * (`name@module`), applied identically by def and use harvesting.
148
+ *
149
+ * NOTE: nothing serialized here may carry a field named `nodeId` — the durable
150
+ * parsedfile-store reviver dedups objects keyed on that field name.
151
+ */
152
+ import type { SyntaxNode } from '../../utils/ast-helpers.js';
153
+ import type { BindingEntry, StatementFacts } from '../types.js';
154
+ export declare class RustHarvester {
155
+ private readonly fnNode;
156
+ private readonly bindings;
157
+ /** Single function-scope name → binding index (v1: no block scope). */
158
+ private readonly table;
159
+ private readonly synthetic;
160
+ private readonly fnId;
161
+ /** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
162
+ private conditionalDepth;
163
+ /**
164
+ * `call_expression` node id → binding indices its single-target result is
165
+ * assigned to (`let x = f()` / `x = g()` ⇒ `[x]`). Populated just before the
166
+ * value walk reaches the call (see {@link registerResultDefs}) and consumed by
167
+ * {@link visitCall}. Mirrors the Swift / Kotlin / Go / Python harvesters' map.
168
+ */
169
+ private readonly resultDefTargets;
170
+ constructor(fnNode: SyntaxNode);
171
+ /** The completed binding table — pass to `CfgBuilder.finish`. */
172
+ bindingTable(): readonly BindingEntry[];
173
+ /** The function/closure body node (a `block` for a fn, block-or-expr for a closure). */
174
+ private bodyOf;
175
+ private declare;
176
+ /** Declare every parameter binder of a fn / closure (incl. `mut`, typed). */
177
+ private declareParams;
178
+ /**
179
+ * Pre-scan the function body once, declaring every bound name. Recurses into
180
+ * compound expressions but NOT into nested `function_item` / `closure_expression`
181
+ * bodies (opaque).
182
+ */
183
+ private prescan;
184
+ /**
185
+ * Declare every identifier leaf of a binding pattern. Handles the full Rust
186
+ * pattern taxonomy: tuple / slice / struct / tuple-struct / ref / mut /
187
+ * captured (`@`) / or patterns. A `tuple_struct_pattern`'s `type` field is the
188
+ * variant PATH (`Some`, `Ok`) — not a binding; only its inner patterns bind.
189
+ * `_`, literals and range patterns bind nothing.
190
+ */
191
+ private declarePattern;
192
+ /** `field_pattern` — shorthand `x` binds `x`; `x: pat` binds `pat`'s leaves. */
193
+ private declareFieldPattern;
194
+ /** Def/use facts for one statement (or construct-header expression) node. */
195
+ facts(node: SyntaxNode): StatementFacts;
196
+ /** Facts for an expression whose WHOLE evaluation is conditional (guards/tests). */
197
+ factsConditional(node: SyntaxNode): StatementFacts;
198
+ /**
199
+ * Facts for a `for PAT in ITER` head: the loop pattern's leaves are defs, the
200
+ * iterated expression a use.
201
+ */
202
+ forHeadFacts(stmt: SyntaxNode): StatementFacts;
203
+ /**
204
+ * Facts for ONLY a `let_declaration`'s PATTERN bindings (no value walk) — used
205
+ * when the value is a control-flow expression already harvested by the visitor,
206
+ * so the binding defs land on a separate continuation block without
207
+ * double-counting the value's uses.
208
+ */
209
+ letPatternFacts(stmt: SyntaxNode): StatementFacts;
210
+ /**
211
+ * Facts for a `let PAT = VALUE` condition (`if let` / `while let`): the value
212
+ * is a use, the pattern's leaves are defs. When `conditional` is true the defs
213
+ * become may-defs (a `while let` re-test may not bind on the exit iteration).
214
+ */
215
+ letConditionFacts(cond: SyntaxNode, conditional: boolean): StatementFacts;
216
+ /**
217
+ * Facts for a `match` arm's PATTERN bindings (#2206): `Some(n) => …` binds `n`
218
+ * from the matched subject. The bindings are MAY-defs (only the arm that
219
+ * actually matches binds; a later arm tests only when earlier ones didn't) and
220
+ * are attached to the dispatch block, co-located with the subject's use, so a
221
+ * tainted subject can propagate to the arm binding. The guard is skipped by
222
+ * {@link defPattern}'s `match_pattern` handling. `undefined` when the pattern
223
+ * binds nothing (`_`, a literal, a unit variant).
224
+ */
225
+ matchArmPatternFacts(arm: SyntaxNode): StatementFacts | undefined;
226
+ /** ENTRY-block facts for the parameters (defs only — incl. default-position uses). */
227
+ paramFacts(): StatementFacts | undefined;
228
+ private resolve;
229
+ private def;
230
+ private use;
231
+ /** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
232
+ private conditional;
233
+ /**
234
+ * Def each identifier leaf of a binding pattern (the def-position analogue of
235
+ * {@link declarePattern}). A `tuple_struct_pattern`'s `type` field path is a
236
+ * variant name, not a def; its inner patterns bind. A struct field shorthand
237
+ * binds; `_` binds nothing.
238
+ */
239
+ private defPattern;
240
+ private defFieldPattern;
241
+ /** Value-position walk: collect uses; route def positions to the pattern handler. */
242
+ private walkValue;
243
+ /**
244
+ * When `value`'s root (after unwrapping a `try_expression`) is a
245
+ * `call_expression`, remember that call site should carry `resultDefs` — the
246
+ * binding indices of `targets` (def-position identifiers). Consumed by
247
+ * {@link visitCall} once the value walk reaches the node. Single-target only;
248
+ * the blank target (`_`) binds nothing.
249
+ */
250
+ private registerResultDefs;
251
+ /** Strip a `try_expression` (`expr?`) / `await_expression` wrapper around a value. */
252
+ private unwrapValue;
253
+ /**
254
+ * Open + populate a call site for a Rust `call_expression`. `node` IS the
255
+ * `call_expression` — the SAME node the scope query anchors `@reference.call.*`
256
+ * on (its `atRange`), so the resolved-id join lands by exact position (see file
257
+ * header ANCHOR ALIGNMENT). A `call_expression` is always `kind: 'call'`; struct
258
+ * literals (`kind: 'new'`) are harvested separately by {@link visitStruct}.
259
+ */
260
+ private visitCall;
261
+ /**
262
+ * Open + populate a `kind: 'new'` site for a Rust `struct_expression`
263
+ * (`Point { x: 1 }`, `mymod::Point { .. }`, `Foo::<T> { .. }`). `node` IS the
264
+ * `struct_expression` — the SAME node the Rust scope query anchors
265
+ * `@reference.call.constructor` on (its `atRange`), so the resolved
266
+ * constructor-id join lands by exact position. The `name` field of a
267
+ * `struct_expression` is a `type_identifier` (`Point`), a
268
+ * `scoped_type_identifier` (`mymod::Point`), or a `generic_type_with_turbofish`
269
+ * (`Foo::<T>` / `mymod::Bar::<T>`); all three start at the SAME column as the
270
+ * enclosing `struct_expression` (verified by a real parse), so the broadest-span
271
+ * `@reference.call.constructor` anchor == the `struct_expression` start.
272
+ *
273
+ * The callee path joins the `::`-segments of the type with `.` (NOT `::`) so the
274
+ * LEAF after the last separator is the tail (`mymod::Point` ⇒ `mymod.Point` ⇒
275
+ * leaf `Point`), exactly the tail the CALLS query's `@reference.name` capture
276
+ * resolves and the tail {@link import('../emit.js').calleesOfBlock} extracts via
277
+ * `lastIndexOf('.')`. A type/module path head is never a value binding, so no
278
+ * receiver (mirrors {@link harvestScopedCallee}). The field-init VALUES
279
+ * (`field_initializer` `value`, shorthand `y`, base `..rest`) walk for
280
+ * uses/occurrences; field NAMES are not uses.
281
+ */
282
+ private visitStruct;
283
+ /**
284
+ * Build the dotted type path of a `struct_expression`'s `name` field. The name
285
+ * is a `type_identifier` (`Point`), a `scoped_type_identifier`
286
+ * (`mymod::Point` — `path` + tail `name` type_identifier), or a
287
+ * `generic_type_with_turbofish` (`Foo::<T>` / `mymod::Bar::<T>` — its `type`
288
+ * field is a `type_identifier` or a `scoped_identifier`; the turbofish
289
+ * `type_arguments` are dropped). Segments join with `.` so the leaf is the type
290
+ * tail (matching the CALLS `@reference.name` tail capture). Returns `undefined`
291
+ * when no segments could be read (defensive — keeps a mis-anchored site from
292
+ * carrying a bogus callee).
293
+ */
294
+ private structTypePath;
295
+ /**
296
+ * Record the callee path + receiver for a `call_expression`'s `function` node.
297
+ * Free `identifier` (`foo`), method `field_expression` (`a.method`, receiver
298
+ * root `a`), path `scoped_identifier` (`Foo::bar` ⇒ dotted `Foo.bar`, leaf
299
+ * `bar`), and the turbofish `generic_function` (`foo::<T>` — unwrap the
300
+ * `function` field and recurse). Anything else (a call-rooted chain `f()()`,
301
+ * a parenthesized callable) walks for uses with no static callee path.
302
+ */
303
+ private harvestCallee;
304
+ /**
305
+ * Walk a `scoped_identifier` (`Foo::bar`, `a::b::c`) callee. The `::`-segments
306
+ * are joined with `.` (NOT `::`) so the LEAF after the last separator is the
307
+ * tail (`Foo::bar` ⇒ `Foo.bar` ⇒ leaf `bar`), matching the Rust CALLS query's
308
+ * `@reference.name` tail capture and {@link
309
+ * import('../emit.js').calleesOfBlock}'s `lastIndexOf('.')` leaf rule. The
310
+ * receiver is set only when the head segment is a bound LOCAL (`a::b::c` with
311
+ * `a` a local); a type / module head (`Foo`, `crate`) is no value binding.
312
+ */
313
+ private harvestScopedCallee;
314
+ /**
315
+ * `field_expression` chain walk shared by value position and callee position.
316
+ * Records the chain-root identifier as a use plus at most ONE member-read site
317
+ * — the INNERMOST access — when the root is an identifier; `skipFinalRead`
318
+ * suppresses it when that access is the callee (carried by the dotted path
319
+ * instead). Mirrors the Swift / Kotlin / Go / Python harvesters' walkChain. A
320
+ * non-identifier root (`self`/literal/call) launders no static path/receiver
321
+ * but its uses + nested sites are still walked.
322
+ */
323
+ private walkChain;
324
+ }