gitnexus 1.6.10-rc.99 → 1.6.10

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 (775) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -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 +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  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/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -7,6 +7,7 @@ import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
7
7
  import { splitQualifiedName } from '../../utils/qualified-name.js';
8
8
  import { encodeMarker } from '../../utils/heritage-marker.js';
9
9
  import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
10
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
10
11
  const FUNCTION_NODE_TYPES = ['method', 'singleton_method'];
11
12
  const HERITAGE_CALL_NAMES = new Set(['include', 'extend', 'prepend']);
12
13
  const ATTR_CALL_NAMES = new Set([
@@ -83,6 +84,123 @@ function buildEnclosingQualifiedName(callNode) {
83
84
  }
84
85
  return segments.length > 0 ? segments.join('.') : undefined;
85
86
  }
87
+ /**
88
+ * Does this `@ivar` write land on an INSTANCE of the enclosing LEXICAL class?
89
+ *
90
+ * In Ruby an instance variable belongs to whatever `self` is at the point of
91
+ * the write, so this is really a question about `self`, and `self` is an
92
+ * instance of the enclosing lexical class only inside an ordinary `def` whose
93
+ * own definition site is that class's body. Every other arrangement writes an
94
+ * ivar some instance of this class will never see:
95
+ *
96
+ * class C
97
+ * @shared = Outer.new # class body: self == C
98
+ * def self.build # singleton_method: self == C
99
+ * @pool = Outer.new
100
+ * end
101
+ * class << self # singleton_class: self == C
102
+ * def warm; @cache = Outer.new; end
103
+ * end
104
+ * Other.class_eval do # block receiver: self == Other
105
+ * def warm; @far = Outer.new; end
106
+ * end
107
+ * other.instance_eval { @alien = Outer.new } # self == other
108
+ * def run; @pool.inner; end # reads nil — @pool was never set on an instance
109
+ * end
110
+ *
111
+ * So the walk stops on the FIRST ancestor that decides who `self` is, and
112
+ * answers true only for an ordinary `method` reached without crossing any
113
+ * boundary that could have moved `self` elsewhere. `method` alone is NOT
114
+ * sufficient — a `def` nested in a `class << self` body, or in a `class_eval`
115
+ * block, is reached through a `method` node first — hence the flag rather than
116
+ * an early return (#2807).
117
+ *
118
+ * ── WHY BLOCKS ARE A HARD STOP, WITHOUT LOOKING AT THE CALL THEY BELONG TO ──
119
+ *
120
+ * A block is the one construct whose `self` (and whose "default definee", the
121
+ * class a `def` inside it attaches to) is chosen by its RECEIVER, not by its
122
+ * syntax. `Foo.class_eval do … end`, `Class.new do … end`, `Struct.new(:x) do …
123
+ * end`, `Data.define(:x) do … end`, `Module.new`, `refine`, `define_method`,
124
+ * `instance_eval`, `instance_exec`, `module_eval` and `class_exec` all rebind
125
+ * it; `[1].each do … end` does not.
126
+ *
127
+ * Telling those apart would need an enumeration of every method that rebinds a
128
+ * block's `self`, and that set is OPEN: any user-defined method can do it to a
129
+ * block it merely receives —
130
+ *
131
+ * def helper(&blk) = Foo.class_eval(&blk)
132
+ * helper { def warm; @far = Outer.new; end } # attaches to Foo, not here
133
+ *
134
+ * — so no allow-list of "safe" call names is sound, and a deny-list of known
135
+ * rebinders is exactly the incomplete enumeration that produced this bug. The
136
+ * only complete answer available from the block's own syntax is that ownership
137
+ * is unprovable, so every block boundary is a stop. That over-discards a plain
138
+ * `each`/`tap` block, whose `self` really is the instance; per the safety
139
+ * doctrine (see `scope-resolution/passes/compound-receiver.ts`) a missed edge is
140
+ * the acceptable cost and a fabricated edge on the wrong class is not.
141
+ *
142
+ * A `class` / `module` keyword nested INSIDE a block still terminates the walk
143
+ * with a true answer, and correctly so: that keyword sets the definee lexically
144
+ * no matter what surrounds it, so `Class.new do class Inner; def m; @a = …`
145
+ * writes a real `Inner` instance field.
146
+ *
147
+ * ── FORMS THAT CANNOT REACH HERE AT ALL ────────────────────────────────────
148
+ *
149
+ * `obj.instance_variable_set(:@a, Outer.new)` is a `call`, not an `assignment`,
150
+ * and `Foo.class_eval "def warm; @a = Outer.new; end"` hides its body in a
151
+ * `string` node. Neither parses into the `(assignment left: (instance_variable)
152
+ * …)` pattern in query.ts, so neither ever produces the marker this gate reads.
153
+ *
154
+ * Deliberately conservative. A write this returns false for simply binds no
155
+ * type at all, which costs at most a missed edge; returning true too eagerly
156
+ * invents a call from a receiver that is always nil.
157
+ */
158
+ function isRubyInstanceIvarWrite(ivarNode) {
159
+ if (ivarNode === undefined)
160
+ return false;
161
+ let insideMethodBody = false;
162
+ for (let ancestor = ivarNode.parent; ancestor !== null; ancestor = ancestor.parent) {
163
+ switch (ancestor.type) {
164
+ // `def self.x` / `def obj.x`, and `class << self` / `class << obj`.
165
+ case 'singleton_method':
166
+ case 'singleton_class':
167
+ return false;
168
+ // Every block body: `do … end` and `{ … }` are the only two the grammar
169
+ // produces. `lambda` (`->`) always wraps its body in one of them, so it
170
+ // can never be the first boundary today — it is listed because the
171
+ // boundary IS the lambda, and a grammar change must not silently
172
+ // un-guard it.
173
+ case 'do_block':
174
+ case 'block':
175
+ case 'lambda':
176
+ return false;
177
+ // `BEGIN { … }` / `END { … }` are program-level bodies whose execution is
178
+ // relocated out of the enclosing method (before the program, and at exit);
179
+ // Ruby warns when they appear in a method body at all. Rather than assert
180
+ // whose `self` runs them, the doctrine applies: unprovable, so discard.
181
+ // Reachable — tree-sitter parses `END { @a = Outer.new }` inside a `def`
182
+ // as an `end_block` under that method's body.
183
+ case 'begin_block':
184
+ case 'end_block':
185
+ return false;
186
+ case 'method':
187
+ insideMethodBody = true;
188
+ break;
189
+ // The owning body. Reaching it without crossing any of the boundaries
190
+ // above means the write is an instance write exactly when a `def` body
191
+ // enclosed it.
192
+ case 'class':
193
+ case 'module':
194
+ case 'program':
195
+ return insideMethodBody;
196
+ // Everything else is control flow that cannot move `self`: `if`/`unless`
197
+ // (`then`), `case`/`when`, `while`, `for`/`do`, `begin`/`rescue`/`ensure`.
198
+ default:
199
+ break;
200
+ }
201
+ }
202
+ return false;
203
+ }
86
204
  export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
87
205
  let tree = cachedTree;
88
206
  if (tree === undefined) {
@@ -124,6 +242,22 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
124
242
  }
125
243
  if (Object.keys(grouped).length === 0)
126
244
  continue;
245
+ // A tree-sitter pattern cannot say "and no singleton ancestor", so the
246
+ // ownership test is a walk and the whole binding is dropped here when `self`
247
+ // is the class object rather than an instance.
248
+ //
249
+ // Dropping the MARKER alone is not enough, and the class-body shape is why:
250
+ // with the marker gone `rubyBindingScopeFor` declines to hoist and the
251
+ // binding falls back to its innermost scope — which for `@shared = Outer.new`
252
+ // written straight in the class body already IS the Class scope. It would
253
+ // arrive at the wrong place by default. Discarding the match is the only
254
+ // uniform answer, and it costs nothing that existed before: these ivar
255
+ // patterns are new in #2807, so a class-object ivar simply goes back to
256
+ // binding nothing, exactly as it did before the pattern was added.
257
+ if (grouped['@type-binding.ivar-field'] !== undefined &&
258
+ !isRubyInstanceIvarWrite(nodeMap['@type-binding.ivar-field'])) {
259
+ continue;
260
+ }
127
261
  // Decompose require/require_relative/load into import captures
128
262
  if (grouped['@import.statement'] !== undefined) {
129
263
  const anchor = grouped['@import.statement'];
@@ -135,6 +269,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
135
269
  continue;
136
270
  }
137
271
  }
