@optave/codegraph 3.13.0 → 3.15.0

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 (458) hide show
  1. package/README.md +35 -34
  2. package/dist/ast-analysis/engine.d.ts.map +1 -1
  3. package/dist/ast-analysis/engine.js +38 -40
  4. package/dist/ast-analysis/engine.js.map +1 -1
  5. package/dist/ast-analysis/rules/b2.d.ts +7 -0
  6. package/dist/ast-analysis/rules/b2.d.ts.map +1 -0
  7. package/dist/ast-analysis/rules/b2.js +240 -0
  8. package/dist/ast-analysis/rules/b2.js.map +1 -0
  9. package/dist/ast-analysis/rules/b3.d.ts +6 -0
  10. package/dist/ast-analysis/rules/b3.d.ts.map +1 -0
  11. package/dist/ast-analysis/rules/b3.js +105 -0
  12. package/dist/ast-analysis/rules/b3.js.map +1 -0
  13. package/dist/ast-analysis/rules/b4.d.ts +9 -0
  14. package/dist/ast-analysis/rules/b4.d.ts.map +1 -0
  15. package/dist/ast-analysis/rules/b4.js +361 -0
  16. package/dist/ast-analysis/rules/b4.js.map +1 -0
  17. package/dist/ast-analysis/rules/b5.d.ts +4 -0
  18. package/dist/ast-analysis/rules/b5.d.ts.map +1 -0
  19. package/dist/ast-analysis/rules/b5.js +52 -0
  20. package/dist/ast-analysis/rules/b5.js.map +1 -0
  21. package/dist/ast-analysis/rules/c.d.ts +4 -0
  22. package/dist/ast-analysis/rules/c.d.ts.map +1 -0
  23. package/dist/ast-analysis/rules/c.js +143 -0
  24. package/dist/ast-analysis/rules/c.js.map +1 -0
  25. package/dist/ast-analysis/rules/index.d.ts.map +1 -1
  26. package/dist/ast-analysis/rules/index.js +34 -0
  27. package/dist/ast-analysis/rules/index.js.map +1 -1
  28. package/dist/ast-analysis/rules/javascript.d.ts.map +1 -1
  29. package/dist/ast-analysis/rules/javascript.js +3 -0
  30. package/dist/ast-analysis/rules/javascript.js.map +1 -1
  31. package/dist/ast-analysis/shared.d.ts.map +1 -1
  32. package/dist/ast-analysis/shared.js +2 -0
  33. package/dist/ast-analysis/shared.js.map +1 -1
  34. package/dist/ast-analysis/visitor-utils.d.ts +1 -0
  35. package/dist/ast-analysis/visitor-utils.d.ts.map +1 -1
  36. package/dist/ast-analysis/visitor-utils.js +5 -0
  37. package/dist/ast-analysis/visitor-utils.js.map +1 -1
  38. package/dist/ast-analysis/visitor.d.ts.map +1 -1
  39. package/dist/ast-analysis/visitor.js +60 -47
  40. package/dist/ast-analysis/visitor.js.map +1 -1
  41. package/dist/ast-analysis/visitors/cfg-visitor.d.ts.map +1 -1
  42. package/dist/ast-analysis/visitors/cfg-visitor.js +126 -76
  43. package/dist/ast-analysis/visitors/cfg-visitor.js.map +1 -1
  44. package/dist/ast-analysis/visitors/complexity-visitor.d.ts.map +1 -1
  45. package/dist/ast-analysis/visitors/complexity-visitor.js +27 -15
  46. package/dist/ast-analysis/visitors/complexity-visitor.js.map +1 -1
  47. package/dist/ast-analysis/visitors/dataflow-visitor.d.ts.map +1 -1
  48. package/dist/ast-analysis/visitors/dataflow-visitor.js +54 -21
  49. package/dist/ast-analysis/visitors/dataflow-visitor.js.map +1 -1
  50. package/dist/cli/commands/config.d.ts.map +1 -1
  51. package/dist/cli/commands/config.js +137 -134
  52. package/dist/cli/commands/config.js.map +1 -1
  53. package/dist/cli/commands/roles.d.ts.map +1 -1
  54. package/dist/cli/commands/roles.js +6 -1
  55. package/dist/cli/commands/roles.js.map +1 -1
  56. package/dist/db/better-sqlite3.d.ts +2 -1
  57. package/dist/db/better-sqlite3.d.ts.map +1 -1
  58. package/dist/db/better-sqlite3.js.map +1 -1
  59. package/dist/db/connection.d.ts +7 -1
  60. package/dist/db/connection.d.ts.map +1 -1
  61. package/dist/db/connection.js +20 -5
  62. package/dist/db/connection.js.map +1 -1
  63. package/dist/db/index.d.ts +1 -1
  64. package/dist/db/index.d.ts.map +1 -1
  65. package/dist/db/index.js +1 -1
  66. package/dist/db/index.js.map +1 -1
  67. package/dist/db/migrations.d.ts.map +1 -1
  68. package/dist/db/migrations.js +68 -0
  69. package/dist/db/migrations.js.map +1 -1
  70. package/dist/db/repository/build-stmts.d.ts.map +1 -1
  71. package/dist/db/repository/build-stmts.js +18 -0
  72. package/dist/db/repository/build-stmts.js.map +1 -1
  73. package/dist/db/repository/dataflow.d.ts +5 -0
  74. package/dist/db/repository/dataflow.d.ts.map +1 -1
  75. package/dist/db/repository/dataflow.js +14 -0
  76. package/dist/db/repository/dataflow.js.map +1 -1
  77. package/dist/db/repository/index.d.ts +1 -1
  78. package/dist/db/repository/index.d.ts.map +1 -1
  79. package/dist/db/repository/index.js +1 -1
  80. package/dist/db/repository/index.js.map +1 -1
  81. package/dist/db/repository/native-repository.d.ts.map +1 -1
  82. package/dist/db/repository/native-repository.js +47 -34
  83. package/dist/db/repository/native-repository.js.map +1 -1
  84. package/dist/domain/analysis/context.d.ts +2 -2
  85. package/dist/domain/analysis/dependencies.d.ts +2 -2
  86. package/dist/domain/analysis/diff-impact.d.ts +2 -2
  87. package/dist/domain/analysis/fn-impact.d.ts +3 -1
  88. package/dist/domain/analysis/fn-impact.d.ts.map +1 -1
  89. package/dist/domain/analysis/fn-impact.js +4 -0
  90. package/dist/domain/analysis/fn-impact.js.map +1 -1
  91. package/dist/domain/analysis/implementations.d.ts +2 -2
  92. package/dist/domain/analysis/module-map.d.ts.map +1 -1
  93. package/dist/domain/analysis/module-map.js +32 -5
  94. package/dist/domain/analysis/module-map.js.map +1 -1
  95. package/dist/domain/analysis/roles.d.ts +7 -1
  96. package/dist/domain/analysis/roles.d.ts.map +1 -1
  97. package/dist/domain/analysis/roles.js +16 -0
  98. package/dist/domain/analysis/roles.js.map +1 -1
  99. package/dist/domain/analysis/symbol-lookup.d.ts +4 -4
  100. package/dist/domain/graph/builder/call-resolver.d.ts +17 -5
  101. package/dist/domain/graph/builder/call-resolver.d.ts.map +1 -1
  102. package/dist/domain/graph/builder/call-resolver.js +85 -220
  103. package/dist/domain/graph/builder/call-resolver.js.map +1 -1
  104. package/dist/domain/graph/builder/context.d.ts +1 -0
  105. package/dist/domain/graph/builder/context.d.ts.map +1 -1
  106. package/dist/domain/graph/builder/context.js.map +1 -1
  107. package/dist/domain/graph/builder/helpers.d.ts +16 -1
  108. package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
  109. package/dist/domain/graph/builder/helpers.js +162 -72
  110. package/dist/domain/graph/builder/helpers.js.map +1 -1
  111. package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
  112. package/dist/domain/graph/builder/incremental.js +166 -97
  113. package/dist/domain/graph/builder/incremental.js.map +1 -1
  114. package/dist/domain/graph/builder/pipeline.d.ts.map +1 -1
  115. package/dist/domain/graph/builder/pipeline.js +10 -4
  116. package/dist/domain/graph/builder/pipeline.js.map +1 -1
  117. package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
  118. package/dist/domain/graph/builder/stages/build-edges.js +496 -250
  119. package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
  120. package/dist/domain/graph/builder/stages/collect-files.d.ts.map +1 -1
  121. package/dist/domain/graph/builder/stages/collect-files.js +10 -7
  122. package/dist/domain/graph/builder/stages/collect-files.js.map +1 -1
  123. package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
  124. package/dist/domain/graph/builder/stages/detect-changes.js +2 -1
  125. package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
  126. package/dist/domain/graph/builder/stages/native-orchestrator.d.ts.map +1 -1
  127. package/dist/domain/graph/builder/stages/native-orchestrator.js +895 -545
  128. package/dist/domain/graph/builder/stages/native-orchestrator.js.map +1 -1
  129. package/dist/domain/graph/resolver/points-to.d.ts.map +1 -1
  130. package/dist/domain/graph/resolver/points-to.js +105 -57
  131. package/dist/domain/graph/resolver/points-to.js.map +1 -1
  132. package/dist/domain/graph/resolver/strategy.d.ts +61 -0
  133. package/dist/domain/graph/resolver/strategy.d.ts.map +1 -0
  134. package/dist/domain/graph/resolver/strategy.js +222 -0
  135. package/dist/domain/graph/resolver/strategy.js.map +1 -0
  136. package/dist/domain/graph/watcher.d.ts.map +1 -1
  137. package/dist/domain/graph/watcher.js +16 -9
  138. package/dist/domain/graph/watcher.js.map +1 -1
  139. package/dist/domain/parser.d.ts +12 -0
  140. package/dist/domain/parser.d.ts.map +1 -1
  141. package/dist/domain/parser.js +12 -2
  142. package/dist/domain/parser.js.map +1 -1
  143. package/dist/domain/queries.d.ts +1 -1
  144. package/dist/domain/queries.d.ts.map +1 -1
  145. package/dist/domain/queries.js +1 -1
  146. package/dist/domain/queries.js.map +1 -1
  147. package/dist/domain/wasm-worker-entry.js +3 -0
  148. package/dist/domain/wasm-worker-entry.js.map +1 -1
  149. package/dist/domain/wasm-worker-pool.d.ts.map +1 -1
  150. package/dist/domain/wasm-worker-pool.js +24 -5
  151. package/dist/domain/wasm-worker-pool.js.map +1 -1
  152. package/dist/domain/wasm-worker-protocol.d.ts +7 -0
  153. package/dist/domain/wasm-worker-protocol.d.ts.map +1 -1
  154. package/dist/extractors/dart.js +48 -3
  155. package/dist/extractors/dart.js.map +1 -1
  156. package/dist/extractors/groovy.js +62 -3
  157. package/dist/extractors/groovy.js.map +1 -1
  158. package/dist/extractors/helpers.d.ts +4 -2
  159. package/dist/extractors/helpers.d.ts.map +1 -1
  160. package/dist/extractors/helpers.js +5 -1
  161. package/dist/extractors/helpers.js.map +1 -1
  162. package/dist/extractors/java.js +77 -1
  163. package/dist/extractors/java.js.map +1 -1
  164. package/dist/extractors/javascript.d.ts.map +1 -1
  165. package/dist/extractors/javascript.js +549 -163
  166. package/dist/extractors/javascript.js.map +1 -1
  167. package/dist/extractors/kotlin.js +58 -3
  168. package/dist/extractors/kotlin.js.map +1 -1
  169. package/dist/extractors/objc.js +25 -2
  170. package/dist/extractors/objc.js.map +1 -1
  171. package/dist/extractors/scala.js +62 -2
  172. package/dist/extractors/scala.js.map +1 -1
  173. package/dist/extractors/swift.js +52 -3
  174. package/dist/extractors/swift.js.map +1 -1
  175. package/dist/features/audit.js +26 -23
  176. package/dist/features/audit.js.map +1 -1
  177. package/dist/features/boundaries.d.ts.map +1 -1
  178. package/dist/features/boundaries.js +12 -9
  179. package/dist/features/boundaries.js.map +1 -1
  180. package/dist/features/cfg.d.ts.map +1 -1
  181. package/dist/features/cfg.js +25 -18
  182. package/dist/features/cfg.js.map +1 -1
  183. package/dist/features/check.d.ts.map +1 -1
  184. package/dist/features/check.js +18 -5
  185. package/dist/features/check.js.map +1 -1
  186. package/dist/features/communities.d.ts +4 -2
  187. package/dist/features/communities.d.ts.map +1 -1
  188. package/dist/features/communities.js +6 -4
  189. package/dist/features/communities.js.map +1 -1
  190. package/dist/features/dataflow.d.ts +60 -0
  191. package/dist/features/dataflow.d.ts.map +1 -1
  192. package/dist/features/dataflow.js +530 -6
  193. package/dist/features/dataflow.js.map +1 -1
  194. package/dist/features/manifesto.d.ts.map +1 -1
  195. package/dist/features/manifesto.js +59 -72
  196. package/dist/features/manifesto.js.map +1 -1
  197. package/dist/features/sequence.d.ts.map +1 -1
  198. package/dist/features/sequence.js +27 -22
  199. package/dist/features/sequence.js.map +1 -1
  200. package/dist/features/snapshot.d.ts.map +1 -1
  201. package/dist/features/snapshot.js +36 -28
  202. package/dist/features/snapshot.js.map +1 -1
  203. package/dist/features/structure.d.ts.map +1 -1
  204. package/dist/features/structure.js +150 -62
  205. package/dist/features/structure.js.map +1 -1
  206. package/dist/features/triage.d.ts.map +1 -1
  207. package/dist/features/triage.js +18 -11
  208. package/dist/features/triage.js.map +1 -1
  209. package/dist/graph/algorithms/bfs.d.ts +1 -1
  210. package/dist/graph/algorithms/bfs.d.ts.map +1 -1
  211. package/dist/graph/algorithms/bfs.js +14 -13
  212. package/dist/graph/algorithms/bfs.js.map +1 -1
  213. package/dist/graph/algorithms/tarjan.d.ts.map +1 -1
  214. package/dist/graph/algorithms/tarjan.js +5 -0
  215. package/dist/graph/algorithms/tarjan.js.map +1 -1
  216. package/dist/graph/builders/dependency.js +28 -22
  217. package/dist/graph/builders/dependency.js.map +1 -1
  218. package/dist/graph/classifiers/roles.d.ts +10 -1
  219. package/dist/graph/classifiers/roles.d.ts.map +1 -1
  220. package/dist/graph/classifiers/roles.js +60 -6
  221. package/dist/graph/classifiers/roles.js.map +1 -1
  222. package/dist/infrastructure/config.d.ts +10 -0
  223. package/dist/infrastructure/config.d.ts.map +1 -1
  224. package/dist/infrastructure/config.js +31 -3
  225. package/dist/infrastructure/config.js.map +1 -1
  226. package/dist/infrastructure/registry.d.ts +0 -7
  227. package/dist/infrastructure/registry.d.ts.map +1 -1
  228. package/dist/infrastructure/registry.js +29 -13
  229. package/dist/infrastructure/registry.js.map +1 -1
  230. package/dist/infrastructure/update-check.d.ts.map +1 -1
  231. package/dist/infrastructure/update-check.js +49 -31
  232. package/dist/infrastructure/update-check.js.map +1 -1
  233. package/dist/mcp/server.d.ts +2 -10
  234. package/dist/mcp/server.d.ts.map +1 -1
  235. package/dist/mcp/server.js.map +1 -1
  236. package/dist/mcp/tools/ast-query.d.ts +1 -1
  237. package/dist/mcp/tools/ast-query.d.ts.map +1 -1
  238. package/dist/mcp/tools/audit.d.ts +1 -1
  239. package/dist/mcp/tools/audit.d.ts.map +1 -1
  240. package/dist/mcp/tools/batch-query.d.ts +1 -1
  241. package/dist/mcp/tools/batch-query.d.ts.map +1 -1
  242. package/dist/mcp/tools/branch-compare.d.ts +1 -1
  243. package/dist/mcp/tools/branch-compare.d.ts.map +1 -1
  244. package/dist/mcp/tools/brief.d.ts +1 -1
  245. package/dist/mcp/tools/brief.d.ts.map +1 -1
  246. package/dist/mcp/tools/cfg.d.ts +1 -1
  247. package/dist/mcp/tools/cfg.d.ts.map +1 -1
  248. package/dist/mcp/tools/check.d.ts +1 -1
  249. package/dist/mcp/tools/check.d.ts.map +1 -1
  250. package/dist/mcp/tools/co-changes.d.ts +1 -1
  251. package/dist/mcp/tools/co-changes.d.ts.map +1 -1
  252. package/dist/mcp/tools/code-owners.d.ts +1 -1
  253. package/dist/mcp/tools/code-owners.d.ts.map +1 -1
  254. package/dist/mcp/tools/communities.d.ts +1 -1
  255. package/dist/mcp/tools/communities.d.ts.map +1 -1
  256. package/dist/mcp/tools/complexity.d.ts +1 -1
  257. package/dist/mcp/tools/complexity.d.ts.map +1 -1
  258. package/dist/mcp/tools/context.d.ts +1 -1
  259. package/dist/mcp/tools/context.d.ts.map +1 -1
  260. package/dist/mcp/tools/dataflow.d.ts +1 -1
  261. package/dist/mcp/tools/dataflow.d.ts.map +1 -1
  262. package/dist/mcp/tools/diff-impact.d.ts +1 -1
  263. package/dist/mcp/tools/diff-impact.d.ts.map +1 -1
  264. package/dist/mcp/tools/execution-flow.d.ts +1 -1
  265. package/dist/mcp/tools/execution-flow.d.ts.map +1 -1
  266. package/dist/mcp/tools/export-graph.d.ts +1 -1
  267. package/dist/mcp/tools/export-graph.d.ts.map +1 -1
  268. package/dist/mcp/tools/file-deps.d.ts +1 -1
  269. package/dist/mcp/tools/file-deps.d.ts.map +1 -1
  270. package/dist/mcp/tools/file-exports.d.ts +1 -1
  271. package/dist/mcp/tools/file-exports.d.ts.map +1 -1
  272. package/dist/mcp/tools/find-cycles.d.ts +1 -1
  273. package/dist/mcp/tools/find-cycles.d.ts.map +1 -1
  274. package/dist/mcp/tools/fn-impact.d.ts +1 -1
  275. package/dist/mcp/tools/fn-impact.d.ts.map +1 -1
  276. package/dist/mcp/tools/impact-analysis.d.ts +1 -1
  277. package/dist/mcp/tools/impact-analysis.d.ts.map +1 -1
  278. package/dist/mcp/tools/implementations.d.ts +1 -1
  279. package/dist/mcp/tools/implementations.d.ts.map +1 -1
  280. package/dist/mcp/tools/index.d.ts +2 -5
  281. package/dist/mcp/tools/index.d.ts.map +1 -1
  282. package/dist/mcp/tools/index.js.map +1 -1
  283. package/dist/mcp/tools/interfaces.d.ts +1 -1
  284. package/dist/mcp/tools/interfaces.d.ts.map +1 -1
  285. package/dist/mcp/tools/list-functions.d.ts +1 -1
  286. package/dist/mcp/tools/list-functions.d.ts.map +1 -1
  287. package/dist/mcp/tools/list-repos.d.ts +1 -1
  288. package/dist/mcp/tools/list-repos.d.ts.map +1 -1
  289. package/dist/mcp/tools/module-map.d.ts +1 -1
  290. package/dist/mcp/tools/module-map.d.ts.map +1 -1
  291. package/dist/mcp/tools/node-roles.d.ts +1 -1
  292. package/dist/mcp/tools/node-roles.d.ts.map +1 -1
  293. package/dist/mcp/tools/path.d.ts +1 -1
  294. package/dist/mcp/tools/path.d.ts.map +1 -1
  295. package/dist/mcp/tools/query.d.ts +1 -1
  296. package/dist/mcp/tools/query.d.ts.map +1 -1
  297. package/dist/mcp/tools/semantic-search.d.ts +1 -1
  298. package/dist/mcp/tools/semantic-search.d.ts.map +1 -1
  299. package/dist/mcp/tools/sequence.d.ts +1 -1
  300. package/dist/mcp/tools/sequence.d.ts.map +1 -1
  301. package/dist/mcp/tools/structure.d.ts +1 -1
  302. package/dist/mcp/tools/structure.d.ts.map +1 -1
  303. package/dist/mcp/tools/symbol-children.d.ts +1 -1
  304. package/dist/mcp/tools/symbol-children.d.ts.map +1 -1
  305. package/dist/mcp/tools/triage.d.ts +1 -1
  306. package/dist/mcp/tools/triage.d.ts.map +1 -1
  307. package/dist/mcp/tools/where.d.ts +1 -1
  308. package/dist/mcp/tools/where.d.ts.map +1 -1
  309. package/dist/mcp/types.d.ts +19 -0
  310. package/dist/mcp/types.d.ts.map +1 -0
  311. package/dist/mcp/types.js +6 -0
  312. package/dist/mcp/types.js.map +1 -0
  313. package/dist/presentation/queries-cli/index.d.ts +1 -1
  314. package/dist/presentation/queries-cli/index.d.ts.map +1 -1
  315. package/dist/presentation/queries-cli/index.js +1 -1
  316. package/dist/presentation/queries-cli/index.js.map +1 -1
  317. package/dist/presentation/queries-cli/overview.d.ts +1 -0
  318. package/dist/presentation/queries-cli/overview.d.ts.map +1 -1
  319. package/dist/presentation/queries-cli/overview.js +20 -1
  320. package/dist/presentation/queries-cli/overview.js.map +1 -1
  321. package/dist/presentation/queries-cli.d.ts +1 -1
  322. package/dist/presentation/queries-cli.d.ts.map +1 -1
  323. package/dist/presentation/queries-cli.js +1 -1
  324. package/dist/presentation/queries-cli.js.map +1 -1
  325. package/dist/presentation/viewer.d.ts.map +1 -1
  326. package/dist/presentation/viewer.js +45 -32
  327. package/dist/presentation/viewer.js.map +1 -1
  328. package/dist/shared/constants.d.ts +21 -0
  329. package/dist/shared/constants.d.ts.map +1 -1
  330. package/dist/shared/constants.js +25 -0
  331. package/dist/shared/constants.js.map +1 -1
  332. package/dist/shared/normalize.d.ts.map +1 -1
  333. package/dist/shared/normalize.js +12 -22
  334. package/dist/shared/normalize.js.map +1 -1
  335. package/dist/shared/paginate.d.ts +4 -17
  336. package/dist/shared/paginate.d.ts.map +1 -1
  337. package/dist/shared/paginate.js.map +1 -1
  338. package/dist/types.d.ts +76 -1
  339. package/dist/types.d.ts.map +1 -1
  340. package/grammars/tree-sitter-erlang.wasm +0 -0
  341. package/package.json +7 -7
  342. package/src/ast-analysis/engine.ts +43 -63
  343. package/src/ast-analysis/rules/b2.ts +263 -0
  344. package/src/ast-analysis/rules/b3.ts +127 -0
  345. package/src/ast-analysis/rules/b4.ts +378 -0
  346. package/src/ast-analysis/rules/b5.ts +65 -0
  347. package/src/ast-analysis/rules/c.ts +157 -0
  348. package/src/ast-analysis/rules/index.ts +34 -0
  349. package/src/ast-analysis/rules/javascript.ts +3 -0
  350. package/src/ast-analysis/shared.ts +2 -0
  351. package/src/ast-analysis/visitor-utils.ts +5 -0
  352. package/src/ast-analysis/visitor.ts +82 -52
  353. package/src/ast-analysis/visitors/cfg-visitor.ts +198 -84
  354. package/src/ast-analysis/visitors/complexity-visitor.ts +44 -16
  355. package/src/ast-analysis/visitors/dataflow-visitor.ts +68 -29
  356. package/src/cli/commands/config.ts +184 -184
  357. package/src/cli/commands/roles.ts +6 -1
  358. package/src/db/better-sqlite3.ts +5 -4
  359. package/src/db/connection.ts +23 -5
  360. package/src/db/index.ts +1 -0
  361. package/src/db/migrations.ts +68 -0
  362. package/src/db/repository/build-stmts.ts +30 -0
  363. package/src/db/repository/dataflow.ts +16 -0
  364. package/src/db/repository/index.ts +1 -1
  365. package/src/db/repository/native-repository.ts +56 -40
  366. package/src/domain/analysis/fn-impact.ts +4 -0
  367. package/src/domain/analysis/module-map.ts +38 -6
  368. package/src/domain/analysis/roles.ts +23 -0
  369. package/src/domain/graph/builder/call-resolver.ts +112 -232
  370. package/src/domain/graph/builder/context.ts +1 -0
  371. package/src/domain/graph/builder/helpers.ts +190 -72
  372. package/src/domain/graph/builder/incremental.ts +249 -120
  373. package/src/domain/graph/builder/pipeline.ts +11 -5
  374. package/src/domain/graph/builder/stages/build-edges.ts +696 -296
  375. package/src/domain/graph/builder/stages/collect-files.ts +12 -6
  376. package/src/domain/graph/builder/stages/detect-changes.ts +3 -1
  377. package/src/domain/graph/builder/stages/native-orchestrator.ts +1102 -590
  378. package/src/domain/graph/resolver/points-to.ts +182 -59
  379. package/src/domain/graph/resolver/strategy.ts +265 -0
  380. package/src/domain/graph/watcher.ts +19 -9
  381. package/src/domain/parser.ts +12 -2
  382. package/src/domain/queries.ts +1 -1
  383. package/src/domain/wasm-worker-entry.ts +3 -0
  384. package/src/domain/wasm-worker-pool.ts +28 -4
  385. package/src/domain/wasm-worker-protocol.ts +4 -0
  386. package/src/extractors/dart.ts +48 -3
  387. package/src/extractors/groovy.ts +62 -2
  388. package/src/extractors/helpers.ts +5 -2
  389. package/src/extractors/java.ts +80 -1
  390. package/src/extractors/javascript.ts +566 -161
  391. package/src/extractors/kotlin.ts +57 -3
  392. package/src/extractors/objc.ts +25 -1
  393. package/src/extractors/scala.ts +63 -1
  394. package/src/extractors/swift.ts +46 -3
  395. package/src/features/audit.ts +43 -34
  396. package/src/features/boundaries.ts +17 -9
  397. package/src/features/cfg.ts +31 -22
  398. package/src/features/check.ts +21 -5
  399. package/src/features/communities.ts +28 -19
  400. package/src/features/dataflow.ts +755 -6
  401. package/src/features/manifesto.ts +76 -75
  402. package/src/features/sequence.ts +29 -23
  403. package/src/features/snapshot.ts +36 -25
  404. package/src/features/structure.ts +185 -55
  405. package/src/features/triage.ts +28 -15
  406. package/src/graph/algorithms/bfs.ts +13 -12
  407. package/src/graph/algorithms/tarjan.ts +5 -0
  408. package/src/graph/builders/dependency.ts +35 -23
  409. package/src/graph/classifiers/roles.ts +74 -7
  410. package/src/infrastructure/config.ts +32 -3
  411. package/src/infrastructure/registry.ts +44 -20
  412. package/src/infrastructure/update-check.ts +55 -33
  413. package/src/mcp/server.ts +2 -8
  414. package/src/mcp/tools/ast-query.ts +1 -1
  415. package/src/mcp/tools/audit.ts +1 -1
  416. package/src/mcp/tools/batch-query.ts +1 -1
  417. package/src/mcp/tools/branch-compare.ts +1 -1
  418. package/src/mcp/tools/brief.ts +1 -1
  419. package/src/mcp/tools/cfg.ts +1 -1
  420. package/src/mcp/tools/check.ts +1 -1
  421. package/src/mcp/tools/co-changes.ts +1 -1
  422. package/src/mcp/tools/code-owners.ts +1 -1
  423. package/src/mcp/tools/communities.ts +1 -1
  424. package/src/mcp/tools/complexity.ts +1 -1
  425. package/src/mcp/tools/context.ts +1 -1
  426. package/src/mcp/tools/dataflow.ts +1 -1
  427. package/src/mcp/tools/diff-impact.ts +1 -1
  428. package/src/mcp/tools/execution-flow.ts +1 -1
  429. package/src/mcp/tools/export-graph.ts +1 -1
  430. package/src/mcp/tools/file-deps.ts +1 -1
  431. package/src/mcp/tools/file-exports.ts +1 -1
  432. package/src/mcp/tools/find-cycles.ts +1 -1
  433. package/src/mcp/tools/fn-impact.ts +1 -1
  434. package/src/mcp/tools/impact-analysis.ts +1 -1
  435. package/src/mcp/tools/implementations.ts +1 -1
  436. package/src/mcp/tools/index.ts +2 -5
  437. package/src/mcp/tools/interfaces.ts +1 -1
  438. package/src/mcp/tools/list-functions.ts +1 -1
  439. package/src/mcp/tools/list-repos.ts +1 -1
  440. package/src/mcp/tools/module-map.ts +1 -1
  441. package/src/mcp/tools/node-roles.ts +1 -1
  442. package/src/mcp/tools/path.ts +1 -1
  443. package/src/mcp/tools/query.ts +1 -1
  444. package/src/mcp/tools/semantic-search.ts +1 -1
  445. package/src/mcp/tools/sequence.ts +1 -1
  446. package/src/mcp/tools/structure.ts +1 -1
  447. package/src/mcp/tools/symbol-children.ts +1 -1
  448. package/src/mcp/tools/triage.ts +1 -1
  449. package/src/mcp/tools/where.ts +1 -1
  450. package/src/mcp/types.ts +21 -0
  451. package/src/presentation/queries-cli/index.ts +1 -1
  452. package/src/presentation/queries-cli/overview.ts +35 -1
  453. package/src/presentation/queries-cli.ts +1 -0
  454. package/src/presentation/viewer.ts +98 -87
  455. package/src/shared/constants.ts +26 -0
  456. package/src/shared/normalize.ts +13 -22
  457. package/src/shared/paginate.ts +4 -18
  458. package/src/types.ts +86 -1
