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,87 @@
1
+ /**
2
+ * Shared scope-tree substrate for the C-family / Go / Java / C# def/use
3
+ * harvesters (#2197 U6, plan KTD4 — a byte-equivalent consolidation).
4
+ *
5
+ * The Go ({@link import('./go-harvest.js').GoHarvester}), Java ({@link
6
+ * import('./java-harvest.js').JavaHarvester}), C# ({@link
7
+ * import('./csharp-harvest.js').CsharpHarvester}) and C/C++ ({@link
8
+ * import('./c-cpp-harvest.js').CCppHarvester}) harvesters each carried a
9
+ * BYTE-IDENTICAL copy of the lexical scope tree machinery: the {@link Scope}
10
+ * record, the binding/scope/synthetic state, the two-phase resolution cache, and
11
+ * the `openScope` / `nearestScopeOf` / `resolve` / `def` / `use` / `conditional`
12
+ * / `bindingTable` methods. This base holds that one copy; the four harvesters
13
+ * extend it and supply ONLY their genuine per-language variation — the
14
+ * `prescan` switch (abstract) and, for Go, the blank-identifier (`_`) overrides
15
+ * of `declare` / `def` / `use`.
16
+ *
17
+ * TWO-PHASE, ORDER-INDEPENDENT (load-bearing): the CFG walk is NOT source-order
18
+ * (`visitFor` builds the init block after the body, `visitDoWhile` the condition
19
+ * before the body), so resolving names against a scope stack populated *during*
20
+ * the walk would mis-resolve. Phase 1 (`prescan`, per-language) pre-scans the
21
+ * whole function subtree once into a completed lexical scope tree; phase 2
22
+ * (`resolve`) resolves defs/uses against that finished tree from any walk order.
23
+ *
24
+ * Identifiers with no in-function declaration (globals, fields, imports, …)
25
+ * resolve to a SYNTHETIC module-level binding (`name@module`), created on first
26
+ * reference and applied identically by def and use harvesting.
27
+ *
28
+ * NOTE: nothing serialized via the harvested bindings/facts may carry a field
29
+ * named `nodeId` — the durable parsedfile-store reviver dedups objects keyed on
30
+ * that field name.
31
+ */
32
+ import type { SyntaxNode } from '../../utils/ast-helpers.js';
33
+ import type { BindingEntry } from '../types.js';
34
+ import { CallSiteFactAccumulator } from './call-site-harvest.js';
35
+ /**
36
+ * The per-statement def/use + call-site collector, aliased to the shared
37
+ * {@link CallSiteFactAccumulator} (one name for the value and the type).
38
+ */
39
+ export type FactAccumulator = CallSiteFactAccumulator;
40
+ export interface Scope {
41
+ readonly parent: Scope | null;
42
+ /** name → binding index */
43
+ readonly table: Map<string, number>;
44
+ }
45
+ /**
46
+ * Abstract base owning the lexical scope tree + the two-phase resolution
47
+ * substrate. Subclasses provide the per-language constructor wiring (param /
48
+ * receiver declaration + the body `prescan` kick-off) and the abstract
49
+ * `prescan`; Go additionally overrides `declare` / `def` / `use` for its `_`
50
+ * blank-identifier semantics.
51
+ */
52
+ export declare abstract class ScopeTreeHarvester {
53
+ protected readonly fnNode: SyntaxNode;
54
+ protected readonly bindings: BindingEntry[];
55
+ protected readonly scopeByNode: Map<number, Scope>;
56
+ protected readonly root: Scope;
57
+ protected readonly synthetic: Map<string, number>;
58
+ protected readonly fnId: number;
59
+ /** Innermost enclosing scope per visited node id (prescan-filled) — O(scope-chain) phase-2 resolution. */
60
+ protected readonly nearestScopeCache: Map<number, Scope>;
61
+ /** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
62
+ protected conditionalDepth: number;
63
+ /**
64
+ * Call/new node id → bindings whose declaration/assignment VALUE is exactly
65
+ * that call (#2195 U6). Registered before the value walk, consumed by the
66
+ * language harvester's `visitCall` (mirrors the TS harvester's
67
+ * `resultDefTargets`).
68
+ */
69
+ protected readonly resultDefTargets: Map<number, number[]>;
70
+ constructor(fnNode: SyntaxNode);
71
+ /** The completed binding table — pass to `CfgBuilder.finish`. */
72
+ bindingTable(): readonly BindingEntry[];
73
+ protected openScope(node: SyntaxNode): Scope;
74
+ protected nearestScopeOf(node: SyntaxNode): Scope;
75
+ protected declare(nameNode: SyntaxNode, kind: BindingEntry['kind'], scope: Scope): void;
76
+ /**
77
+ * Phase-1 declaration pre-scan — the only genuine per-language variation (each
78
+ * grammar has a distinct declaration-node taxonomy). Walks the function
79
+ * subtree once, filling `nearestScopeCache` and the scope tables.
80
+ */
81
+ protected abstract prescan(node: SyntaxNode, scope: Scope): void;
82
+ protected resolve(nameNode: SyntaxNode): number;
83
+ protected def(nameNode: SyntaxNode, acc: FactAccumulator): void;
84
+ protected use(nameNode: SyntaxNode, acc: FactAccumulator): void;
85
+ /** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
86
+ protected conditional(fn: () => void): void;
87
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Abstract base owning the lexical scope tree + the two-phase resolution
3
+ * substrate. Subclasses provide the per-language constructor wiring (param /
4
+ * receiver declaration + the body `prescan` kick-off) and the abstract
5
+ * `prescan`; Go additionally overrides `declare` / `def` / `use` for its `_`
6
+ * blank-identifier semantics.
7
+ */
8
+ export class ScopeTreeHarvester {
9
+ fnNode;
10
+ bindings = [];
11
+ scopeByNode = new Map();
12
+ root = { parent: null, table: new Map() };
13
+ synthetic = new Map();
14
+ fnId;
15
+ /** Innermost enclosing scope per visited node id (prescan-filled) — O(scope-chain) phase-2 resolution. */
16
+ nearestScopeCache = new Map();
17
+ /** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
18
+ conditionalDepth = 0;
19
+ /**
20
+ * Call/new node id → bindings whose declaration/assignment VALUE is exactly
21
+ * that call (#2195 U6). Registered before the value walk, consumed by the
22
+ * language harvester's `visitCall` (mirrors the TS harvester's
23
+ * `resultDefTargets`).
24
+ */
25
+ resultDefTargets = new Map();
26
+ constructor(fnNode) {
27
+ this.fnNode = fnNode;
28
+ this.fnId = fnNode.id;
29
+ this.scopeByNode.set(fnNode.id, this.root);
30
+ }
31
+ /** The completed binding table — pass to `CfgBuilder.finish`. */
32
+ bindingTable() {
33
+ return this.bindings;
34
+ }
35
+ // ── phase 1: declaration pre-scan ────────────────────────────────────────
36
+ openScope(node) {
37
+ const existing = this.scopeByNode.get(node.id);
38
+ if (existing)
39
+ return existing;
40
+ const scope = { parent: this.nearestScopeOf(node), table: new Map() };
41
+ this.scopeByNode.set(node.id, scope);
42
+ return scope;
43
+ }
44
+ nearestScopeOf(node) {
45
+ for (let p = node.parent; p; p = p.parent) {
46
+ const s = this.scopeByNode.get(p.id);
47
+ if (s)
48
+ return s;
49
+ if (p.id === this.fnId)
50
+ break;
51
+ }
52
+ return this.root;
53
+ }
54
+ declare(nameNode, kind, scope) {
55
+ const name = nameNode.text;
56
+ if (!name || scope.table.has(name))
57
+ return;
58
+ scope.table.set(name, this.bindings.length);
59
+ this.bindings.push({
60
+ name,
61
+ declLine: nameNode.startPosition.row + 1,
62
+ declColumn: nameNode.startPosition.column,
63
+ kind,
64
+ });
65
+ }
66
+ // ── phase 2: per-statement fact extraction ───────────────────────────────
67
+ resolve(nameNode) {
68
+ const name = nameNode.text;
69
+ const cached = this.nearestScopeCache.get(nameNode.id);
70
+ let startScope = cached ?? null;
71
+ if (!startScope) {
72
+ for (let p = nameNode; p; p = p.parent) {
73
+ const scope = this.scopeByNode.get(p.id) ?? this.nearestScopeCache.get(p.id);
74
+ if (scope) {
75
+ startScope = scope;
76
+ break;
77
+ }
78
+ if (p.id === this.fnId) {
79
+ startScope = this.root;
80
+ break;
81
+ }
82
+ }
83
+ }
84
+ for (let s = startScope; s; s = s.parent) {
85
+ const idx = s.table.get(name);
86
+ if (idx !== undefined)
87
+ return idx;
88
+ }
89
+ let idx = this.synthetic.get(name);
90
+ if (idx === undefined) {
91
+ idx = this.bindings.length;
92
+ this.synthetic.set(name, idx);
93
+ this.bindings.push({ name, declLine: 0, declColumn: 0, kind: 'module', synthetic: true });
94
+ }
95
+ return idx;
96
+ }
97
+ def(nameNode, acc) {
98
+ if (this.conditionalDepth > 0)
99
+ acc.addMayDef(this.resolve(nameNode));
100
+ else
101
+ acc.addDef(this.resolve(nameNode));
102
+ }
103
+ use(nameNode, acc) {
104
+ acc.addUse(this.resolve(nameNode));
105
+ }
106
+ /** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
107
+ conditional(fn) {
108
+ this.conditionalDepth++;
109
+ try {
110
+ fn();
111
+ }
112
+ finally {
113
+ this.conditionalDepth--;
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Swift def/use harvester (#2195) — the Swift analogue of
3
+ * {@link import('./typescript-harvest.js').TsHarvester} and the C-family / Go /
4
+ * Rust / Kotlin / Python harvesters. Like the Kotlin / Go / Python / Dart
5
+ * harvesters it harvests the per-function binding table ({@link BindingEntry}[])
6
+ * plus {@link StatementFacts} (defs / uses / mayDefs) AND a taint
7
+ * {@link import('../types.js').SiteRecord} per call (callee path, receiver,
8
+ * per-arg occurrence entries, result defs, and an `at` anchor) via the shared
9
+ * {@link CallSiteFactAccumulator} — the same site substrate the C-family / Go /
10
+ * TS / Kotlin / Python / Dart harvesters emit.
11
+ *
12
+ * SWIFT CALL SHAPE (verified by a real parse — see below; structurally identical
13
+ * to Kotlin). A call is a `call_expression` whose LAST child is a `call_suffix`
14
+ * (holding the `value_arguments` and/or a trailing closure `lambda_literal`); the
15
+ * callee is the preceding expression — a bare `simple_identifier` (`foo(...)`)
16
+ * for a FREE call, or a `navigation_expression` (`obj.method` / `a?.b`, fields
17
+ * `target`/`suffix`→`navigation_suffix`→`suffix`:`simple_identifier`) for a
18
+ * MEMBER call. A chained call `a.b.c()` nests `navigation_expression`s; the
19
+ * receiver is the chain ROOT binding (`self`/literal roots launder no taint —
20
+ * no receiver). Swift has no `new` — an init call `Foo(...)` is an ordinary
21
+ * `call_expression` with a `simple_identifier` callee, so every site is
22
+ * `kind: 'call'` (the CALLS query re-tags an UpperCamelCase callee
23
+ * `@reference.call.constructor`, but the harvester only needs callee + receiver
24
+ * + `at` right — `kind` is not joined). A `value_argument` carries its value in
25
+ * the `value` field; a labeled arg's `value_argument_label` (`name:`) is dropped,
26
+ * so only the value occurrence is recorded (an `&inout` value walks its target
27
+ * for the use). Trailing closures (`xs.map { … }`) are a nested `lambda_literal`
28
+ * — opaque (in {@link NESTED_FUNCTION_TYPES}), NOT an argument occurrence.
29
+ *
30
+ * ANCHOR ALIGNMENT (plan KTD7 — load-bearing): a call site's `at` MUST be the
31
+ * SAME `[line (1-based), col (0-based)]` the Swift CALLS resolution keys its
32
+ * `atRange` on, because a downstream unit joins the two by EXACT position. The
33
+ * Swift scope query (query.ts) anchors `@reference.call.free`,
34
+ * `@reference.call.member`, and `@reference.call.constructor` on the WHOLE
35
+ * `call_expression` node (the `@reference.name` simple_identifier and the
36
+ * `@reference.receiver` are SUB-tags, excluded from the anchor by
37
+ * `KNOWN_SUB_TAGS` + the broadest-span rule in `anchorCaptureFor`; the
38
+ * constructor re-tag at `captures.ts` reuses the same call_expression node, and
39
+ * `atRange: anchor.range` at scope-extractor.ts:1030). So for a free call
40
+ * `foo(x)`, a member call `obj.method(x)`, a chained call `a.b.c(x)`, and an init
41
+ * call `Foo(x)` alike, `at` is the start of the enclosing `call_expression` node
42
+ * — which, for a member/chained call, starts at the RECEIVER (`obj`/`a`), exactly
43
+ * where the CALLS anchor starts too. This is the Kotlin/Go/Python whole-call-node
44
+ * model, NOT the Dart callee-name model. `visitCall` receives exactly the
45
+ * `call_expression` node and records `[node.startPosition.row + 1,
46
+ * node.startPosition.column]`.
47
+ *
48
+ * Runs in the parse worker next to the Swift CFG visitor. Output is the binding
49
+ * table the {@link import('../cfg-builder.js').CfgBuilder} stamps onto the CFG,
50
+ * plus the per-block def/use facts the reaching-defs / CDG solvers consume.
51
+ *
52
+ * Every node type and field literal below was grammar-validated against the
53
+ * VENDORED tree-sitter-swift via the introspection probe before use (mandatory
54
+ * pre-step). Swift shapes pre-empted (verified by a real parse):
55
+ * - functions: `function_declaration` / `init_declaration` / `deinit_declaration`
56
+ * (field `body`=`function_body`, which wraps a `statements` node) and
57
+ * `lambda_literal` (a closure — its `statements` follow an optional
58
+ * `lambda_function_type` + `in`, NO `function_body` wrapper).
59
+ * - parameters: `parameter` (fields `external_name`?/`name`=`simple_identifier`,
60
+ * plus a type child). A closure's parameters live in `lambda_function_type` →
61
+ * `lambda_function_type_parameters` (bare `simple_identifier`s).
62
+ * - `property_declaration` — Swift's `let`/`var` binding: a `value_binding_pattern`
63
+ * (`mutability` = `let`/`var`), then repeated `name`=`pattern` + `value`= pairs
64
+ * (`let p = 1, q = 2`). A `pattern` binds via `bound_identifier`=`simple_identifier`
65
+ * or nests `pattern`s for tuple destructuring (`let (a, b) = pair`).
66
+ * - optional binding (`if let` / `while let` / `guard let`): a `value_binding_pattern`
67
+ * in the construct's `condition` fields, then a `bound_identifier` field and the
68
+ * bound value as further `condition` fields.
69
+ * - `for_statement` fields `item`=`pattern` / `collection` / optional `where_clause`.
70
+ * - `catch_block` field `error`=`pattern` (the bound error).
71
+ * - reads: `simple_identifier`, `navigation_expression` (`a.b` — fields
72
+ * `target`/`suffix`), `call_expression` (`f()` — `call_suffix`),
73
+ * `assignment` (fields `target`/`operator`/`result`).
74
+ *
75
+ * TWO-PHASE, ORDER-INDEPENDENT (load-bearing — mirrors the Rust / Go / C
76
+ * harvesters): the CFG walk is NOT source-order (`repeat … while` builds the
77
+ * condition after the body), so resolving names against a scope stack populated
78
+ * *during* the walk would mis-resolve. Phase 1 pre-scans the whole function
79
+ * subtree once, declaring every bound name into ONE function table; phase 2
80
+ * resolves defs/uses against that finished table from any walk order. Swift DOES
81
+ * have block scope + shadowing, but a single function table is the documented v1
82
+ * simplification used by the Python / Rust harvesters — distinct shadowing
83
+ * redeclarations of the same name collapse onto one binding (an over-approximation
84
+ * that can falsely kill across a shadow, the sound direction for taint).
85
+ *
86
+ * v1 def-semantics scope:
87
+ * - `property_declaration` (`let`/`var PAT = …`) — each `simple_identifier`
88
+ * leaf of every `name` pattern is a def; the values are walked for uses.
89
+ * - `assignment` plain `=` — a plain-identifier target is a def; a
90
+ * `navigation_expression` / subscript target (`self.x = …`, `a[i] = …`) is
91
+ * NOT a scalar def (its root is a use). A compound `+=`/`-=`/… target
92
+ * def-AND-uses the lvalue.
93
+ * - `for x in xs` — the loop pattern's leaves are defs, the collection a use.
94
+ * - optional binding (`if let` / `while let` / `guard let`) binds its pattern.
95
+ * - `catch_block`'s `error` pattern binds.
96
+ * - parameters (incl. closure params) are `param`-kind defs.
97
+ * EXCLUDED, deliberately (TypeScript-CFA precedent): member / subscript writes
98
+ * (`obj.f = …`, `a[i] = …`) are NOT scalar defs — their root identifiers are
99
+ * uses only. Nested-function bodies (`lambda_literal`, a nested
100
+ * `function_declaration`) are opaque in BOTH directions (captured reads/writes
101
+ * invisible).
102
+ *
103
+ * MAY-DEFS: a def inside a conditionally-evaluated subexpression — the right
104
+ * operand of `&&` / `||` short-circuit, and a switch-case `where` guard / case
105
+ * test — is a may-def (gen WITHOUT kill), so the not-taken path's prior def is
106
+ * not falsely killed. A `while let` re-test binding is also a may-def (the bind
107
+ * does not happen on the exit iteration).
108
+ *
109
+ * Identifiers with no in-function declaration (module/global functions, types,
110
+ * enum cases) resolve to a SYNTHETIC module-level binding (`name@module`),
111
+ * applied identically by def and use harvesting.
112
+ *
113
+ * NOTE: nothing serialized here may carry a field named `nodeId` — the durable
114
+ * parsedfile-store reviver dedups objects keyed on that field name.
115
+ */
116
+ import type { SyntaxNode } from '../../utils/ast-helpers.js';
117
+ import type { BindingEntry, StatementFacts } from '../types.js';
118
+ export declare class SwiftHarvester {
119
+ private readonly fnNode;
120
+ private readonly bindings;
121
+ /** Single function-scope name → binding index (v1: no block scope). */
122
+ private readonly table;
123
+ private readonly synthetic;
124
+ private readonly fnId;
125
+ /** >0 while walking a conditionally-evaluated subexpression — defs become may-defs. */
126
+ private conditionalDepth;
127
+ /**
128
+ * `call_expression` node id → binding indices its single-target result is
129
+ * assigned to (`let x = f()` / `x = g()` ⇒ `[x]`). Populated just before the
130
+ * value walk reaches the call (see {@link registerResultDefs}) and consumed by
131
+ * {@link visitCall}. Mirrors the Kotlin / Go / Python harvesters' map.
132
+ */
133
+ private readonly resultDefTargets;
134
+ constructor(fnNode: SyntaxNode);
135
+ /** The completed binding table — pass to `CfgBuilder.finish`. */
136
+ bindingTable(): readonly BindingEntry[];
137
+ /**
138
+ * The function/closure body `statements` node. A `function_declaration` /
139
+ * `init_declaration` / `deinit_declaration` wraps it in a `function_body`; a
140
+ * `lambda_literal` carries the `statements` directly.
141
+ */
142
+ private bodyOf;
143
+ private declare;
144
+ /** Declare every parameter binder of a fn / init / closure. */
145
+ private declareParams;
146
+ private declareClosureParams;
147
+ /**
148
+ * Pre-scan the function body once, declaring every bound name. Recurses into
149
+ * compound expressions but NOT into nested `function_declaration` /
150
+ * `lambda_literal` bodies (opaque).
151
+ */
152
+ private prescan;
153
+ /** Declare the bindings of each optional binding in a condition. */
154
+ private declareOptionalBindings;
155
+ /**
156
+ * Declare every `simple_identifier` leaf of a binding pattern. Handles the
157
+ * common Swift pattern shapes: a `bound_identifier` simple pattern and tuple
158
+ * destructuring (`(a, b)`), which nests `pattern` children. `_` (the wildcard)
159
+ * binds nothing.
160
+ */
161
+ private declarePattern;
162
+ /** Def/use facts for one statement (or construct-header expression) node. */
163
+ facts(node: SyntaxNode): StatementFacts;
164
+ /** Facts for an expression whose WHOLE evaluation is conditional (guards/tests). */
165
+ factsConditional(node: SyntaxNode): StatementFacts;
166
+ /**
167
+ * Def-ONLY facts for a value-position binding carrier (`let x = if … / switch …`,
168
+ * #2207): just the declared name pattern's leaves, attached to the continuation
169
+ * block the branch arms rejoin. The condition + arm-value USES are already
170
+ * harvested onto the branch's own blocks (visitIf / visitSwitch), so this must
171
+ * NOT re-walk the value — only the `name`-field pattern leaves are defs here.
172
+ */
173
+ bindingDefFacts(stmt: SyntaxNode): StatementFacts | undefined;
174
+ /**
175
+ * MAY-def facts for a `switch_pattern`'s value bindings (`case let n` /
176
+ * `case .some(let v)`). The binding only takes effect when the case matches,
177
+ * so it is a may-def on the dispatch block — propagated into the case body
178
+ * where the bound name is read.
179
+ */
180
+ switchPatternFacts(switchPattern: SyntaxNode): StatementFacts;
181
+ /**
182
+ * Facts for a `for item in COLLECTION` head: the loop pattern's leaves are
183
+ * defs, the iterated collection a use. The `where` guard (if any) is harvested
184
+ * conditionally.
185
+ */
186
+ forHeadFacts(stmt: SyntaxNode): StatementFacts;
187
+ /**
188
+ * Facts for an `if`/`while`/`guard` condition: optional bindings bind their
189
+ * pattern (a def — a may-def when `conditional`), and the condition expression
190
+ * children are uses. The construct's `condition` / `bound_identifier` fields are
191
+ * interleaved, so we walk all children and classify them.
192
+ */
193
+ conditionFacts(stmt: SyntaxNode, conditional: boolean): StatementFacts;
194
+ /** ENTRY-block facts for the parameters (defs only). */
195
+ paramFacts(): StatementFacts | undefined;
196
+ /** Def fact for a `catch let e` error pattern — prepend to the handler entry block. */
197
+ catchErrorFacts(catchBlock: SyntaxNode): StatementFacts | undefined;
198
+ private resolve;
199
+ private def;
200
+ private use;
201
+ /** Run `fn` with defs demoted to may-defs (conditionally-evaluated context). */
202
+ private conditional;
203
+ /**
204
+ * Def each `simple_identifier` leaf of a binding pattern (the def-position
205
+ * analogue of {@link declarePattern}). Tuple destructuring recurses; `_` binds
206
+ * nothing.
207
+ */
208
+ private defPattern;
209
+ /** Value-position walk: collect uses; route def positions to the pattern handler. */
210
+ private walkValue;
211
+ /** Strip a `directly_assignable_expression` wrapper around an lvalue. */
212
+ private unwrapAssignable;
213
+ /**
214
+ * The sole `bound_identifier` binder of a single `name` pattern, or undefined
215
+ * when there are multiple `name` patterns or the pattern is a tuple / wildcard
216
+ * destructuring (`let (a, b) = …`). Used to gate single-target result-defs.
217
+ */
218
+ private singlePatternBinder;
219
+ /**
220
+ * When `value`'s root (after unwrapping) is a `call_expression`, remember that
221
+ * call site should carry `resultDefs` — the binding indices of `targets`
222
+ * (def-position identifiers). Consumed by {@link visitCall} once the value walk
223
+ * reaches the node. Single-target only; the blank target (`_`) binds nothing.
224
+ */
225
+ private registerResultDefs;
226
+ /**
227
+ * The callee node of a `call_expression` — the first named child that is NOT
228
+ * the trailing `call_suffix` (a bare `simple_identifier` for a free / init
229
+ * call, or a `navigation_expression` for a member / chained call).
230
+ */
231
+ private calleeOf;
232
+ /**
233
+ * Open + populate a call site for a Swift `call_expression`. `node` IS the
234
+ * `call_expression` — the SAME node the scope query anchors `@reference.call.*`
235
+ * on (its `atRange`), so the resolved-id join lands by exact position (see file
236
+ * header ANCHOR ALIGNMENT). Swift has no `new`, so every site is `kind: 'call'`.
237
+ */
238
+ private visitCall;
239
+ /**
240
+ * Walk a `call_suffix`'s `value_arguments`, tagging each positional / labeled
241
+ * argument's occurrence position. A trailing closure (`lambda_literal`) is a
242
+ * nested function body — opaque (excluded by {@link NESTED_FUNCTION_TYPES}), so
243
+ * it is not an argument occurrence here.
244
+ */
245
+ private walkArguments;
246
+ /**
247
+ * `navigation_expression` chain walk shared by value position and callee
248
+ * position. Records the chain-root identifier as a use plus at most ONE
249
+ * member-read site — the INNERMOST access — when the root is an identifier;
250
+ * `skipFinalRead` suppresses it when that access is the callee (carried by the
251
+ * dotted path instead). Mirrors the Kotlin / Go / Python harvesters' walkChain.
252
+ * A non-identifier root (`self`/literal/call) launders no static path/receiver.
253
+ */
254
+ private walkChain;
255
+ }