272
+ // Structural receiver chain for a call whose receiver is itself an
273
+ // expression, so resolution can type it by folding over structure
274
+ // instead of re-parsing the receiver's source text. Self-gating: a
275
+ // non-call match, an absent receiver, or a chain with no nameable base
276
+ // all leave `grouped` untouched.
277
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
138
278
  out.push(grouped);
139
279
  continue;
140
280
  }
@@ -147,6 +287,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
147
287
  if (receiver !== null)
148
288
  out.push(receiver);
149
289
  }
290
+ // Structural receiver chain for a call whose receiver is itself an
291
+ // expression, so resolution can type it by folding over structure
292
+ // instead of re-parsing the receiver's source text. Self-gating: a
293
+ // non-call match, an absent receiver, or a chain with no nameable base
294
+ // all leave `grouped` untouched.
295
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
150
296
  out.push(grouped);
151
297
  continue;
152
298
  }
@@ -174,6 +320,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
174
320
  grouped['@declaration.parameter-types'] = syntheticCapture('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
175
321
  }
176
322
  }
323
+ // Structural receiver chain for a call whose receiver is itself an
324
+ // expression, so resolution can type it by folding over structure
325
+ // instead of re-parsing the receiver's source text. Self-gating: a
326
+ // non-call match, an absent receiver, or a chain with no nameable base
327
+ // all leave `grouped` untouched.
328
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
177
329
  out.push(grouped);
