gitnexus 1.6.10-rc.21 → 1.6.10-rc.211

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 (870) hide show
  1. package/README.md +212 -22
  2. package/dist/_shared/graph/types.d.ts +27 -8
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +4 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +19 -1
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +23 -10
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  20. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  21. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  22. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  23. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
  25. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
  27. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  28. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  29. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
  31. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  33. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  34. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  35. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  36. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  37. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  38. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  39. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  40. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  41. package/dist/_shared/scope-resolution/types.d.ts +297 -5
  42. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  43. package/dist/cli/ai-context.d.ts +10 -2
  44. package/dist/cli/ai-context.js +128 -61
  45. package/dist/cli/analyze-config.d.ts +1 -1
  46. package/dist/cli/analyze-options.d.ts +131 -0
  47. package/dist/cli/analyze-options.js +1 -0
  48. package/dist/cli/analyze.d.ts +25 -114
  49. package/dist/cli/analyze.js +194 -36
  50. package/dist/cli/cli-message.d.ts +1 -1
  51. package/dist/cli/detect-changes-format.js +19 -2
  52. package/dist/cli/doctor.d.ts +23 -0
  53. package/dist/cli/doctor.js +72 -9
  54. package/dist/cli/editor-targets.js +6 -0
  55. package/dist/cli/eval-server.d.ts +23 -1
  56. package/dist/cli/eval-server.js +128 -9
  57. package/dist/cli/format-symbol.d.ts +15 -0
  58. package/dist/cli/format-symbol.js +17 -0
  59. package/dist/cli/generated-skill.d.ts +17 -0
  60. package/dist/cli/generated-skill.js +1 -0
  61. package/dist/cli/group.js +23 -2
  62. package/dist/cli/help-i18n.js +3 -0
  63. package/dist/cli/i18n/en.d.ts +17 -8
  64. package/dist/cli/i18n/en.js +19 -8
  65. package/dist/cli/i18n/resources.d.ts +26 -8
  66. package/dist/cli/i18n/zh-CN.d.ts +9 -0
  67. package/dist/cli/i18n/zh-CN.js +17 -8
  68. package/dist/cli/index.js +16 -9
  69. package/dist/cli/lazy-action.d.ts +7 -0
  70. package/dist/cli/lazy-action.js +27 -0
  71. package/dist/cli/mcp.js +6 -3
  72. package/dist/cli/resolve-invocation.d.ts +7 -3
  73. package/dist/cli/resolve-invocation.js +7 -3
  74. package/dist/cli/setup.d.ts +8 -0
  75. package/dist/cli/setup.js +30 -7
  76. package/dist/cli/skill-gen.d.ts +1 -6
  77. package/dist/cli/skill-gen.js +88 -18
  78. package/dist/cli/standard-skills.d.ts +76 -0
  79. package/dist/cli/standard-skills.js +45 -0
  80. package/dist/cli/status.d.ts +4 -1
  81. package/dist/cli/status.js +57 -4
  82. package/dist/cli/tool.d.ts +1 -0
  83. package/dist/cli/tool.js +75 -7
  84. package/dist/cli/uninstall.js +7 -2
  85. package/dist/cli/wiki.d.ts +1 -0
  86. package/dist/cli/wiki.js +59 -10
  87. package/dist/config/ignore-service.d.ts +2 -0
  88. package/dist/config/ignore-service.js +31 -4
  89. package/dist/core/analysis-features.d.ts +21 -0
  90. package/dist/core/analysis-features.js +59 -0
  91. package/dist/core/analyzer-identity.d.ts +154 -0
  92. package/dist/core/analyzer-identity.js +2158 -0
  93. package/dist/core/augmentation/engine.js +95 -76
  94. package/dist/core/embedding-checkpoint.d.ts +143 -0
  95. package/dist/core/embedding-checkpoint.js +221 -0
  96. package/dist/core/embedding-count.d.ts +61 -0
  97. package/dist/core/embedding-count.js +69 -0
  98. package/dist/core/embeddings/ast-utils.js +9 -1
  99. package/dist/core/embeddings/embedder.d.ts +3 -2
  100. package/dist/core/embeddings/embedder.js +8 -5
  101. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  102. package/dist/core/embeddings/embedding-identity.js +24 -0
  103. package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
  104. package/dist/core/embeddings/embedding-pipeline.js +341 -19
  105. package/dist/core/embeddings/http-client.d.ts +10 -2
  106. package/dist/core/embeddings/http-client.js +282 -47
  107. package/dist/core/embeddings/node-module-compat.d.ts +4 -2
  108. package/dist/core/embeddings/node-module-compat.js +4 -2
  109. package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
  110. package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
  111. package/dist/core/embeddings/runtime-install.js +1 -1
  112. package/dist/core/git-staleness.js +1 -1
  113. package/dist/core/graph/graph.js +3 -0
  114. package/dist/core/graph/import-cycles.d.ts +194 -3
  115. package/dist/core/graph/import-cycles.js +522 -73
  116. package/dist/core/graph/types.d.ts +18 -0
  117. package/dist/core/group/bridge-db.js +5 -27
  118. package/dist/core/group/cross-impact.d.ts +21 -0
  119. package/dist/core/group/cross-impact.js +128 -15
  120. package/dist/core/group/cross-trace.js +27 -16
  121. package/dist/core/group/extractors/http-patterns/java.js +91 -14
  122. package/dist/core/group/extractors/http-patterns/node.js +19 -0
  123. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  124. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  125. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  126. package/dist/core/group/extractors/include-extractor.js +20 -2
  127. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  128. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  129. package/dist/core/group/service.js +10 -1
  130. package/dist/core/group/storage.js +2 -33
  131. package/dist/core/group/types.d.ts +18 -0
  132. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  133. package/dist/core/incremental/subgraph-extract.js +33 -10
  134. package/dist/core/index-freshness.d.ts +80 -0
  135. package/dist/core/index-freshness.js +120 -0
  136. package/dist/core/ingestion/call-processor.d.ts +13 -1
  137. package/dist/core/ingestion/call-processor.js +110 -3
  138. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  139. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  140. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  141. package/dist/core/ingestion/cfg/emit.js +9 -23
  142. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  143. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  144. package/dist/core/ingestion/cluster-enricher.js +8 -4
  145. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  146. package/dist/core/ingestion/community-processor.d.ts +21 -3
  147. package/dist/core/ingestion/community-processor.js +88 -83
  148. package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
  149. package/dist/core/ingestion/di-extractors/index.js +17 -18
  150. package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
  151. package/dist/core/ingestion/di-extractors/spring.js +87 -3
  152. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  153. package/dist/core/ingestion/di-extractors/types.js +15 -0
  154. package/dist/core/ingestion/emit-references.js +4 -0
  155. package/dist/core/ingestion/filesystem-walker.js +16 -12
  156. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  157. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
  158. package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
  159. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  160. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  161. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  162. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  163. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  164. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  165. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  166. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  167. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  168. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  169. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  170. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -0
  171. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  172. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  173. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  174. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  175. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  176. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  177. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
  178. package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
  179. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  180. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  181. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  182. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  183. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  184. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  185. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  186. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  187. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  188. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  189. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  190. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  191. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +428 -0
  192. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  193. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  194. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  195. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  196. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  197. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  198. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  199. package/dist/core/ingestion/import-resolvers/php.js +27 -8
  200. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  201. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  202. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  203. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  204. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  205. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  206. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  207. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  208. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  209. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  210. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  211. package/dist/core/ingestion/language-config.d.ts +20 -1
  212. package/dist/core/ingestion/language-config.js +18 -23
  213. package/dist/core/ingestion/language-provider.d.ts +133 -7
  214. package/dist/core/ingestion/languages/c/captures.js +63 -0
  215. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  216. package/dist/core/ingestion/languages/c/query.js +17 -0
  217. package/dist/core/ingestion/languages/c/scope-resolver.js +26 -19
  218. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  219. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  220. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  221. package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -20
  222. package/dist/core/ingestion/languages/cobol.js +13 -0
  223. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  224. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  225. package/dist/core/ingestion/languages/cpp/captures.js +222 -3
  226. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  227. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  228. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  229. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  231. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  232. package/dist/core/ingestion/languages/cpp/scope-resolver.js +62 -20
  233. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  234. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  235. package/dist/core/ingestion/languages/csharp/captures.js +44 -0
  236. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  237. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  238. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  239. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  240. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  241. package/dist/core/ingestion/languages/dart/captures.js +686 -16
  242. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  243. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  244. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  245. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  246. package/dist/core/ingestion/languages/dart/index.js +1 -1
  247. package/dist/core/ingestion/languages/dart/query.js +98 -1
  248. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  249. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  250. package/dist/core/ingestion/languages/dart.js +8 -1
  251. package/dist/core/ingestion/languages/go/captures.js +142 -3
  252. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  253. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  254. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  255. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  256. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  257. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  258. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  259. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  260. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  261. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  262. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  263. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  264. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  265. package/dist/core/ingestion/languages/go/query.js +56 -3
  266. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  267. package/dist/core/ingestion/languages/go.js +9 -0
  268. package/dist/core/ingestion/languages/java/analysis-features.d.ts +7 -0
  269. package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
  270. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
  271. package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
  272. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  273. package/dist/core/ingestion/languages/java/captures.js +321 -49
  274. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  275. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  276. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  277. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  278. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  279. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  280. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  281. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  282. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  283. package/dist/core/ingestion/languages/java/query.js +39 -3
  284. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  285. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  286. package/dist/core/ingestion/languages/java/scope-resolver.js +35 -2
  287. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  288. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  289. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  290. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  291. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  292. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  293. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  294. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  295. package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
  296. package/dist/core/ingestion/languages/java/spring-di.js +160 -0
  297. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  298. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  299. package/dist/core/ingestion/languages/java.js +76 -3
  300. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  301. package/dist/core/ingestion/languages/javascript/captures.js +278 -4
  302. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  303. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  304. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  305. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  306. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  307. package/dist/core/ingestion/languages/javascript/query.js +232 -5
  308. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  309. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  310. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  311. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  312. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  313. package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
  314. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
  315. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
  316. package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
  317. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  318. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  319. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  320. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  321. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  322. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  323. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  324. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  325. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  326. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  327. package/dist/core/ingestion/languages/kotlin/query.js +47 -2
  328. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
  329. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  330. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  331. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  332. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  333. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  334. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  335. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +20 -0
  336. package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
  337. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  338. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  339. package/dist/core/ingestion/languages/kotlin.js +5 -6
  340. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  341. package/dist/core/ingestion/languages/php/captures.js +359 -51
  342. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  343. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  344. package/dist/core/ingestion/languages/php/import-target.js +229 -7
  345. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  346. package/dist/core/ingestion/languages/php/query.js +31 -0
  347. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  348. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  349. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  350. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  351. package/dist/core/ingestion/languages/python/captures.js +53 -5
  352. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  353. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  354. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  355. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  356. package/dist/core/ingestion/languages/python/index.js +1 -1
  357. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  358. package/dist/core/ingestion/languages/python/interpret.js +249 -3
  359. package/dist/core/ingestion/languages/python/query.js +9 -0
  360. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
  361. package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
  362. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  363. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  364. package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
  365. package/dist/core/ingestion/languages/ruby/captures.js +200 -0
  366. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  367. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  368. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  369. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  370. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  371. package/dist/core/ingestion/languages/rust/captures.js +52 -1
  372. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  373. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  374. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  375. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  376. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  377. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  378. package/dist/core/ingestion/languages/rust/query.js +48 -6
  379. package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
  380. package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
  381. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  382. package/dist/core/ingestion/languages/rust.js +17 -0
  383. package/dist/core/ingestion/languages/swift/captures.js +99 -3
  384. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  385. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  386. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  387. package/dist/core/ingestion/languages/swift/query.js +17 -0
  388. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  389. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  390. package/dist/core/ingestion/languages/swift.js +2 -0
  391. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  392. package/dist/core/ingestion/languages/typescript/captures.js +288 -5
  393. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  394. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  395. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  396. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  397. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  398. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  399. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  400. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  401. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  402. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  403. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  404. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  405. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  406. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  407. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  408. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  409. package/dist/core/ingestion/languages/typescript/query.js +340 -14
  410. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  411. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  412. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  413. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  414. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  415. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  416. package/dist/core/ingestion/languages/typescript/tsconfig.js +291 -0
  417. package/dist/core/ingestion/languages/typescript.js +87 -1
  418. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  419. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  420. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  421. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  422. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  423. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  424. package/dist/core/ingestion/method-types.d.ts +16 -0
  425. package/dist/core/ingestion/parsing-processor.js +32 -1
  426. package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
  427. package/dist/core/ingestion/pipeline-phases/di.js +275 -157
  428. package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
  429. package/dist/core/ingestion/pipeline-phases/index.js +3 -0
  430. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  431. package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
  432. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  433. package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
  434. package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
  435. package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
  436. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  437. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  438. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  439. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  440. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  441. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  442. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  443. package/dist/core/ingestion/pipeline.d.ts +27 -3
  444. package/dist/core/ingestion/pipeline.js +62 -12
  445. package/dist/core/ingestion/process-processor.d.ts +109 -2
  446. package/dist/core/ingestion/process-processor.js +464 -52
  447. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  448. package/dist/core/ingestion/resolve-references.js +78 -6
  449. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
  450. package/dist/core/ingestion/route-extractors/data-route-table.js +864 -0
  451. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  452. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  453. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  454. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  455. package/dist/core/ingestion/route-extractors/spring.js +109 -24
  456. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  457. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  458. package/dist/core/ingestion/scope-extractor.js +617 -59
  459. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
  460. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  461. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  462. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  463. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
  464. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
  465. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  466. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
  467. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  468. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  469. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +56 -1
  470. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
  471. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  472. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +46 -3
  473. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
  474. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
  475. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  476. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  477. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +19 -4
  478. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
  479. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  480. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  481. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +64 -0
  482. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
  483. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
  484. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  485. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  486. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  487. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  488. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  489. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +34 -0
  490. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
  491. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
  492. package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
  493. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  494. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  495. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  496. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  497. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  498. package/dist/core/ingestion/scope-resolution/scope/walkers.js +968 -56
  499. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  500. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  501. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  502. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  503. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  504. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  505. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  506. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  507. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  508. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  509. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  510. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  511. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  512. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  513. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  514. package/dist/core/ingestion/tree-sitter-queries.js +688 -5
  515. package/dist/core/ingestion/type-env.js +11 -7
  516. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  517. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  518. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  519. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  520. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  521. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  522. package/dist/core/ingestion/utils/ast-helpers.d.ts +311 -14
  523. package/dist/core/ingestion/utils/ast-helpers.js +745 -48
  524. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  525. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  526. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +153 -0
  527. package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
  528. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  529. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  530. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  531. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  532. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  533. package/dist/core/ingestion/utils/line-base.js +14 -0
  534. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  535. package/dist/core/ingestion/utils/method-props.js +29 -4
  536. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  537. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  538. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  539. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  540. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  541. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  542. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  543. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  544. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  545. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  546. package/dist/core/ingestion/workers/callable-id.d.ts +72 -0
  547. package/dist/core/ingestion/workers/callable-id.js +116 -0
  548. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  549. package/dist/core/ingestion/workers/parse-worker.js +409 -39
  550. package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
  551. package/dist/core/ingestion/workers/worker-pool.js +133 -25
  552. package/dist/core/lbug/csv-generator.d.ts +27 -0
  553. package/dist/core/lbug/csv-generator.js +80 -17
  554. package/dist/core/lbug/extension-load-error.d.ts +2 -2
  555. package/dist/core/lbug/extension-load-error.js +44 -27
  556. package/dist/core/lbug/extension-loader.d.ts +29 -0
  557. package/dist/core/lbug/extension-loader.js +32 -7
  558. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  559. package/dist/core/lbug/graph-emit-sink.js +581 -0
  560. package/dist/core/lbug/lbug-adapter.d.ts +337 -3
  561. package/dist/core/lbug/lbug-adapter.js +772 -67
  562. package/dist/core/lbug/lbug-config.d.ts +93 -6
  563. package/dist/core/lbug/lbug-config.js +269 -9
  564. package/dist/core/lbug/native-check.d.ts +39 -0
  565. package/dist/core/lbug/native-check.js +323 -46
  566. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  567. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  568. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  569. package/dist/core/lbug/pool-adapter.js +115 -7
  570. package/dist/core/lbug/query-batch.d.ts +75 -0
  571. package/dist/core/lbug/query-batch.js +102 -0
  572. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  573. package/dist/core/lbug/rel-pair-routing.js +228 -10
  574. package/dist/core/lbug/schema.d.ts +162 -3
  575. package/dist/core/lbug/schema.js +392 -157
  576. package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
  577. package/dist/core/lbug/sidecar-recovery.js +1 -1
  578. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  579. package/dist/core/lbug/sync-csv-writer.js +108 -0
  580. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  581. package/dist/core/platform/capabilities.d.ts +0 -1
  582. package/dist/core/platform/capabilities.js +12 -7
  583. package/dist/core/run-analyze.d.ts +150 -3
  584. package/dist/core/run-analyze.js +1562 -151
  585. package/dist/core/search/bm25-index.d.ts +11 -0
  586. package/dist/core/search/bm25-index.js +60 -26
  587. package/dist/core/search/fts-indexes.d.ts +167 -2
  588. package/dist/core/search/fts-indexes.js +264 -10
  589. package/dist/core/wiki/graph-queries.js +145 -112
  590. package/dist/core/wiki/llm-client.d.ts +37 -5
  591. package/dist/core/wiki/llm-client.js +88 -17
  592. package/dist/core/wiki/prompts.d.ts +19 -0
  593. package/dist/core/wiki/prompts.js +20 -1
  594. package/dist/lib/utils.d.ts +113 -0
  595. package/dist/lib/utils.js +185 -0
  596. package/dist/mcp/http-transport.d.ts +5 -0
  597. package/dist/mcp/http-transport.js +19 -5
  598. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  599. package/dist/mcp/local/aop-metadata.js +227 -0
  600. package/dist/mcp/local/bean-metadata.d.ts +3 -0
  601. package/dist/mcp/local/bean-metadata.js +46 -0
  602. package/dist/mcp/local/local-backend.d.ts +167 -6
  603. package/dist/mcp/local/local-backend.js +1756 -405
  604. package/dist/mcp/local/path-predicate.d.ts +19 -0
  605. package/dist/mcp/local/path-predicate.js +21 -0
  606. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  607. package/dist/mcp/local/pdg-impact.js +391 -98
  608. package/dist/mcp/output-budget.d.ts +5 -0
  609. package/dist/mcp/output-budget.js +52 -0
  610. package/dist/mcp/read-only-policy.d.ts +12 -0
  611. package/dist/mcp/read-only-policy.js +102 -0
  612. package/dist/mcp/repository-policy.d.ts +35 -0
  613. package/dist/mcp/repository-policy.js +333 -0
  614. package/dist/mcp/resources.js +34 -7
  615. package/dist/mcp/server.d.ts +5 -2
  616. package/dist/mcp/server.js +48 -18
  617. package/dist/mcp/tools.d.ts +8 -8
  618. package/dist/mcp/tools.js +91 -20
  619. package/dist/server/analyze-job.d.ts +40 -2
  620. package/dist/server/analyze-job.js +30 -2
  621. package/dist/server/analyze-launch.d.ts +1 -1
  622. package/dist/server/analyze-launch.js +79 -10
  623. package/dist/server/analyze-worker-core.d.ts +3 -2
  624. package/dist/server/analyze-worker-core.js +15 -3
  625. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  626. package/dist/server/analyze-worker-ipc.js +4 -0
  627. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  628. package/dist/server/analyze-worker-protocol.js +1 -0
  629. package/dist/server/analyze-worker.d.ts +1 -17
  630. package/dist/server/analyze-worker.js +29 -6
  631. package/dist/server/api.d.ts +2 -11
  632. package/dist/server/api.js +200 -155
  633. package/dist/server/embed-run-outcome.d.ts +89 -0
  634. package/dist/server/embed-run-outcome.js +88 -0
  635. package/dist/server/git-clone.js +6 -2
  636. package/dist/server/mcp-http.d.ts +1 -1
  637. package/dist/server/mcp-http.js +4 -2
  638. package/dist/server/middleware.d.ts +116 -9
  639. package/dist/server/middleware.js +291 -22
  640. package/dist/server/sse-progress.d.ts +41 -0
  641. package/dist/server/sse-progress.js +125 -0
  642. package/dist/server/upload-ingest.js +2 -1
  643. package/dist/server/validation.js +2 -1
  644. package/dist/storage/branch-index.d.ts +11 -6
  645. package/dist/storage/branch-index.js +15 -7
  646. package/dist/storage/file-hash.js +2 -2
  647. package/dist/storage/fs-atomic.d.ts +25 -0
  648. package/dist/storage/fs-atomic.js +42 -0
  649. package/dist/storage/git.d.ts +165 -0
  650. package/dist/storage/git.js +352 -3
  651. package/dist/storage/index-lock.d.ts +83 -0
  652. package/dist/storage/index-lock.js +654 -0
  653. package/dist/storage/parse-cache.js +482 -1
  654. package/dist/storage/parsedfile-store.d.ts +8 -0
  655. package/dist/storage/parsedfile-store.js +235 -1
  656. package/dist/storage/repo-manager.d.ts +29 -309
  657. package/dist/storage/repo-manager.js +187 -165
  658. package/dist/storage/repo-meta.d.ts +530 -0
  659. package/dist/storage/repo-meta.js +100 -0
  660. package/dist/types/pipeline.d.ts +37 -0
  661. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  662. package/hooks/claude/gitnexus-hook.cjs +1 -1
  663. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  664. package/package.json +20 -12
  665. package/scripts/cross-platform-shard.ts +143 -0
  666. package/scripts/cross-platform-tests.ts +94 -0
  667. package/scripts/ensure-fts.ts +14 -3
  668. package/scripts/run-cross-platform.ts +36 -10
  669. package/scripts/sync-plugin-manifests.mjs +192 -0
  670. package/skills/gitnexus-cli.md +3 -3
  671. package/skills/gitnexus-debugging.md +37 -7
  672. package/skills/gitnexus-exploring.md +26 -4
  673. package/skills/gitnexus-impact-analysis.md +71 -10
  674. package/skills/gitnexus-lfg/README.md +55 -0
  675. package/skills/gitnexus-lfg/SKILL.md +86 -0
  676. package/skills/gitnexus-plan/README.md +147 -0
  677. package/skills/gitnexus-plan/SKILL.md +348 -0
  678. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  679. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  680. package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
  681. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  682. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  683. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
  684. package/skills/gitnexus-refactoring.md +48 -5
  685. package/skills/gitnexus-review/SKILL.md +279 -0
  686. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  687. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  688. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  689. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  690. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  691. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  692. package/skills/gitnexus-taint-analysis.md +13 -7
  693. package/skills/gitnexus-work/README.md +71 -0
  694. package/skills/gitnexus-work/SKILL.md +272 -0
  695. package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
  696. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
  697. package/vendor/leiden/utils.cjs +28 -1
  698. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  699. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  700. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  701. package/web/assets/agent-DIzEQ1JJ.js +626 -0
  702. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  703. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  704. package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
  705. package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
  706. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  707. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  708. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  709. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  710. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  711. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  712. package/web/assets/chunk-6L755F7B-CMhLBxi2.js +1 -0
  713. package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
  714. package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
  715. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  716. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  717. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  718. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  719. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  720. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  721. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  722. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  723. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  724. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  725. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  726. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  727. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  728. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  729. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  730. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  731. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  732. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  733. package/web/assets/chunk-SZD42YQK-ijyKKVr1.js +70 -0
  734. package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
  735. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  736. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  737. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  738. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  739. package/web/assets/chunk-VJFVEZTB-CX66F2ep.js +206 -0
  740. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  741. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  742. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  743. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  744. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  745. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  746. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  747. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  748. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  749. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  750. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  751. package/web/assets/diagram-KFBZAVDW-Dfmf_4ti.js +3 -0
  752. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  753. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  754. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  755. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  756. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  757. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  758. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  759. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  760. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  761. package/web/assets/{index-B4eB4dNZ.js → index-BBNl0qfX.js} +51 -51
  762. package/web/assets/index-CJDpyH-n.css +2 -0
  763. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  764. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  765. package/web/assets/{ishikawaDiagram-BNXS4ZKH-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
  766. package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
  767. package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
  768. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  769. package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
  770. package/web/assets/node-Ct_zna8U.js +8 -0
  771. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  772. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  773. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  774. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  775. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  776. package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
  777. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  778. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  779. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  780. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  781. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  782. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  783. package/web/assets/requirementDiagram-RASO5HTO-B-l8InpK.js +84 -0
  784. package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
  785. package/web/assets/sdk-CzHHH8tD.js +37 -0
  786. package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
  787. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  788. package/web/assets/src-C5sx_gMp.js +1 -0
  789. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  790. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  791. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  792. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  793. package/web/assets/timeline-definition-WJXWRH4I-DUfp1R3E.js +120 -0
  794. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  795. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  796. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  797. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  798. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  799. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  800. package/web/index.html +17 -15
  801. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  802. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  803. package/skills/gitnexus-pr-review.md +0 -163
  804. package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
  805. package/web/assets/agent-DNYDy-KA.js +0 -660
  806. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  807. package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
  808. package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
  809. package/web/assets/chunk-2T2R6R2M-pkw2oXHH.js +0 -4
  810. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  811. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  812. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  813. package/web/assets/chunk-67TQ5CYL-zxhDWgyF.js +0 -124
  814. package/web/assets/chunk-7J6CGLKN-AmkN8jJN.js +0 -10
  815. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  816. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  817. package/web/assets/chunk-INKRHTLW-D9BM9HWZ.js +0 -70
  818. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  819. package/web/assets/chunk-KGFNY3KK-tD2F6wxK.js +0 -62
  820. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  821. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  822. package/web/assets/chunk-LCXTWHL2-Ba9JK-6F.js +0 -231
  823. package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
  824. package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
  825. package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
  826. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  827. package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
  828. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  829. package/web/assets/chunk-T2UQINTJ-BJusEiGe.js +0 -1
  830. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  831. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  832. package/web/assets/chunk-UY5QBCOK-BCpUlARQ.js +0 -1
  833. package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
  834. package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
  835. package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
  836. package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
  837. package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
  838. package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
  839. package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
  840. package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
  841. package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
  842. package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
  843. package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
  844. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  845. package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
  846. package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
  847. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  848. package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.js +0 -106
  849. package/web/assets/index-CX_fADmQ.css +0 -2
  850. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  851. package/web/assets/infoDiagram-3YFTVSEB-DIPVUIQ6.js +0 -2
  852. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  853. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  854. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  855. package/web/assets/pieDiagram-CU6KROY3-D3YC_xyg.js +0 -30
  856. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  857. package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
  858. package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
  859. package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
  860. package/web/assets/src-BNCXICdA.js +0 -1
  861. package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
  862. package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
  863. package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
  864. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  865. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  866. package/web/assets/vennDiagram-MWXL3ELB-BQX2ossk.js +0 -34
  867. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  868. package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
  869. package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
  870. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -2,54 +2,84 @@ import { getRustParser } from './query.js';
2
2
  import { getTreeSitterBufferSize } from '../../constants.js';
3
3
  import { parseSourceSafe, ParseTimeoutError } from '../../../tree-sitter/safe-parse.js';
4
4
  import { logger } from '../../../logger.js';
5
+ import { lookupBindingsAt } from '../../scope-resolution/scope/walkers.js';
5
6
  /**
6
- * Populate type bindings for patterns and iterators that the tree-sitter
7
- * query can't handle (they need runtime type lookup, not just syntax).
8
- *
9
- * Covers: for-loop element types, if-let/while-let pattern bindings,
10
- * match arm patterns, and struct destructuring.
11
- *
12
- * Runs in Phase 2 (after propagateImportedReturnTypes) so all cross-file
13
- * type bindings are available for lookup.
7
+ * Hold parsed trees for reuse across both prepass loops only when the whole
8
+ * Rust source fits this budget. Trees are much larger than their source, so a
9
+ * modest source cap keeps peak held-tree memory bounded; larger repos fall
10
+ * back to re-parsing per loop (unchanged RSS).
14
11
  */
15
- export function populateRustRangeBindings(parsedFiles, _indexes, ctx) {
12
+ const TREE_REUSE_SOURCE_BUDGET_BYTES = 16 * 1024 * 1024;
13
+ /**
14
+ * Parse `filePath`'s source once, honoring the caller's `treeCache` and, when
15
+ * provided, an in-function `store` so the two prepass loops share a single
16
+ * parse instead of re-parsing every file. Returns null when the source is
17
+ * missing or parsing times out.
18
+ */
19
+ function getOrParseTree(parser, filePath, ctx, store) {
20
+ const cached = (ctx.treeCache?.get(filePath) ?? store?.get(filePath));
21
+ if (cached !== undefined)
22
+ return cached;
23
+ const sourceText = ctx.fileContents.get(filePath);
24
+ if (sourceText === undefined)
25
+ return null;
26
+ let tree;
27
+ try {
28
+ tree = parseSourceSafe(parser, sourceText, undefined, {
29
+ bufferSize: getTreeSitterBufferSize(sourceText),
30
+ });
31
+ }
32
+ catch (err) {
33
+ if (err instanceof ParseTimeoutError) {
34
+ logger.warn({ file: filePath }, 'rust range-binding: parse timed out, skipping file');
35
+ return null;
36
+ }
37
+ throw err;
38
+ }
39
+ store?.set(filePath, tree);
40
+ return tree;
41
+ }
42
+ export function populateRustRangeBindings(parsedFiles, indexes, ctx) {
16
43
  const parser = getRustParser();
17
44
  const allReturnTypes = new Map();
45
+ const ambiguousReturnTypes = new Set();
18
46
  const allFieldTypes = new Map();
47
+ const ambiguousFieldTypes = new Set();
48
+ // Per-defining-file, un-collapsed, FULL-generic return/field types. When a
49
+ // bare name is ambiguous (#2514) but the call site's `use` import pins a
50
+ // single definition, we resolve that definition's file here and read its
51
+ // untruncated type so a generic `Vec<Repo>` element type survives (#2514
52
+ // follow-up: import-disambiguated duplicates resolve like the compiler).
53
+ const returnTypeByFile = new Map();
54
+ const fieldTypeByFile = new Map();
55
+ // Parse each file once and reuse across both loops when the workspace fits
56
+ // the byte budget; otherwise re-parse per loop to bound RSS (see helper).
57
+ let totalSourceBytes = 0;
58
+ for (const parsed of parsedFiles) {
59
+ totalSourceBytes += ctx.fileContents.get(parsed.filePath)?.length ?? 0;
60
+ }
61
+ const treeStore = totalSourceBytes <= TREE_REUSE_SOURCE_BUDGET_BYTES ? new Map() : undefined;
19
62
  for (const parsed of parsedFiles) {
20
- const sourceText = ctx.fileContents.get(parsed.filePath);
21
- if (sourceText === undefined)
63
+ const tree = getOrParseTree(parser, parsed.filePath, ctx, treeStore);
64
+ if (tree === null)
22
65
  continue;
23
- const cachedTree = ctx.treeCache?.get(parsed.filePath);
24
- let tree;
25
- if (cachedTree !== undefined) {
26
- tree = cachedTree;
27
- }
28
- else {
29
- try {
30
- tree = parseSourceSafe(parser, sourceText, undefined, {
31
- bufferSize: getTreeSitterBufferSize(sourceText),
32
- });
33
- }
34
- catch (err) {
35
- if (err instanceof ParseTimeoutError) {
36
- logger.warn({ file: parsed.filePath }, 'rust range-binding: parse timed out, skipping file');
37
- continue;
38
- }
39
- throw err;
40
- }
41
- }
42
66
  for (const fn of tree.rootNode.descendantsOfType('function_item')) {
43
67
  const nameNode = fn.childForFieldName('name');
44
68
  const retType = fn.childForFieldName('return_type');
45
69
  if (nameNode !== null && retType !== null) {
46
70
  const name = nameNode.text;
71
+ // Ambiguity is a latch, not a toggle: once a name has two or more
72
+ // workspace definitions it stays ambiguous for the rest of the
73
+ // prepass, regardless of duplicate count or file order (#2514).
47
74
  if (allReturnTypes.has(name)) {
48
75
  allReturnTypes.delete(name);
76
+ ambiguousReturnTypes.add(name);
49
77
  }
50
- else {
78
+ else if (!ambiguousReturnTypes.has(name)) {
51
79
  allReturnTypes.set(name, retType.text);
52
80
  }
81
+ // Full-generic record per defining file for import-disambiguated lookup.
82
+ recordByFile(returnTypeByFile, parsed.filePath, name, retType.text);
53
83
  }
54
84
  }
55
85
  for (const structNode of tree.rootNode.descendantsOfType('struct_item')) {
@@ -67,47 +97,37 @@ export function populateRustRangeBindings(parsedFiles, _indexes, ctx) {
67
97
  }
68
98
  if (fields.size > 0) {
69
99
  const name = nameNode.text;
100
+ // Same ambiguity latch as return types (#2514): a third same-named
101
+ // struct must not restore a resolvable global field map.
70
102
  if (allFieldTypes.has(name)) {
71
103
  allFieldTypes.delete(name);
104
+ ambiguousFieldTypes.add(name);
72
105
  }
73
- else {
106
+ else if (!ambiguousFieldTypes.has(name)) {
74
107
  allFieldTypes.set(name, fields);
75
108
  }
109
+ // Full-generic record per defining file for import-disambiguated lookup.
110
+ recordByFile(fieldTypeByFile, parsed.filePath, name, fields);
76
111
  }
77
112
  }
113
+ // Publish per-type member bindings for the whole workspace before resolving
114
+ // assignments. Otherwise an importer processed before its defining file can
115
+ // miss a field or identity-method type solely because of file order.
116
+ const scopeMap = new Map(parsed.scopes.map((scope) => [scope.id, scope]));
117
+ processFieldTypeBindings(tree.rootNode, parsed, scopeMap);
118
+ processIdentityMethodBindings(parsed);
78
119
  }
79
120
  for (const parsed of parsedFiles) {
80
- const sourceText = ctx.fileContents.get(parsed.filePath);
81
- if (sourceText === undefined)
121
+ const tree = getOrParseTree(parser, parsed.filePath, ctx, treeStore);
122
+ if (tree === null)
82
123
  continue;
83
- const cachedTree = ctx.treeCache?.get(parsed.filePath);
84
- let tree;
85
- if (cachedTree !== undefined) {
86
- tree = cachedTree;
87
- }
88
- else {
89
- try {
90
- tree = parseSourceSafe(parser, sourceText, undefined, {
91
- bufferSize: getTreeSitterBufferSize(sourceText),
92
- });
93
- }
94
- catch (err) {
95
- if (err instanceof ParseTimeoutError) {
96
- logger.warn({ file: parsed.filePath }, 'rust range-binding: parse timed out, skipping file');
97
- continue;
98
- }
99
- throw err;
100
- }
101
- }
102
124
  const scopeMap = new Map(parsed.scopes.map((s) => [s.id, s]));
103
125
  const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
104
126
  if (moduleScope === undefined)
105
127
  continue;
106
- processFieldTypeBindings(tree.rootNode, parsed, scopeMap);
107
- processIdentityMethodBindings(parsed);
108
- processForLoops(tree.rootNode, parsed, scopeMap, moduleScope, allReturnTypes);
128
+ processForLoops(tree.rootNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile);
109
129
  processPatternBindings(tree.rootNode, parsed, scopeMap, moduleScope);
110
- processStructDestructuring(tree.rootNode, parsed, scopeMap, moduleScope, allFieldTypes);
130
+ processStructDestructuring(tree.rootNode, parsed, scopeMap, moduleScope, allFieldTypes, indexes, fieldTypeByFile);
111
131
  processPendingAssignments(tree.rootNode, parsed, parsedFiles, scopeMap, moduleScope, allReturnTypes);
112
132
  }
113
133
  }
@@ -154,7 +174,60 @@ function normalizeFieldType(text) {
154
174
  t = t.slice(lastColon + 2);
155
175
  return t.trim();
156
176
  }
157
- function processForLoops(root, parsed, scopeMap, moduleScope, allReturnTypes) {
177
+ /** Get-or-create the inner map for `file` and record `name -> value`. */
178
+ function recordByFile(byFile, file, name, value) {
179
+ let inner = byFile.get(file);
180
+ if (inner === undefined) {
181
+ inner = new Map();
182
+ byFile.set(file, inner);
183
+ }
184
+ inner.set(name, value);
185
+ }
186
+ /** Final segment of a dot-joined qualified name (`a.make` -> `make`), or the
187
+ * bare name when the def carries no qualifier. */
188
+ function simpleName(qualifiedName, bareName) {
189
+ if (qualifiedName === undefined)
190
+ return bareName;
191
+ const dot = qualifiedName.lastIndexOf('.');
192
+ return dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1);
193
+ }
194
+ /** Distinct `(file, name)` definitions, in first-seen order. */
195
+ function uniqueDefs(defs) {
196
+ const seen = new Set();
197
+ const out = [];
198
+ for (const d of defs) {
199
+ const key = `${d.file} ${d.name}`;
200
+ if (seen.has(key))
201
+ continue;
202
+ seen.add(key);
203
+ out.push(d);
204
+ }
205
+ return out;
206
+ }
207
+ /**
208
+ * Resolve `name` at `moduleScope` to the value recorded in `byFile` for the one
209
+ * definition visible here, or null when zero or several are visible (which
210
+ * keeps the #2514 ambiguity latch). Mirrors Rust name resolution: explicit
211
+ * `use`/re-export imports and local defs shadow `use x::*` globs, so a glob is
212
+ * consulted only when no explicit binding names `name`, and even then only when
213
+ * exactly one glob-target file actually defines it.
214
+ */
215
+ function resolveImportedDef(name, moduleScope, indexes, byFile) {
216
+ const explicit = uniqueDefs(lookupBindingsAt(moduleScope.id, name, indexes)
217
+ .filter((r) => r.origin === 'import' || r.origin === 'reexport' || r.origin === 'local')
218
+ .map((r) => ({ file: r.def.filePath, name: simpleName(r.def.qualifiedName, name) })));
219
+ const defs = explicit.length > 0
220
+ ? explicit
221
+ : uniqueDefs((indexes.imports.get(moduleScope.id) ?? [])
222
+ .filter((e) => e.kind === 'wildcard-expanded' &&
223
+ e.targetFile !== null &&
224
+ byFile.get(e.targetFile)?.has(name) === true)
225
+ .map((e) => ({ file: e.targetFile, name })));
226
+ if (defs.length !== 1)
227
+ return null;
228
+ return byFile.get(defs[0].file)?.get(defs[0].name) ?? null;
229
+ }
230
+ function processForLoops(root, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile) {
158
231
  for (const forNode of root.descendantsOfType('for_expression')) {
159
232
  const patternNode = forNode.childForFieldName('pattern');
160
233
  const valueNode = forNode.childForFieldName('value');
@@ -163,7 +236,7 @@ function processForLoops(root, parsed, scopeMap, moduleScope, allReturnTypes) {
163
236
  const varName = extractVarName(patternNode);
164
237
  if (varName === null)
165
238
  continue;
166
- const elementType = resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes);
239
+ const elementType = resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile);
167
240
  if (elementType === null)
168
241
  continue;
169
242
  const targetScope = findEnclosingFunctionScope(forNode, scopeMap) ?? moduleScope;
@@ -247,7 +320,7 @@ function processTupleStructPattern(patternNode, contextNode, parsed, scopeMap, m
247
320
  const targetScope = findEnclosingFunctionScope(contextNode, scopeMap) ?? moduleScope;
248
321
  injectTypeBinding(targetScope, varName, resolvedType);
249
322
  }
250
- function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFieldTypes) {
323
+ function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFieldTypes, indexes, fieldTypeByFile) {
251
324
  for (const letNode of root.descendantsOfType('let_declaration')) {
252
325
  const patternNode = letNode.childForFieldName('pattern');
253
326
  if (patternNode === null || patternNode.type !== 'struct_pattern')
@@ -270,7 +343,13 @@ function processStructDestructuring(root, parsed, scopeMap, moduleScope, allFiel
270
343
  continue;
271
344
  let fieldType = lookupFieldType(typeName, fieldName, parsed, scopeMap, moduleScope);
272
345
  if (fieldType === null) {
273
- fieldType = allFieldTypes?.get(typeName)?.get(fieldName) ?? null;
346
+ fieldType = allFieldTypes.get(typeName)?.get(fieldName) ?? null;
347
+ }
348
+ if (fieldType === null) {
349
+ // Import-disambiguated duplicate struct (#2514 follow-up): the global
350
+ // field map is ambiguous, but a `use` import pins one definition.
351
+ const fields = resolveImportedDef(typeName, moduleScope, indexes, fieldTypeByFile);
352
+ fieldType = fields?.get(fieldName) ?? null;
274
353
  }
275
354
  if (fieldType !== null) {
276
355
  injectTypeBinding(targetScope, fieldName, fieldType);
@@ -363,7 +442,7 @@ function processPendingAssignments(root, parsed, allParsedFiles, scopeMap, modul
363
442
  }
364
443
  }
365
444
  }
366
- function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes) {
445
+ function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, allReturnTypes, indexes, returnTypeByFile) {
367
446
  let iterableNode = valueNode;
368
447
  if (iterableNode.type === 'reference_expression') {
369
448
  iterableNode = iterableNode.firstNamedChild ?? iterableNode;
@@ -386,12 +465,19 @@ function resolveIterableElementType(valueNode, parsed, scopeMap, moduleScope, al
386
465
  }
387
466
  }
388
467
  if (func.type === 'identifier') {
389
- const crossFileReturn = allReturnTypes?.get(func.text);
468
+ const crossFileReturn = allReturnTypes.get(func.text);
390
469
  if (crossFileReturn !== undefined)
391
470
  return unwrapGeneric(crossFileReturn);
392
471
  const rawReturn = lookupRawFunctionReturnType(func.text, valueNode);
393
472
  if (rawReturn !== null)
394
473
  return unwrapGeneric(rawReturn);
474
+ // Import-disambiguated duplicate: the bare-name map is ambiguous (#2514)
475
+ // but a `use` import pins one definition. Read its FULL return type
476
+ // here, BEFORE the scope-binding lookup below, because that binding is
477
+ // generic-truncated (`Vec<Repo>` becomes `Vec`), losing the element.
478
+ const importedReturn = resolveImportedDef(func.text, moduleScope, indexes, returnTypeByFile);
479
+ if (importedReturn !== null)
480
+ return unwrapGeneric(importedReturn);
395
481
  const returnType = lookupReturnTypeInScopes(func.text, parsed, scopeMap, moduleScope);
396
482
  if (returnType !== null)
397
483
  return unwrapGeneric(returnType);
@@ -1,8 +1,10 @@
1
1
  import { SupportedLanguages } from '../../../../_shared/index.js';
2
2
  import { buildMro, defaultLinearize } from '../../scope-resolution/passes/mro.js';
3
+ import { indexOnlyElementType } from '../../type-extractors/shared.js';
3
4
  import { rustProvider } from '../rust.js';
4
5
  import { rustArityCompatibility, rustMergeBindings, resolveRustImportTarget } from './index.js';
5
6
  import { populateRustOwners } from './method-owners.js';
7
+ import { resolveRustQualifiedFreeCall } from './qualified-call.js';
6
8
  import { populateRustRangeBindings } from './range-binding.js';
7
9
  import { isClassLike, findClassBindingInScope, resolveAmbiguousInheritanceBaseViaImports, } from '../../scope-resolution/scope/walkers.js';
8
10
  import { resolveDefGraphId } from '../../scope-resolution/graph-bridge/ids.js';
@@ -37,7 +39,7 @@ import { generateId } from '../../../../lib/utils.js';
37
39
  * set from existing IMPLEMENTS edges so a worker-mode legacy emission (or a
38
40
  * re-resolution) is not duplicated.
39
41
  */
40
- function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes) {
42
+ function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes, recordTypeArguments) {
41
43
  if (scopes === undefined)
42
44
  return;
43
45
  const emitted = new Set();
@@ -64,6 +66,13 @@ function emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes) {
64
66
  const traitGraphId = resolveDefGraphId(traitDef.filePath, traitDef, nodeLookup);
65
67
  if (structGraphId === undefined || traitGraphId === undefined)
66
68
  continue;
69
+ // The instantiation the impl was written with — `impl Validator<String>
70
+ // for V` (#2912). Recorded against THIS edge's ids, not the pre-pass's:
71
+ // the pre-pass sources its edge from the enclosing def, and interface
72
+ // dispatch crosses the corrected one emitted here.
73
+ if (site.typeArguments !== undefined) {
74
+ recordTypeArguments?.(structGraphId, traitGraphId, site.typeArguments);
75
+ }
67
76
  const edgeKey = `${structGraphId}->${traitGraphId}`;
68
77
  if (emitted.has(edgeKey))
69
78
  continue;
@@ -124,10 +133,20 @@ export const rustScopeResolver = {
124
133
  resolveImportTarget: (targetRaw, fromFile, allFilePaths, resolutionConfig) => resolveRustImportTarget(targetRaw, fromFile, allFilePaths, resolutionConfig),
125
134
  mergeBindings: (existing, incoming, scopeId) => rustMergeBindings(existing, incoming, scopeId),
126
135
  arityCompatibility: (callsite, def) => rustArityCompatibility(def, callsite),
136
+ resolveQualifiedFreeCall: (site, callerParsed, scopes, workspaceIndex, allFilePaths) => resolveRustQualifiedFreeCall(site, callerParsed, scopes, workspaceIndex, allFilePaths),
127
137
  buildMro: (graph, parsedFiles, nodeLookup) => buildRustMro(graph, parsedFiles, nodeLookup),
128
- emitHeritageEdges: (graph, parsedFiles, nodeLookup, scopes) => emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes),
138
+ emitHeritageEdges: (graph, parsedFiles, nodeLookup, scopes, recordTypeArguments) => emitRustTraitImplEdges(graph, parsedFiles, nodeLookup, scopes, recordTypeArguments),
129
139
  populateOwners: (parsed) => populateRustOwners(parsed),
130
140
  isSuperReceiver: () => false,
141
+ // Subscript route only — Rust has no property-style collection view; `.iter()`
142
+ // / `.values()` are method calls the compound resolver's call branch handles.
143
+ //
144
+ // Fed the annotation AS WRITTEN (`&Vec<User>`, `HashMap<String, User>`), which
145
+ // `normalizeRustTypeName` had already collapsed to `User` by the time the fold
146
+ // saw it. Returning `undefined` is the answer "not a container" and makes the
147
+ // index step decline rather than fold onto the receiver's own class — an
148
+ // `Index`-impl type would otherwise take its own members as the element's.
149
+ elementTypeOf: indexOnlyElementType,
131
150
  populateRangeBindings: populateRustRangeBindings,
132
151
  fieldFallbackOnMethodLookup: false,
133
152
  hoistTypeBindingsToModule: true,
@@ -172,6 +172,23 @@ export const rustProvider = defineLanguage({
172
172
  emitScopeCaptures: emitRustScopeCaptures,
173
173
  cfgVisitor: createRustCfgVisitor(),
174
174
  interpretImport: interpretRustImport,
175
+ // `use` is a compile-time path alias, not a statement that runs. Writing one
176
+ // inside a function body — `fn f() { use crate::m::X; }`, which is legal —
177
+ // narrows where the NAME is visible and defers nothing: Rust has no
178
+ // module-initialization order in the JS/Python sense and permits intra-crate
179
+ // module cycles outright. `rust/query.ts` captures `(use_declaration)` and
180
+ // nothing else, so this covers every import form the pipeline sees; the
181
+ // structural twin is C++'s `using ns::name`, exempt under the same
182
+ // capability. Without this the central Pass-3 position rule would tag an
183
+ // fn-local `use` `runsOnlyWhenCalled` and `check --cycles` would drop a
184
+ // cycle it is part of.
185
+ //
186
+ // Deliberately the NARROW claim — position does not defer a Rust import. It
187
+ // is not a claim that no Rust import can create an initialization
188
+ // dependency; that is a bigger semantic question (statics, `OnceLock`,
189
+ // `lazy_static`) which this capability does not reach and should not be read
190
+ // as settling. See `LanguageProvider.importsExecuteWhereWritten`.
191
+ importsExecuteWhereWritten: false,
175
192
  interpretTypeBinding: interpretRustTypeBinding,
176
193
  bindingScopeFor: rustBindingScopeFor,
177
194
  importOwningScope: rustImportOwningScope,
@@ -35,14 +35,65 @@ import { nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../
35
35
  import { splitSwiftImport } from './import-decomposer.js';
36
36
  import { swiftQualifiedBaseTail } from './base-type.js';
37
37
  import { computeSwiftArityMetadata } from './arity-metadata.js';
38
- import { synthesizeSwiftReceiverBinding } from './receiver-binding.js';
38
+ import { findEnclosingTypeDeclaration, synthesizeSwiftReceiverBinding, } from './receiver-binding.js';
39
39
  import { synthesizeSwiftSignatureBindings } from './signature-bindings.js';
40
40
  import { getSwiftParser, getSwiftScopeQuery } from './query.js';
41
+ import { preprocessSwiftConditionalDirectives } from './conditional-directive-preprocess.js';
41
42
  import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
42
43
  import { getTreeSitterBufferSize } from '../../constants.js';
43
44
  import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
45
+ import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
46
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
47
+ /**
48
+ * Name of the type that lexically owns `node` — the nearest enclosing
49
+ * `class_declaration` (which in tree-sitter-swift is also how `struct` and
50
+ * `extension` parse) or `protocol_declaration`.
51
+ *
52
+ * Qualifies a method def as `<Type>.<method>` (#2807 follow-up). Swift's
53
+ * structure phase already keys the graph node that way (`A.run#1`), but the
54
+ * resolver-side def carried only `run`, and the bridge's every label-scoped key
55
+ * is built from the def's name — so two classes in one file each declaring
56
+ * `func run` fell through to the label-agnostic simple key, which is
57
+ * first-write-wins. The result: EVERY call in both bodies was attributed to
58
+ * whichever `run` registered first, which collected duplicate edges while its
59
+ * twin collected none. Renaming one method, or moving it to another file, made
60
+ * both resolve — which is what identified the collision as name-keyed and
61
+ * per-file rather than positional.
62
+ *
63
+ * An `extension Foo` wraps the extended type in a `user_type`, which may be
64
+ * qualified (`extension Outer.Inner`) or carry generic arguments
65
+ * (`extension Set<Int>`), so the trailing `type_identifier` is taken — the
66
+ * spelling has to match the owner the structure phase used to build the node id.
67
+ *
68
+ * Both halves delegate rather than re-derive: `findEnclosingTypeDeclaration`
69
+ * (receiver-binding.ts) decides what the enclosing type IS, so a method's owner
70
+ * qualifier and its `self` binding cannot disagree, and `swiftBaseTypeIdentifier`
71
+ * reads the name STRUCTURALLY. An earlier version split the node text on `<` and
72
+ * `.`, which only approximates the tree: generic arguments live in a sibling
73
+ * `type_arguments` node that the walk skips outright.
74
+ */
75
+ function swiftEnclosingTypeName(node) {
76
+ const typeNode = findEnclosingTypeDeclaration(node);
77
+ if (typeNode === null)
78
+ return null;
79
+ const nameNode = typeNode.childForFieldName('name');
80
+ if (nameNode === null)
81
+ return null;
82
+ const tail = swiftBaseTypeIdentifier(nameNode)?.text.trim() ?? '';
83
+ return tail.length > 0 ? tail : null;
84
+ }
44
85
  /** Declaration anchors that carry function-like arity metadata. */
45
86
  const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.constructor'];
87
+ const SWIFT_CALLABLE_CAPTURE_OPTIONS = {
88
+ functionNodeTypes: new Set(['function_declaration', 'lambda_literal']),
89
+ callNodeTypes: new Set(['call_expression']),
90
+ parameterListNodeTypes: new Set(['value_arguments']),
91
+ parameterNodeTypes: new Set(['parameter']),
92
+ bindingNodeTypes: new Set(['property_declaration']),
93
+ assignmentNodeTypes: new Set(['assignment']),
94
+ identifierNodeTypes: new Set(['simple_identifier', 'type_identifier']),
95
+ extractFunctionParameters: (node) => node.namedChildren.filter((child) => child !== null && child.type === 'parameter'),
96
+ };
46
97
  /** tree-sitter-swift node types that carry arity. */
47
98
  const FUNCTION_NODE_TYPES = [
48
99
  'function_declaration',
@@ -57,10 +108,16 @@ const RECEIVER_NODE_TYPES = [
57
108
  ];
58
109
  export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
59
110
  // Reuse the parse phase's cached Tree when available; otherwise parse.
111
+ // `extractParsedFile` already applies `preprocessSource` on this path, but
112
+ // this emitter is also called directly (benchmarks, capture goldens, the
113
+ // scope-capture tripwire), and those callers must see the same program the
114
+ // pipeline does. The transform is idempotent, so applying it twice is a
115
+ // no-op; it is length-preserving, so offsets still index `sourceText`.
60
116
  let tree = cachedTree;
61
117
  if (tree === undefined) {
62
- tree = parseSourceSafe(getSwiftParser(), sourceText, undefined, {
63
- bufferSize: getTreeSitterBufferSize(sourceText),
118
+ const parseText = preprocessSwiftConditionalDirectives(sourceText);
119
+ tree = parseSourceSafe(getSwiftParser(), parseText, undefined, {
120
+ bufferSize: getTreeSitterBufferSize(parseText),
64
121
  });
65
122
  recordCacheMiss();
66
123
  }
@@ -97,6 +154,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
97
154
  continue;
98
155
  }
99
156
  }
157
+ // Structural receiver chain for a call whose receiver is itself an
158
+ // expression, so resolution can type it by folding over structure
159
+ // instead of re-parsing the receiver's source text. Self-gating: a
160
+ // non-call match, an absent receiver, or a chain with no nameable base
161
+ // all leave `grouped` untouched.
162
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
100
163
  out.push(grouped); // defensive fallback
101
164
  continue;
102
165
  }
@@ -144,6 +207,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
144
207
  if (seenReadSpans.has(span))
145
208
  continue;
146
209
  seenReadSpans.add(span);
210
+ // Structural receiver chain for a call whose receiver is itself an
211
+ // expression, so resolution can type it by folding over structure
212
+ // instead of re-parsing the receiver's source text. Self-gating: a
213
+ // non-call match, an absent receiver, or a chain with no nameable base
214
+ // all leave `grouped` untouched.
215
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
147
216
  out.push(grouped);
148
217
  continue;
149
218
  }
@@ -191,6 +260,20 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
191
260
  grouped['@declaration.name'] = syntheticCapture('@declaration.name', initNode, 'init');
192
261
  }
193
262
  }
263
+ // ── Qualify a method/constructor def with its owning type (#2807). ──
264
+ // Emitted before the `@scope.function` branch below, which pushes and
265
+ // `continue`s; a Swift `function_declaration` matches both patterns.
266
+ if (grouped['@declaration.qualified_name'] === undefined) {
267
+ const ownerTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
268
+ const declaredName = grouped['@declaration.name']?.text;
269
+ const declNode = ownerTag === undefined ? null : nodeMap[ownerTag];
270
+ if (ownerTag !== undefined && declaredName !== undefined && declNode != null) {
271
+ const owner = swiftEnclosingTypeName(declNode);
272
+ if (owner !== null) {
273
+ grouped['@declaration.qualified_name'] = syntheticCapture('@declaration.qualified_name', declNode, `${owner}.${declaredName}`);
274
+ }
275
+ }
276
+ }
194
277
  // ── @scope.function: arity + receiver + signature bindings. ──────
195
278
  if (grouped['@scope.function'] !== undefined) {
196
279
  const fnNodeForArity = nodeIfType(nodeMap['@scope.function'] ??
@@ -198,6 +281,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
198
281
  nodeMap['@declaration.constructor'], ...FUNCTION_NODE_TYPES);
199
282
  if (fnNodeForArity !== null)
200
283
  attachArityMetadata(grouped, fnNodeForArity);
284
+ // Structural receiver chain for a call whose receiver is itself an
285
+ // expression, so resolution can type it by folding over structure
286
+ // instead of re-parsing the receiver's source text. Self-gating: a
287
+ // non-call match, an absent receiver, or a chain with no nameable base
288
+ // all leave `grouped` untouched.
289
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
201
290
  out.push(grouped);
202
291
  const recvNode = nodeIfType(nodeMap['@scope.function'], ...RECEIVER_NODE_TYPES);
203
292
  if (recvNode !== null) {
@@ -247,6 +336,12 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
247
336
  grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(countCallArguments(callNode)));
248
337
  }
249
338
  }
339
+ // Structural receiver chain for a call whose receiver is itself an
340
+ // expression, so resolution can type it by folding over structure
341
+ // instead of re-parsing the receiver's source text. Self-gating: a
342
+ // non-call match, an absent receiver, or a chain with no nameable base
343
+ // all leave `grouped` untouched.
344
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
250
345
  out.push(grouped);
251
346
  }
252
347
  // ── Emit inheritance references for scope-resolution EXTENDS / IMPLEMENTS ──
@@ -257,6 +352,7 @@ export function emitSwiftScopeCaptures(sourceText, _filePath, cachedTree) {
257
352
  // legacy heritage-capture leg (removed in #942), which the worker pipeline
258
353
  // drops for registry-primary languages (issue #1951).
259
354
  out.push(...synthesizeSwiftInheritanceReferences(tree.rootNode));
355
+ out.push(...synthesizeCallableFlowCaptures(tree.rootNode, SWIFT_CALLABLE_CAPTURE_OPTIONS));
260
356
  return out;
261
357
  }
262
358
  /**
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Blank nested Swift conditional-compilation directives before parsing.
3
+ *
4
+ * tree-sitter-swift 0.7.1 does not admit `directive` as a `class_body` child
5
+ * (`vendor/tree-sitter-swift/src/node-types.json`), so error recovery can
6
+ * discard the enclosing declaration. Replacing only the directive text with
7
+ * spaces preserves `.length`, line endings, and every declaration offset.
8
+ *
9
+ * ponytail: delete this file (and the `preprocessSource` wiring in `swift.ts`)
10
+ * once a vendored tree-sitter-swift release includes upstream PR #583 ("Allow
11
+ * #if/#elseif/#else/#endif directives inside type bodies"); see also upstream
12
+ * issue #298 and PR #599. `.github/vendored-grammars.json` has no `"hold"` on
13
+ * swift, so the bump bot will land that release on its own.
14
+ *
15
+ * A directive group is blanked only when **all** of these hold:
16
+ *
17
+ * - it opens at `braceDepth > 0` — nesting, not indentation, is what the
18
+ * grammar rejects; top-level directives are valid source-file members and
19
+ * are left intact
20
+ * - it is not inside a multiline string literal or a block comment — blanking
21
+ * a line that carries a block-comment terminator would un-terminate the
22
+ * comment and swallow the rest of the file, and blanking inside a literal
23
+ * would rewrite program data
24
+ * - every branch is brace-balanced. A group that splits a declaration header
25
+ * (`#if` … `func f() async {` … `#else` … `func f() {` … `#endif`) leaves
26
+ * one unmatched `{` once both branches survive, which re-parents every
27
+ * later top-level declaration. Such a group degrades to the pre-fix
28
+ * behavior instead.
29
+ *
30
+ * Known residuals, all of which degrade to "directive left in place" rather
31
+ * than to corrupted output: string interpolation is not parsed with full Swift
32
+ * expression fidelity, so a nested multiline string inside an interpolation can
33
+ * confuse the scanner; a bare `/…/` regex literal containing `/*` opens a
34
+ * phantom block comment; and a multiline extended regex literal is treated as
35
+ * ending at its first line.
36
+ *
37
+ * Byte length is *not* preserved when a blanked directive line carries
38
+ * non-ASCII trailing text (` #if os(iOS) // 日本語 🔥` is 23 UTF-16 code units
39
+ * either way, but shrinks from 31 UTF-8 bytes to 23). C++ sidesteps this
40
+ * because UE macro tokens are ASCII-only; a Swift directive line can carry any
41
+ * trailing comment. Per the `LanguageProvider.preprocessSource` contract this is
42
+ * safe only while no consumer slices the original UTF-8 bytes by `startIndex`:
43
+ * node-tree-sitter reports UTF-16 code-unit indices, and every in-process
44
+ * consumer slices the JS string, whose `.length` *is* preserved.
45
+ *
46
+ * Must stay pure and idempotent — see `LanguageProvider.preprocessSource`.
47
+ */
48
+ export declare function preprocessSwiftConditionalDirectives(sourceText: string): string;