@@ -0,0 +1,361 @@
1
+ import { makeDataflowRules } from '../shared.js';
2
+ // ─── Haskell ──────────────────────────────────────────────────────────────────
3
+ //
4
+ // Haskell `function` node: name via `childForFieldName('name')` (confirmed in extractor line 62).
5
+ // Params: `patterns` or `parameter` children of the function node (extractor line 81).
6
+ // No explicit return keyword — last expression is the return value. returnNode: null.
7
+ // apply: `childForFieldName('function')` for the called function (extractor line 264).
8
+ // No standard variable declarations or member access in the conventional sense.
9
+ function extractHaskellParamName(node) {
10
+ if (node.type === 'variable' || node.type === 'identifier')
11
+ return [node.text];
12
+ if (node.type === 'wildcard')
13
+ return ['_'];
14
+ // For pattern nodes, collect all variable bindings
15
+ if (node.type === 'patterns' || node.type === 'parameter') {
16
+ const names = [];
17
+ for (let i = 0; i < node.childCount; i++) {
18
+ const child = node.child(i);
19
+ if (!child)
20
+ continue;
21
+ if (child.type === 'variable' || child.type === 'identifier')
22
+ names.push(child.text);
23
+ }
24
+ return names.length > 0 ? names : null;
25
+ }
26
+ return null;
27
+ }
28
+ function getHaskellParamListNode(funcNode) {
29
+ // Haskell params are positional children; find the `patterns` child if present
30
+ for (let i = 0; i < funcNode.childCount; i++) {
31
+ const child = funcNode.child(i);
32
+ if (child?.type === 'patterns')
33
+ return child;
34
+ }
35
+ return null;
36
+ }
37
+ export const dataflowHaskell = makeDataflowRules({
38
+ functionNodes: new Set(['function']),
39
+ nameField: 'name',
40
+ getParamListNode: getHaskellParamListNode,
41
+ paramWrapperTypes: new Set(['variable', 'identifier', 'wildcard', 'parameter']),
42
+ extractParamName: extractHaskellParamName,
43
+ returnNode: null, // Haskell: no explicit return; last expression is the result
44
+ callNode: 'apply',
45
+ callFunctionField: 'function',
46
+ // `apply` args don't have a single named 'arguments' field in tree-sitter-haskell.
47
+ });
48
+ // ─── OCaml ────────────────────────────────────────────────────────────────────
49
+ //
50
+ // OCaml functions are `value_definition` → `let_binding` nodes with parameter children.
51
+ // The extractor handles both `value_definition` (top-level) and standalone `let_binding`.
52
+ // Params: `parameter` or `value_pattern` children of let_binding (extractor line 139).
53
+ // No explicit return keyword — last expression is the result. returnNode: null.
54
+ // application_expression: first child is function node (extractor line 314).
55
+ // field_get_expression: `childForFieldName('field')` (extractor line 327).
56
+ // Variable declarations: `let_binding` with no params (extractor line 103-110).
57
+ function extractOCamlParamName(node) {
58
+ if (node.type === 'value_name' || node.type === 'identifier')
59
+ return [node.text];
60
+ if (node.type === 'parameter' || node.type === 'value_pattern') {
61
+ // Pattern may be value_name or identifier
62
+ if (node.namedChildCount === 0)
63
+ return [node.text];
64
+ for (const child of node.namedChildren) {
65
+ if (child.type === 'value_name' || child.type === 'identifier')
66
+ return [child.text];
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ function getOCamlParamListNode(funcNode) {
72
+ // For value_definition, params are inside let_binding children
73
+ if (funcNode.type === 'value_definition') {
74
+ for (let i = 0; i < funcNode.childCount; i++) {
75
+ const child = funcNode.child(i);
76
+ if (child?.type === 'let_binding')
77
+ return child;
78
+ }
79
+ }
80
+ // For let_binding directly — return it as the "param list" (walker will iterate its children)
81
+ if (funcNode.type === 'let_binding')
82
+ return funcNode;
83
+ return null;
84
+ }
85
+ export const dataflowOCaml = makeDataflowRules({
86
+ functionNodes: new Set(['value_definition', 'let_binding']),
87
+ nameField: 'pattern',
88
+ getParamListNode: getOCamlParamListNode,
89
+ paramWrapperTypes: new Set(['parameter', 'value_pattern']),
90
+ extractParamName: extractOCamlParamName,
91
+ returnNode: null, // OCaml: no explicit return; last expression is the result
92
+ callNode: 'application_expression',
93
+ // application_expression: first child is function (no named 'function' field in tree-sitter-ocaml).
94
+ // Leave callFunctionField at default — will return null gracefully.
95
+ memberNode: 'field_get_expression',
96
+ memberPropertyField: 'field',
97
+ // field_get_expression object is first child, not a named field. Leave memberObjectField at default.
98
+ });
99
+ // ─── F# ───────────────────────────────────────────────────────────────────────
100
+ //
101
+ // F# functions: `function_declaration_left` is the LHS of a `let` binding (confirmed extractor).
102
+ // The name is a direct `identifier` child of `function_declaration_left` (extractor line 127).
103
+ // Params: `argument_patterns` child of `function_declaration_left` (extractor line 150).
104
+ // No explicit return keyword in F#. returnNode: null.
105
+ // application_expression: first child is function (extractor line 265).
106
+ // dot_expression: member access (extractor line 276).
107
+ function extractFSharpParamName(node) {
108
+ if (node.type === 'identifier')
109
+ return [node.text];
110
+ // Collect all identifier descendants for pattern-destructured params
111
+ const names = [];
112
+ for (let i = 0; i < node.childCount; i++) {
113
+ const child = node.child(i);
114
+ if (child?.type === 'identifier')
115
+ names.push(child.text);
116
+ }
117
+ return names.length > 0 ? names : null;
118
+ }
119
+ function getFSharpParamListNode(funcNode) {
120
+ // function_declaration_left contains argument_patterns as a child
121
+ for (let i = 0; i < funcNode.childCount; i++) {
122
+ const child = funcNode.child(i);
123
+ if (child?.type === 'argument_patterns')
124
+ return child;
125
+ }
126
+ return null;
127
+ }
128
+ export const dataflowFSharp = makeDataflowRules({
129
+ functionNodes: new Set(['function_declaration_left']),
130
+ nameField: 'name',
131
+ getParamListNode: getFSharpParamListNode,
132
+ paramWrapperTypes: new Set(['identifier']),
133
+ extractParamName: extractFSharpParamName,
134
+ returnNode: null, // F#: no explicit return; last expression is the result
135
+ callNode: 'application_expression',
136
+ // application_expression: first child is function (no named 'function' field).
137
+ memberNode: 'dot_expression',
138
+ // dot_expression field names are not standard; leave memberObjectField/memberPropertyField at defaults.
139
+ });
140
+ // ─── Gleam ────────────────────────────────────────────────────────────────────
141
+ //
142
+ // Gleam `function` and `external_function`: name via `childForFieldName('name')` (extractor line 70).
143
+ // Params: `childForFieldName('parameters')` or findChild('function_parameters') (extractor line 221).
144
+ // Each param is `function_parameter` or `parameter` with `childForFieldName('name')` (extractor line 228).
145
+ // No explicit return keyword in Gleam. returnNode: null.
146
+ // function_call/call: `childForFieldName('function')` (extractor line 202).
147
+ // field_access/module_select: `childForFieldName('field')` / `childForFieldName('label')` (extractor line 207).
148
+ function extractGleamParamName(node) {
149
+ if (node.type === 'function_parameter' || node.type === 'parameter') {
150
+ const nameNode = node.childForFieldName('name');
151
+ if (nameNode)
152
+ return [nameNode.text];
153
+ for (const child of node.namedChildren) {
154
+ if (child.type === 'identifier')
155
+ return [child.text];
156
+ }
157
+ }
158
+ if (node.type === 'identifier')
159
+ return [node.text];
160
+ return null;
161
+ }
162
+ export const dataflowGleam = makeDataflowRules({
163
+ functionNodes: new Set(['function', 'external_function']),
164
+ nameField: 'name',
165
+ paramListField: 'parameters',
166
+ paramWrapperTypes: new Set(['function_parameter', 'parameter']),
167
+ extractParamName: extractGleamParamName,
168
+ returnNode: null, // Gleam: no explicit return; last expression is the result
169
+ callNodes: new Set(['function_call', 'call']),
170
+ callFunctionField: 'function',
171
+ memberNode: 'field_access',
172
+ memberObjectField: 'record',
173
+ memberPropertyField: 'field',
174
+ });
175
+ // ─── Elixir ───────────────────────────────────────────────────────────────────
176
+ //
177
+ // Elixir functions are `call` nodes where target is `def`/`defp` (confirmed extractor).
178
+ // The extractor emits the function definition from `handleDefFunction` which walks
179
+ // `call` nodes. The actual function body lives inside a `do_block`.
180
+ // Params: inside `call` → `arguments` → inner `call` → `arguments` (extractor line 181-196).
181
+ // No explicit return keyword in Elixir. returnNode: null.
182
+ // Regular call: `call` nodes with `target` identifier (extractor handleElixirCall).
183
+ // Dot call: `call` with `dot` target (extractor handleDotCall).
184
+ //
185
+ // For dataflow purposes: the function scope is a `call` node with `def`/`defp` target.
186
+ // This requires a custom nameExtractor to identify which calls are function definitions.
187
+ // The simplified approach: mark `call` as a function node but filter by target in nameExtractor.
188
+ function extractElixirFunctionName(node) {
189
+ if (node.type !== 'call')
190
+ return null;
191
+ const target = node.childForFieldName('target');
192
+ if (target?.type !== 'identifier')
193
+ return null;
194
+ if (target.text !== 'def' && target.text !== 'defp')
195
+ return null;
196
+ // Extract the function name from arguments → first call → target identifier
197
+ const args = node.childForFieldName('arguments') ??
198
+ (() => {
199
+ for (let i = 0; i < node.childCount; i++) {
200
+ const child = node.child(i);
201
+ if (child?.type === 'arguments')
202
+ return child;
203
+ }
204
+ return null;
205
+ })();
206
+ if (!args)
207
+ return null;
208
+ for (let i = 0; i < args.childCount; i++) {
209
+ const child = args.child(i);
210
+ if (!child)
211
+ continue;
212
+ if (child.type === 'call') {
213
+ const fnTarget = child.childForFieldName('target');
214
+ if (fnTarget?.type === 'identifier')
215
+ return fnTarget.text;
216
+ }
217
+ if (child.type === 'identifier')
218
+ return child.text;
219
+ }
220
+ return null;
221
+ }
222
+ export const dataflowElixir = makeDataflowRules({
223
+ functionNodes: new Set(['call']),
224
+ nameField: 'target',
225
+ nameExtractor: extractElixirFunctionName,
226
+ // Param list extraction is complex for Elixir (nested calls inside arguments).
227
+ // Leave at defaults — param list discovery will gracefully return null.
228
+ returnNode: null, // Elixir: no explicit return; last expression is the result
229
+ callNode: 'call',
230
+ // Elixir call nodes use 'target' for the function name, not 'function'.
231
+ // Leave callFunctionField at default 'function' — will return null gracefully.
232
+ // The primary value here is function scope marking.
233
+ });
234
+ // ─── Erlang ───────────────────────────────────────────────────────────────────
235
+ //
236
+ // Erlang `fun_decl` contains `function_clause` children.
237
+ // The extractor handles `fun_decl` by extracting from the first `function_clause`.
238
+ // function_clause: name via `childForFieldName('name')` or `findChild(node, 'atom')` (extractor line 151).
239
+ // Params: `childForFieldName('args')` or findChild('expr_args') (extractor line 179).
240
+ // Each arg in expr_args is a named child (pattern). arity preserved by param count.
241
+ // No explicit return keyword in Erlang. returnNode: null.
242
+ // call: first named child is function (extractor line 272).
243
+ function extractErlangParamName(node) {
244
+ // Erlang params are pattern nodes; var/atom get their text as name
245
+ if (node.type === 'var' || node.type === 'atom')
246
+ return [node.text];
247
+ // For complex patterns, use a placeholder
248
+ return [`_${node.startPosition.row}`];
249
+ }
250
+ function getErlangParamListNode(funcNode) {
251
+ // fun_decl: find first function_clause, then its expr_args
252
+ if (funcNode.type === 'fun_decl') {
253
+ for (let i = 0; i < funcNode.childCount; i++) {
254
+ const child = funcNode.child(i);
255
+ if (child?.type === 'function_clause') {
256
+ const args = child.childForFieldName('args');
257
+ if (args)
258
+ return args;
259
+ for (let j = 0; j < child.childCount; j++) {
260
+ const argChild = child.child(j);
261
+ if (argChild?.type === 'expr_args')
262
+ return argChild;
263
+ }
264
+ }
265
+ }
266
+ }
267
+ // function_clause directly: find expr_args
268
+ if (funcNode.type === 'function_clause') {
269
+ const args = funcNode.childForFieldName('args');
270
+ if (args)
271
+ return args;
272
+ for (let i = 0; i < funcNode.childCount; i++) {
273
+ const child = funcNode.child(i);
274
+ if (child?.type === 'expr_args')
275
+ return child;
276
+ }
277
+ }
278
+ return null;
279
+ }
280
+ export const dataflowErlang = makeDataflowRules({
281
+ functionNodes: new Set(['fun_decl', 'function_clause']),
282
+ nameField: 'name',
283
+ getParamListNode: getErlangParamListNode,
284
+ extractParamName: extractErlangParamName,
285
+ returnNode: null, // Erlang: no explicit return; last expression is the result
286
+ callNode: 'call',
287
+ // Erlang call: first named child is function (atom or remote). No named 'function' field.
288
+ });
289
+ // ─── Clojure ──────────────────────────────────────────────────────────────────
290
+ //
291
+ // Clojure functions are `list_lit` nodes where first symbol is `defn`/`defn-`/`defmacro`.
292
+ // The extractor uses `findFirstSymbol` / `findSecondSymbol` helpers.
293
+ // The function name is the second symbol in the list.
294
+ // Params: first `vec_lit` child after the name (extractor extractClojureParams line 222).
295
+ // No explicit return keyword in Clojure. returnNode: null.
296
+ // Regular calls: `list_lit` nodes where first symbol is not a def form (extractor default case).
297
+ //
298
+ // nameExtractor must distinguish function-defining lists from call lists.
299
+ function extractClojureFunctionName(node) {
300
+ if (node.type !== 'list_lit')
301
+ return null;
302
+ // Find first symbol — skip delimiters and metadata
303
+ let firstSym = null;
304
+ let secondSym = null;
305
+ let count = 0;
306
+ for (let i = 0; i < node.childCount; i++) {
307
+ const child = node.child(i);
308
+ if (!child)
309
+ continue;
310
+ if ('()[]{}#'.includes(child.type) || child.type === 'meta_lit')
311
+ continue;
312
+ if (child.type === 'sym_lit' || child.type === 'kwd_lit') {
313
+ count++;
314
+ if (count === 1)
315
+ firstSym = child;
316
+ else if (count === 2) {
317
+ secondSym = child;
318
+ break;
319
+ }
320
+ }
321
+ }
322
+ if (!firstSym)
323
+ return null;
324
+ const keyword = firstSym.text;
325
+ if (keyword !== 'defn' &&
326
+ keyword !== 'defn-' &&
327
+ keyword !== 'defmacro' &&
328
+ keyword !== 'defmethod')
329
+ return null;
330
+ return secondSym ? secondSym.text : null;
331
+ }
332
+ function getClojureParamListNode(funcNode) {
333
+ if (funcNode.type !== 'list_lit')
334
+ return null;
335
+ // Find the first vec_lit child (the parameter vector)
336
+ for (let i = 0; i < funcNode.childCount; i++) {
337
+ const child = funcNode.child(i);
338
+ if (child?.type === 'vec_lit')
339
+ return child;
340
+ }
341
+ return null;
342
+ }
343
+ function extractClojureParamName(node) {
344
+ if (node.type === 'sym_lit')
345
+ return [node.text];
346
+ return null;
347
+ }
348
+ export const dataflowClojure = makeDataflowRules({
349
+ functionNodes: new Set(['list_lit']),
350
+ nameField: 'name',
351
+ nameExtractor: extractClojureFunctionName,
352
+ getParamListNode: getClojureParamListNode,
353
+ paramWrapperTypes: new Set(['sym_lit']),
354
+ extractParamName: extractClojureParamName,
355
+ returnNode: null, // Clojure: no explicit return; last expression is the result
356
+ callNode: 'list_lit',
357
+ // Clojure calls are also list_lit nodes — first sym is the function name.
358
+ // The dataflow visitor will see these as calls (not function defs) since
359
+ // nameExtractor returns null for non-def forms.
360
+ });
361
+ //# sourceMappingURL=b4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b4.js","sourceRoot":"","sources":["../../../src/ast-analysis/rules/b4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DataflowRulesConfig } from '../../types.js';
2
+ export declare const dataflowZig: DataflowRulesConfig;
3
+ export declare const dataflowSolidity: DataflowRulesConfig;
4
+ //# sourceMappingURL=b5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b5.d.ts","sourceRoot":"","sources":["../../../src/ast-analysis/rules/b5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAc1D,eAAO,MAAM,WAAW,EAAE,mBAqBxB,CAAC;AAYH,eAAO,MAAM,gBAAgB,EAAE,mBAiB7B,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { makeDataflowRules } from '../shared.js';
2
+ // ─── Zig ──────────────────────────────────────────────────────────────────────
3
+ //
4
+ // Zig function_declaration: name via `childForFieldName('name')` (confirmed in extractor line 68).
5
+ // Parameters: `childForFieldName('parameters')` (confirmed in extractor extractZigParams line 84).
6
+ // Each parameter is a `parameter` node; identifier child is the name (extractor line 89-90).
7
+ // return_statement: Zig has explicit return (confirmed in extractor + language spec).
8
+ // variable_declaration: name is first `identifier` child (extractor handleZigVariable line 99).
9
+ // call_expression: `childForFieldName('function')` (confirmed in extractor handleZigCallExpression line 209).
10
+ // field_expression/field_access: `childForFieldName('field')` or `childForFieldName('member')` (extractor line 215).
11
+ // member object: `childForFieldName('value')` or `funcNode.child(0)` (extractor line 216).
12
+ export const dataflowZig = makeDataflowRules({
13
+ functionNodes: new Set(['function_declaration']),
14
+ nameField: 'name',
15
+ paramListField: 'parameters',
16
+ paramWrapperTypes: new Set(['parameter']),
17
+ // Zig parameter: identifier child for the name (extractZigParams uses findChild(param, 'identifier'))
18
+ paramIdentifier: 'identifier',
19
+ returnNode: 'return_statement',
20
+ varDeclaratorNode: 'variable_declaration',
21
+ varNameField: 'name',
22
+ callNode: 'call_expression',
23
+ callFunctionField: 'function',
24
+ callArgsField: 'arguments',
25
+ memberNode: 'field_expression',
26
+ memberObjectField: 'value',
27
+ memberPropertyField: 'field',
28
+ });
29
+ // ─── Solidity ─────────────────────────────────────────────────────────────────
30
+ //
31
+ // Solidity function_definition: name via `childForFieldName('name')` (confirmed in extractor line 232).
32
+ // Parameters: `childForFieldName('parameters')` or findChild('parameter_list') (extractor line 355-357).
33
+ // Each parameter is a `parameter` node (extractor uses extractSimpleParameters with paramTypes: ['parameter']).
34
+ // return_statement: Solidity has explicit return.
35
+ // call_expression / function_call: both confirmed in extractor walkSolidityNode line 71-72.
36
+ // call_expression handler: `childForFieldName('function')` or `childForFieldName('callee')` (extractor line 336).
37
+ // member_expression: `childForFieldName('property')` (extractor line 342), `childForFieldName('object')` (line 343).
38
+ export const dataflowSolidity = makeDataflowRules({
39
+ functionNodes: new Set(['function_definition', 'modifier_definition']),
40
+ nameField: 'name',
41
+ paramListField: 'parameters',
42
+ paramWrapperTypes: new Set(['parameter']),
43
+ paramIdentifier: 'identifier',
44
+ returnNode: 'return_statement',
45
+ callNodes: new Set(['call_expression', 'function_call']),
46
+ callFunctionField: 'function',
47
+ callArgsField: 'arguments',
48
+ memberNode: 'member_expression',
49
+ memberObjectField: 'object',
50
+ memberPropertyField: 'property',
51
+ });
52
+ //# sourceMappingURL=b5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b5.js","sourceRoot":"","sources":["../../../src/ast-analysis/rules/b5.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,iFAAiF;AACjF,EAAE;AACF,mGAAmG;AACnG,mGAAmG;AACnG,6FAA6F;AAC7F,sFAAsF;AACtF,gGAAgG;AAChG,8GAA8G;AAC9G,qHAAqH;AACrH,2FAA2F;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAwB,iBAAiB,CAAC;IAChE,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM;IAEjB,cAAc,EAAE,YAAY;IAC5B,iBAAiB,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACzC,sGAAsG;IACtG,eAAe,EAAE,YAAY;IAE7B,UAAU,EAAE,kBAAkB;IAE9B,iBAAiB,EAAE,sBAAsB;IACzC,YAAY,EAAE,MAAM;IAEpB,QAAQ,EAAE,iBAAiB;IAC3B,iBAAiB,EAAE,UAAU;IAC7B,aAAa,EAAE,WAAW;IAE1B,UAAU,EAAE,kBAAkB;IAC9B,iBAAiB,EAAE,OAAO;IAC1B,mBAAmB,EAAE,OAAO;CAC7B,CAAC,CAAC;AAEH,iFAAiF;AACjF,EAAE;AACF,wGAAwG;AACxG,yGAAyG;AACzG,gHAAgH;AAChH,kDAAkD;AAClD,4FAA4F;AAC5F,kHAAkH;AAClH,qHAAqH;AAErH,MAAM,CAAC,MAAM,gBAAgB,GAAwB,iBAAiB,CAAC;IACrE,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACtE,SAAS,EAAE,MAAM;IAEjB,cAAc,EAAE,YAAY;IAC5B,iBAAiB,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACzC,eAAe,EAAE,YAAY;IAE7B,UAAU,EAAE,kBAAkB;IAE9B,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IACxD,iBAAiB,EAAE,UAAU;IAC7B,aAAa,EAAE,WAAW;IAE1B,UAAU,EAAE,mBAAmB;IAC/B,iBAAiB,EAAE,QAAQ;IAC3B,mBAAmB,EAAE,UAAU;CAChC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DataflowRulesConfig } from '../../types.js';
2
+ export declare const dataflow: DataflowRulesConfig;
3
+ export declare const dataflowCpp: DataflowRulesConfig;
4
+ //# sourceMappingURL=c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c.d.ts","sourceRoot":"","sources":["../../../src/ast-analysis/rules/c.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,gBAAgB,CAAC;AAkG1E,eAAO,MAAM,QAAQ,EAAE,mBA+BrB,CAAC;AAGH,eAAO,MAAM,WAAW,EAAE,mBAwBxB,CAAC"}
@@ -0,0 +1,143 @@
1
+ import { makeDataflowRules } from '../shared.js';
2
+ // ─── C/C++ function-name extraction ──────────────────────────────────────────
3
+ //
4
+ // C/C++ function_definition nests the name inside declarators:
5
+ // function_definition
6
+ // declarator: function_declarator
7
+ // declarator: identifier | pointer_declarator | qualified_identifier | ...
8
+ // parameters: parameter_list
9
+ //
10
+ // We unwrap through common decorator wrappers to reach the bare identifier.
11
+ const DECLARATOR_WRAPPERS = new Set([
12
+ 'pointer_declarator',
13
+ 'reference_declarator',
14
+ 'array_declarator',
15
+ 'parenthesized_declarator',
16
+ 'abstract_function_declarator',
17
+ ]);
18
+ function unwrapDeclarator(node) {
19
+ let cur = node;
20
+ while (cur && DECLARATOR_WRAPPERS.has(cur.type)) {
21
+ cur = cur.childForFieldName('declarator');
22
+ }
23
+ return cur;
24
+ }
25
+ function extractCFunctionName(node) {
26
+ const decl = node.childForFieldName('declarator');
27
+ if (!decl)
28
+ return null;
29
+ // For pointer/reference-returning functions (int *foo(), T &bar()), the direct
30
+ // child is a pointer_declarator or similar wrapper — unwrap one level first.
31
+ const unwrapped = DECLARATOR_WRAPPERS.has(decl.type)
32
+ ? decl.childForFieldName('declarator')
33
+ : decl;
34
+ const funcDecl = unwrapped?.type === 'function_declarator' ? unwrapped : null;
35
+ if (!funcDecl)
36
+ return null;
37
+ const inner = funcDecl.childForFieldName('declarator');
38
+ const nameNode = unwrapDeclarator(inner);
39
+ if (!nameNode)
40
+ return null;
41
+ // qualified_identifier (C++ method): extract the unqualified_identifier
42
+ if (nameNode.type === 'qualified_identifier') {
43
+ const unqual = nameNode.childForFieldName('name') ??
44
+ nameNode.namedChildren[nameNode.namedChildren.length - 1] ??
45
+ null;
46
+ return unqual?.text ?? null;
47
+ }
48
+ return nameNode.type === 'identifier' || nameNode.type === 'field_identifier'
49
+ ? nameNode.text
50
+ : null;
51
+ }
52
+ // Traverse through pointer/reference/array wrappers to reach function_declarator.
53
+ function findFuncDeclarator(node) {
54
+ if (!node)
55
+ return null;
56
+ if (node.type === 'function_declarator')
57
+ return node;
58
+ if (DECLARATOR_WRAPPERS.has(node.type)) {
59
+ return findFuncDeclarator(node.childForFieldName('declarator'));
60
+ }
61
+ return null;
62
+ }
63
+ // Navigate function_definition → (optional wrapper) → function_declarator → parameters.
64
+ // Needed because C/C++ params are on function_declarator, not directly on function_definition.
65
+ function getCParamListNode(funcNode) {
66
+ const decl = funcNode.childForFieldName('declarator');
67
+ return findFuncDeclarator(decl)?.childForFieldName('parameters') ?? null;
68
+ }
69
+ function extractCParamName(node) {
70
+ if (node.type !== 'parameter_declaration')
71
+ return null;
72
+ const decl = node.childForFieldName('declarator');
73
+ if (!decl)
74
+ return null;
75
+ // Reference declarator (T& name, T&& name): tree-sitter-cpp uses no named
76
+ // 'declarator' field inside reference_declarator, so unwrapDeclarator would
77
+ // return null. Handle it first by taking the last named child.
78
+ if (decl.type === 'reference_declarator') {
79
+ const inner = decl.namedChild(decl.namedChildCount - 1);
80
+ if (inner?.type === 'identifier')
81
+ return [inner.text];
82
+ return null;
83
+ }
84
+ const nameNode = unwrapDeclarator(decl);
85
+ if (!nameNode)
86
+ return null;
87
+ if (nameNode.type === 'identifier')
88
+ return [nameNode.text];
89
+ return null;
90
+ }
91
+ // ─── C Dataflow rules ─────────────────────────────────────────────────────────
92
+ export const dataflow = makeDataflowRules({
93
+ functionNodes: new Set(['function_definition']),
94
+ nameField: 'declarator',
95
+ nameExtractor: extractCFunctionName,
96
+ paramListField: 'parameters',
97
+ getParamListNode: getCParamListNode,
98
+ paramIdentifier: 'identifier',
99
+ paramWrapperTypes: new Set(['parameter_declaration']),
100
+ extractParamName: extractCParamName,
101
+ returnNode: 'return_statement',
102
+ varDeclaratorNode: 'init_declarator',
103
+ varNameField: 'declarator',
104
+ varValueField: 'value',
105
+ assignmentNode: 'assignment_expression',
106
+ assignLeftField: 'left',
107
+ assignRightField: 'right',
108
+ callNode: 'call_expression',
109
+ callFunctionField: 'function',
110
+ callArgsField: 'arguments',
111
+ memberNode: 'field_expression',
112
+ memberObjectField: 'argument',
113
+ memberPropertyField: 'field',
114
+ expressionStmtNode: 'expression_statement',
115
+ mutatingMethods: new Set(),
116
+ });
117
+ // C++ extends C with additional function node types
118
+ export const dataflowCpp = makeDataflowRules({
119
+ ...dataflow,
120
+ functionNodes: new Set([
121
+ 'function_definition',
122
+ // function_declaration is a forward declaration (no body) in tree-sitter-cpp;
123
+ // including it creates spurious param vertices from prototypes and can overwrite
124
+ // correct dataflow_summary rows with flows_to_return=0 when the declaration is
125
+ // processed after the definition.
126
+ ]),
127
+ // C++ call expressions can use :: scope resolution
128
+ mutatingMethods: new Set([
129
+ 'push_back',
130
+ 'push_front',
131
+ 'insert',
132
+ 'erase',
133
+ 'clear',
134
+ 'resize',
135
+ 'reserve',
136
+ 'emplace',
137
+ 'emplace_back',
138
+ 'emplace_front',
139
+ 'append',
140
+ 'assign',
141
+ ]),
142
+ });
143
+ //# sourceMappingURL=c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c.js","sourceRoot":"","sources":["../../../src/ast-analysis/rules/c.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ast-analysis/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAYxB,eAAO,MAAM,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAWxD,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAWpD,CAAC;AAIH,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAWhD,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAW1D,CAAC;AAwIH,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmC5D,CAAC;AASH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAkCD,eAAO,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAmC1D,CAAC;AAeH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAKvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ast-analysis/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAiBxB,eAAO,MAAM,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAWxD,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAWpD,CAAC;AAIH,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAWhD,CAAC;AAIH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAwC1D,CAAC;AAwIH,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmC5D,CAAC;AASH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAkCD,eAAO,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAmC1D,CAAC;AAeH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAKvE"}