178
330
  continue;
179
331
  }
@@ -256,6 +408,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
256
408
  grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
257
409
  }
258
410
  }
411
+ // Structural receiver chain for a call whose receiver is itself an
412
+ // expression, so resolution can type it by folding over structure
413
+ // instead of re-parsing the receiver's source text. Self-gating: a
414
+ // non-call match, an absent receiver, or a chain with no nameable base
415
+ // all leave `grouped` untouched.
416
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
259
417
  out.push(grouped);
260
418
  }
261
419
  // Second pass: member-call-return type bindings
@@ -7,7 +7,7 @@
7
7
  * - External gems → null (unresolvable within the repo)
8
8
  */
9
9
  import { resolveRubyImportInternal } from '../../import-resolvers/ruby.js';
10
- import { buildSuffixIndex } from '../../import-resolvers/utils.js';
10
+ import { getWorkspaceFileIndex } from '../../import-resolvers/workspace-file-index.js';
11
11
  import { isHeritageMarker } from '../../utils/heritage-marker.js';
12
12
  // ─── resolveRubyImportTarget ──────────────────────────────────────────────
13
13
  /**
@@ -78,8 +78,10 @@ function resolveRelative(targetRaw, fromDir, allFilePaths) {
78
78
  * via suffix matching using the existing Ruby import resolver.
79
79
  */
80
80
  function resolveBare(targetRaw, allFilePaths) {
81
- const normalizedFileList = [...allFilePaths].map((f) => f.replace(/\\/g, '/'));
82
- const allFileList = [...allFilePaths];
83
- const index = buildSuffixIndex(normalizedFileList, allFileList);
84
- return resolveRubyImportInternal(targetRaw, normalizedFileList, allFileList, index);
81
+ // Was: two array materializations plus a full `buildSuffixIndex` per require,
82
+ // thrown away on return — every require paid to index every file in the repo
83
+ // (#2880). `buildSuffixIndex` is a pure function of the file set, so this is a
84
+ // hoist, not a behaviour change.
85
+ const { normalized, all, index } = getWorkspaceFileIndex(allFilePaths);
86
+ return resolveRubyImportInternal(targetRaw, normalized, all, index);
85
87
  }
@@ -77,6 +77,64 @@ const RUBY_SCOPE_QUERY = `
77
77
  (singleton_method
78
78
  name: (identifier) @declaration.name) @declaration.function
79
79
 
80
+ ;; ── Declarations — closure bound to a local ──────────────────────────────
81
+ ;;
82
+ ;; handler = ->(x) { target(x) } / lambda { |x| ... } / proc { |x| ... }
83
+ ;;
84
+ ;; Anchor discipline (same contract as javascript/query.ts): @declaration.function
85
+ ;; sits on the INNER (block), NOT on the assignment wrapper and NOT on the
86
+ ;; (lambda) node — the block is what carries @scope.block above, so anchoring
87
+ ;; there aligns anchor.range with the scope range. That alignment is what lets
88
+ ;; pickCallerCallableDef accept a Block-kind scope as a callable boundary.
89
+ ;; do_block/block stay @scope.block deliberately — do NOT re-kind them.
90
+ ;;
91
+ ;; The call forms are restricted to lambda/proc by name. An unrestricted
92
+ ;; (call block: (block)) would match ANY method call with a block, so
93
+ ;; mapped = items.map { |i| ... } would wrongly declare mapped a callable.
94
+ ;; Separate #eq? patterns rather than one #match? alternation: alternation
95
+ ;; predicates are a known hazard on this tree-sitter line.
96
+ ;; BOTH block forms in every pattern. do...end produces (do_block), braces
97
+ ;; produce (block), and do/end is the dominant MULTI-LINE style — covering only
98
+ ;; braces left lambda-do-end with a Block scope owning nothing, so its
99
+ ;; calls fell through to the enclosing method. @scope.block above already covers
100
+ ;; both, so the two channels now agree.
101
+ ;;
102
+ ;; The !receiver constraint is load-bearing: without it #eq? tests the method
103
+ ;; NAME only, so MyMod.lambda {...} / obj.proc {...} would be captured as
104
+ ;; closure bindings. Verified against the grammar: with !receiver those are
105
+ ;; rejected while bare lambda/proc still match.
106
+ (assignment
107
+ left: (identifier) @declaration.name
108
+ right: (lambda body: [(block) (do_block)] @declaration.function))
109
+
110
+ (assignment
111
+ left: (identifier) @declaration.name
112
+ right: (call
113
+ !receiver
114
+ method: (identifier) @_lambda-kw
115
+ block: [(block) (do_block)] @declaration.function)
116
+ (#eq? @_lambda-kw "lambda"))
117
+
118
+ (assignment
119
+ left: (identifier) @declaration.name
120
+ right: (call
121
+ !receiver
122
+ method: (identifier) @_proc-kw
123
+ block: [(block) (do_block)] @declaration.function)
124
+ (#eq? @_proc-kw "proc"))
125
+
126
+ ;; Proc.new { ... } / Proc.new do ... end — the explicit constructor form.
127
+ ;; Receiver IS required here and must be the Proc constant, so this cannot
128
+ ;; collide with the bare-call patterns above.
129
+ (assignment
130
+ left: (identifier) @declaration.name
131
+ right: (call
132
+ receiver: (constant) @_proc-const
133
+ method: (identifier) @_new-kw
134
+ block: [(block) (do_block)] @declaration.function)
135
+ (#eq? @_proc-const "Proc")
136
+ (#eq? @_new-kw "new"))
137
+
80
138
  ;; ── Declarations — variable assignment ───────────────────────────────────
81
139
 
82
140
  (assignment
@@ -118,6 +176,41 @@ const RUBY_SCOPE_QUERY = `
118
176
  method: (identifier) @_new_method2
119
177
  (#eq? @_new_method2 "new"))) @type-binding.constructor
120
178
 
179
+ ;; Instance-variable constructor: \`@service = UserService.new\` (#2807).
180
+ ;; The patterns above bind locals and constants; an instance variable — the
181
+ ;; only way a Ruby object gets a field at all — bound nothing, so \`@service.run\`
182
+ ;; had no receiver type and the fold declined the whole chain.
183
+ ;;
184
+ ;; \`@type-binding.name\` is captured on the \`instance_variable\` node, so the
185
+ ;; bound name keeps its \`@\` sigil and matches the receiver text at the call
186
+ ;; site verbatim. The narrow \`@type-binding.ivar-field\` marker rides the same
187
+ ;; node for \`rubyBindingScopeFor\` to hoist on; anchorCaptureFor takes the
188
+ ;; broadest range, so the assignment stays the anchor and the source stays
189
+ ;; \`constructor-inferred\`.
190
+ ;;
191
+ ;; These patterns match unconditionally HERE; captures.ts then discards the
192
+ ;; whole binding via \`isRubyInstanceIvarWrite\` unless \`self\` at the write is
193
+ ;; provably an instance of the enclosing lexical class — which rules out
194
+ ;; \`def self.x\`, \`class << self\`, the class body itself, and any write reached
195
+ ;; through a block, whose \`self\` its receiver chooses (\`class_eval\`,
196
+ ;; \`Class.new\`, \`instance_eval\`, \`define_method\`, …). A tree-sitter pattern
197
+ ;; cannot state "and no singleton or block ancestor", so the ownership test has
198
+ ;; to be a walk.
199
+
200
+ (assignment
201
+ left: (instance_variable) @type-binding.name @type-binding.ivar-field
202
+ right: (call
203
+ receiver: (constant) @type-binding.type
204
+ method: (identifier) @_new_ivar
205
+ (#eq? @_new_ivar "new"))) @type-binding.constructor
206
+
207
+ (assignment
208
+ left: (instance_variable) @type-binding.name @type-binding.ivar-field
209
+ right: (call
210
+ receiver: (scope_resolution) @type-binding.type
211
+ method: (identifier) @_new_ivar_q
212
+ (#eq? @_new_ivar_q "new"))) @type-binding.constructor
213
+
121
214
  ;; Constant constructor: SERVICE = UserService.new (left is constant, not identifier)
122
215
 
123
216
  (assignment
@@ -241,6 +241,8 @@ function expandRubyWildcardNames(targetModuleScope, parsedFiles) {
241
241
  return names;
242
242
  }
243
243
  export const rubyScopeResolver = {
244
+ // Construction is a selector on the class: `Service.new.do_work` (#2708).
245
+ constructionSyntax: { selector: 'new' },
244
246
  language: SupportedLanguages.Ruby,
245
247
  languageProvider: rubyProvider,
246
248
  importEdgeReason: 'ruby-scope: import',
@@ -1,6 +1,6 @@
1
1
  import type { CaptureMatch, ParsedImport, Scope, ScopeId, ScopeTree, TypeRef, NodeLabel } from '../../../../_shared/index.js';
2
2
  import type { SyntaxNode } from '../../utils/ast-helpers.js';
3
- export declare function rubyBindingScopeFor(decl: CaptureMatch, innermost: Scope, _tree: ScopeTree): ScopeId | null;
3
+ export declare function rubyBindingScopeFor(decl: CaptureMatch, innermost: Scope, tree: ScopeTree): ScopeId | null;
4
4
  /**
5
5
  * Ruby `require` / `include` inside a function or class body should attach
6
6
  * at that scope, not module scope.
@@ -1,9 +1,30 @@
1
- export function rubyBindingScopeFor(decl, innermost, _tree) {
1
+ import { walkToScope } from '../../utils/scope-tree-walk.js';
2
+ export function rubyBindingScopeFor(decl, innermost, tree) {
2
3
  // Keep self typeBindings in the method's Function scope so
3
4
  // populateClassOwnedMembers can match Method defs to their receiver types.
4
5
  if (decl['@type-binding.self'] !== undefined) {
5
6
  return innermost.id;
6
7
  }
8
+ // `@ivar = Foo.new` in `initialize` (or any method) declares a FIELD of the
9
+ // enclosing class, so its type binding belongs on the Class scope — the only
10
+ // place `typeOfMemberOnClass` reads it. Left on the method's own Function
11
+ // scope it would be invisible to every other method (#2807).
12
+ //
13
+ // Gated on the marker that pattern emits, never on `@type-binding.constructor`
14
+ // at large: that capture also fires for `x = Foo.new` locals, and hoisting
15
+ // those to the class would leak a method local into every sibling method.
16
+ //
17
+ // Reaching this hook already means the write is an INSTANCE write. `Capture`
18
+ // carries only name/range/text — no AST node — so this hook cannot ask whose
19
+ // `self` owns the ivar; `isRubyInstanceIvarWrite` (captures.ts) answers that
20
+ // upstream and discards the binding entirely whenever `self` is anything but
21
+ // an instance of the enclosing lexical class — the class object itself
22
+ // (`def self.x`, `class << self`, the class body), or whatever object a block
23
+ // receiver rebinds it to (`class_eval`, `Class.new`, `instance_eval`, …).
24
+ // None of those reach an instance, so none may be published as its field.
25
+ if (decl['@type-binding.ivar-field'] !== undefined) {
26
+ return walkToScope(innermost, tree, 'Class');
27
+ }
7
28
  return null;
8
29
  }
9
30
  /**
@@ -1,4 +1,4 @@
1
- import { nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../../utils/ast-helpers.js';
1
+ import { findChild, nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../../utils/ast-helpers.js';
2
2
  import { getRustParser, getRustScopeQuery } from './query.js';
3
3
  import { recordRustCacheHit, recordRustCacheMiss } from './cache-stats.js';
4
4
  import { splitRustUseDeclaration } from './import-decomposer.js';
@@ -6,6 +6,7 @@ import { synthesizeRustReceiverBinding } from './receiver-binding.js';
6
6
  import { getTreeSitterBufferSize } from '../../constants.js';
7
7
  import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
8
8
  import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
9
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
9
10
  const RUST_CALLABLE_CAPTURE_OPTIONS = {
10
11
  functionNodeTypes: new Set(['function_item', 'closure_expression']),
11
12
  callNodeTypes: new Set(['call_expression']),
@@ -94,6 +95,26 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
94
95
  }
95
96
  }
96
97
  }
98
+ // `Self` in a type binding names the enclosing impl's type, not a type
99
+ // called "Self". `let fresh = Self { … }` inside `impl User` binds
100
+ // `fresh: User`; recorded verbatim it binds `fresh: Self`, which resolves
101
+ // to nothing and leaves the receiver's type unknown.
102
+ //
103
+ // The type-env channel already substitutes this
104
+ // (`type-extractors/rust.ts` → `findEnclosingImplType`); the
105
+ // scope-resolution channel did not, so the two disagreed. That went
106
+ // unnoticed while `lookupCore` Step 1 still walked the lexical chain for
107
+ // named receivers — the impl scope binds the method by name, so
108
+ // `fresh.validate()` resolved by accident. #2714 stopped that walk for
109
+ // named receivers and the gap became a lost edge (#2699 follow-up).
110
+ const tbTypeNode = nodeMap['@type-binding.type'];
111
+ if (grouped['@type-binding.type']?.text === 'Self' && tbTypeNode !== undefined) {
112
+ const implNode = findEnclosingImpl(tbTypeNode);
113
+ const implTypeNode = implNode?.childForFieldName('type') ?? null;
114
+ if (implTypeNode !== null) {
115
+ grouped['@type-binding.type'] = syntheticCapture('@type-binding.type', tbTypeNode, implTypeNode.text);
116
+ }
117
+ }
97
118
  // Hoist return-type bindings from impl block functions to module level.
98
119
  // The auto-hoist in the scope-extractor places a type binding whose
99
120
  // anchor matches its innermost scope on the parent scope. By using the
@@ -126,6 +147,12 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
126
147
  grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
127
148
  }
128
149
  }
150
+ // Structural receiver chain for a call whose receiver is itself an
151
+ // expression, so resolution can type it by folding over structure
152
+ // instead of re-parsing the receiver's source text. Self-gating: a
153
+ // non-call match, an absent receiver, or a chain with no nameable base
154
+ // all leave `grouped` untouched.
155
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
129
156
  out.push(grouped);
130
157
  }
131
158
  out.push(...synthesizeRustInheritanceReferences(tree.rootNode));
@@ -174,10 +201,21 @@ function synthesizeRustInheritanceReferences(root) {
174
201
  const structName = bareTypeIdentifier(typeField);
175
202
  if (traitName === null || structName === null)
176
203
  return;
204
+ // The trait's generic ARGUMENTS (`impl Validator<String> for V`), so
205
+ // interface dispatch can tell one instantiation of a trait from another
206
+ // (#2912). Emitted as a sub-tag rather than by widening the anchor: the
207
+ // anchor is the bare `type_identifier` inside the `generic_type`, and its
208
+ // range is part of the inheritance edge's id.
209
+ const traitArguments = traitField.type === 'generic_type' ? findChild(traitField, 'type_arguments') : null;
177
210
  out.push({
178
211
  '@reference.inherits': nodeToCapture('@reference.inherits', traitName),
179
212
  '@reference.name': nodeToCapture('@reference.name', traitName),
180
213
  '@reference.receiver': syntheticCapture('@reference.receiver', structName, structName.text),
214
+ ...(traitArguments === null
215
+ ? {}
216
+ : {
217
+ '@reference.type-arguments': nodeToCapture('@reference.type-arguments', traitArguments),
218
+ }),
181
219
  });
182
220
  });
183
221
  return out;
@@ -1,4 +1,4 @@
1
- import { isClassLike, populateClassOwnedMembers } from '../../scope-resolution/scope/walkers.js';
1
+ import { isClassLike, populateClassOwnedMembers, tagNamespacePrefixes, } from '../../scope-resolution/scope/walkers.js';
2
2
  /**
3
3
  * Populate `ownerId` on Rust method defs.
4
4
  *
@@ -19,6 +19,16 @@ import { isClassLike, populateClassOwnedMembers } from '../../scope-resolution/s
19
19
  export function populateRustOwners(parsed) {
20
20
  populateClassOwnedMembers(parsed);
21
21
  populateRustImplOwners(parsed);
22
+ // #2730: tag defs declared inside `mod` blocks with their enclosing module
23
+ // path (`inner`, `a.b`) on the `namespacePrefix` sidecar. Rust modules are
24
+ // Namespace scopes owning a Namespace def (see the `mod_item` capture), so
25
+ // the shared C++-era pass applies unchanged. Qualified call resolution reads
26
+ // this to tell `inner::dispatch` apart from a same-named crate-root `fn`.
27
+ // Rust `qualifiedName`s never encode the enclosing module, so the shared
28
+ // "already namespaced" guard must be off: with it on, `mod a { pub fn a() }`
29
+ // matched by coincidence and the member was left looking like it belonged to
30
+ // the parent module (#2741 review).
31
+ tagNamespacePrefixes(parsed, { qualifiedNamesCarryNamespace: false });
22
32
  }
23
33
  function populateRustImplOwners(parsed) {
24
34
  // Build a map of struct name → def nodeId from all scopes.
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Rust module paths — the module tree, expressed over the scope model.
3
+ *
4
+ * rustc resolves `a::b::dispatch` against a MODULE TREE, not a file tree: `mod`
5
+ * is an item with its own `DefId`, and a path's leading segments name modules in
6
+ * the *type* namespace (which is why a same-named `fn` can never shadow them —
7
+ * functions live in the value namespace). GitNexus models the same tree in two
8
+ * halves, and this module joins them:
9
+ *
10
+ * - **Inline modules** (`mod inner { … }`) are `Namespace` scopes owning a
11
+ * `Namespace` def, so the shared `tagNamespacePrefixes` pass stamps members
12
+ * with `namespacePrefix = 'inner'` / `'outer.inner'`.
13
+ * - **File modules** (`mod tools;` loading `tools.rs` or `tools/mod.rs`) leave
14
+ * no in-file marker at all — the module path lives in the FILE PATH relative
15
+ * to the crate root. That half is reconstructed here.
16
+ *
17
+ * ## Module identity carries its crate
18
+ *
19
+ * A module is `{ crateRoot, segments }`, never bare segments. A cargo workspace
20
+ * routinely gives several members the same internal module name — `util`,
21
+ * `error`, `config`, `types` are near-universal — and identity by segments alone
22
+ * makes `crates/a/src/tools.rs` and `crates/b/src/tools.rs` the same module. That
23
+ * mis-binds a call across crates when only one defines the member, and (worse)
24
+ * ties the lookup when both do, so qualified resolution refuses and the call
25
+ * falls back to the lexical walk that #2730 exists to prevent. Rust has no
26
+ * implicit cross-crate paths: reaching another crate requires naming it, so two
27
+ * modules in different crates are never the same module.
28
+ *
29
+ * Everything here is pure path arithmetic over the workspace file set; no I/O.
30
+ */
31
+ /**
32
+ * A module's full identity: the crate it belongs to, plus its `::`-path inside
33
+ * that crate. `segments` is empty for the crate-root module itself.
34
+ */
35
+ export interface RustModule {
36
+ /** Crate-root directory (`src`, `crates/noob/src`, or `''` at repo root). */
37
+ readonly crateRoot: string;
38
+ readonly segments: readonly string[];
39
+ }
40
+ export interface RustModuleIndex {
41
+ /** Crate-root directories, longest first, so nested crates win. */
42
+ readonly crateRoots: readonly string[];
43
+ /**
44
+ * Every module name derivable from a FILE PATH, as a flat set of single
45
+ * segments. Inline `mod x { … }` names are absent by construction — they exist
46
+ * in no path — so this is only half of the negative filter's input; the
47
+ * resolver unions it with the inline module names it collects from the scope
48
+ * model (#2742).
49
+ */
50
+ readonly moduleNames: ReadonlySet<string>;
51
+ /**
52
+ * Entry files that are a crate root in their own right rather than a module of
53
+ * the surrounding crate — `src/bin/<name>.rs` auto-discovered binary targets.
54
+ * Maps the entry file to the directory its own submodules live under.
55
+ */
56
+ readonly standaloneRootFiles: ReadonlyMap<string, string>;
57
+ }
58
+ /**
59
+ * Index the workspace's crate roots: every directory holding a `main.rs` or
60
+ * `lib.rs`. A cargo workspace has one per member (`crates/noob/src`), a plain
61
+ * package exactly one (`src`). Longest-first ordering makes `moduleOfFile` pick
62
+ * the innermost enclosing crate for nested layouts.
63
+ *
64
+ * Cargo also auto-discovers a binary target per `src/bin/<name>.rs`. Each is a
65
+ * separate crate with its own `crate::` root, and its submodules live under
66
+ * `src/bin/<name>/`. Treating those files as ordinary modules of the library
67
+ * invented the module path `bin::<name>`, which made `crate::helper()` inside a
68
+ * binary resolve into the LIBRARY — downgrading an edge the lexical walk had
69
+ * previously got right (#2741 review).
70
+ */
71
+ export declare function buildRustModuleIndex(allFilePaths: ReadonlySet<string>): RustModuleIndex;
72
+ /**
73
+ * Could this qualifier name a module that exists in the workspace?
74
+ *
75
+ * A negative answer is authoritative and cheap: if the head segment matches no
76
+ * module name anywhere, no candidate channel can resolve it. Anchors keep their
77
+ * meaning (`crate::`/`self::`/`super::` are relative to the caller, so the head
78
+ * to test is the first non-anchor segment); an all-anchor qualifier (`self::f()`)
79
+ * names the caller's own module and is always worth trying.
80
+ */
81
+ export declare function couldNameAModule(qualifier: readonly string[], knownModuleNames: ReadonlySet<string>): boolean;
82
+ /**
83
+ * Module identity of the file itself: its crate root plus the `::`-segments
84
+ * below it.
85
+ *
86
+ * src/main.rs → { src, [] } (crate root module)
87
+ * src/tools.rs → { src, ['tools'] }
88
+ * src/a/mod.rs → { src, ['a'] }
89
+ * src/a/b.rs → { src, ['a', 'b'] }
90
+ * crates/noob/src/tools/mod.rs → { crates/noob/src, ['tools'] }
91
+ *
92
+ * Returns `undefined` for a file under no known crate root — the caller then has
93
+ * no module identity to reason about and must refuse rather than guess.
94
+ */
95
+ export declare function moduleOfFile(filePath: string, index: RustModuleIndex): RustModule | undefined;
96
+ /** Full module identity of a definition: its file's module plus any `mod` blocks around it. */
97
+ export declare function moduleOfDef(filePath: string, namespacePrefix: string | undefined, index: RustModuleIndex): RustModule | undefined;
98
+ /**
99
+ * Resolve a written path's leading segments to a module, from the calling
100
+ * module. Mirrors rustc's anchor handling:
101
+ *
102
+ * crate::a::b → the caller's OWN crate, segments ['a','b']
103
+ * self::a → callerModule ++ ['a']
104
+ * super::a → callerModule[:-1] ++ ['a']
105
+ * a::b → relative; the caller resolves this against the candidate
106
+ * channels (child module, `use` binding), so it is returned
107
+ * as-is for the caller to try in context.
108
+ *
109
+ * An anchored path always stays inside the caller's crate — `crate::` names the
110
+ * current crate, and `super::`/`self::` are relative to it — so the resolved
111
+ * module inherits `callerModule.crateRoot`.
112
+ *
113
+ * `super` chains (`super::super::x`) are consumed left to right. Returns
114
+ * `undefined` when the chain walks above the crate root — an invalid path that
115
+ * must not silently resolve to something else.
116
+ */
117
+ export declare function resolveAnchoredModulePath(qualifier: readonly string[], callerModule: RustModule): {
118
+ readonly module: RustModule;
119
+ readonly anchored: boolean;
120
+ } | undefined;
121
+ /**
122
+ * Identity comparison for two modules. The crate root participates: two modules
123
+ * with the same internal path in DIFFERENT crates are different modules, and
124
+ * conflating them is what let a workspace mis-bind or refuse (#2730 review H1).
125
+ */
126
+ export declare function sameModule(a: RustModule, b: RustModule): boolean;