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
@@ -54,12 +54,26 @@ const CPP_SCOPE_QUERY = `
54
54
  declarator: (type_identifier) @declaration.name) @declaration.struct
55
55
 
56
56
  ;; ─── Declarations — class / struct inside template_declaration ───────
57
+ ;; \`parameters:\` is the DECLARED parameter list (\`template <class T>\`), which
58
+ ;; lives on the template_declaration and not on the specifier — the opposite
59
+ ;; nesting from \`@declaration.template-arguments\` above, which is part of the
60
+ ;; specifier's own NAME. A partial specialization carries both, and that pairing
61
+ ;; is the only thing separating it from a full specialization written against
62
+ ;; the identical arguments.
63
+ ;;
64
+ ;; These four patterns are TWINS of the four standalone specifier patterns
65
+ ;; above: a templated struct matches both, minting two defs with one id, and
66
+ ;; only this half can see the parameter list. The duplicate-declaration backfill
67
+ ;; in scope-extractor.ts is what stops match order from deciding which twin
68
+ ;; keeps the parameters.
57
69
  (template_declaration
70
+ parameters: (template_parameter_list) @declaration.type-parameters
58
71
  (class_specifier
59
72
  name: (type_identifier) @declaration.name
60
73
  body: (field_declaration_list)) @declaration.class)
61
74
 
62
75
  (template_declaration
76
+ parameters: (template_parameter_list) @declaration.type-parameters
63
77
  (class_specifier
64
78
  name: (template_type
65
79
  (type_identifier) @declaration.name
@@ -67,11 +81,13 @@ const CPP_SCOPE_QUERY = `
67
81
  body: (field_declaration_list)) @declaration.class)
68
82
 
69
83
  (template_declaration
84
+ parameters: (template_parameter_list) @declaration.type-parameters
70
85
  (struct_specifier
71
86
  name: (type_identifier) @declaration.name
72
87
  body: (field_declaration_list)) @declaration.struct)
73
88
 
74
89
  (template_declaration
90
+ parameters: (template_parameter_list) @declaration.type-parameters
75
91
  (struct_specifier
76
92
  name: (template_type
77
93
  (type_identifier) @declaration.name
@@ -97,6 +113,16 @@ const CPP_SCOPE_QUERY = `
97
113
  declarator: (function_declarator
98
114
  declarator: (identifier) @declaration.name)) @declaration.function
99
115
 
116
+ ;; Lambda bindings (\`auto f = [](int x){ … };\`). The \`@declaration.function\`
117
+ ;; anchor sits on the INNER lambda_expression so its range aligns with
118
+ ;; \`(lambda_expression) @scope.function\` above; otherwise the def is owned by
119
+ ;; the enclosing scope and calls inside the lambda lose caller attribution.
120
+ ;; Mirrors the TypeScript arrow patterns (#2687).
121
+ (declaration
122
+ declarator: (init_declarator
123
+ declarator: (identifier) @declaration.name
124
+ value: (lambda_expression) @declaration.function))
125
+
100
126
  ;; ─── Declarations — function definition with pointer return ─────────
101
127
  (function_definition
102
128
  declarator: (pointer_declarator
@@ -526,6 +552,86 @@ const CPP_SCOPE_QUERY = `
526
552
  declarator: (reference_declarator
527
553
  (field_identifier) @type-binding.name)) @type-binding.field
528
554
 
555
+ ;; Generic field type: Repo<User> repo; (#2833)
556
+ ;; The three rules above all require type: (type_identifier), so a member whose
557
+ ;; type carries template arguments is a template_type and matched NONE of them —
558
+ ;; the field got no type binding at all, and every call through it lost its edge
559
+ ;; in BOTH spellings (repo.save() and this->repo.save()), while the same type in
560
+ ;; a LOCAL resolved fine because the local declaration rules gained their
561
+ ;; template_type variant long ago (see "Covers: List<User> users;" above).
562
+ ;; These three mirror the three above, one per declarator shape. Written as
563
+ ;; separate patterns rather than one alternation: a node-type alternation in a
564
+ ;; field position is the tree-sitter 0.21 hazard this repo has been bitten by
565
+ ;; before.
566
+ (field_declaration
567
+ type: (template_type) @type-binding.type
568
+ declarator: (field_identifier) @type-binding.name) @type-binding.field
569
+
570
+ ;; Generic field, pointer: Repo<User>* repo;
571
+ (field_declaration
572
+ type: (template_type) @type-binding.type
573
+ declarator: (pointer_declarator
574
+ declarator: (field_identifier) @type-binding.name)) @type-binding.field
575
+
576
+ ;; Generic field, reference: Repo<User>& repo;
577
+ (field_declaration
578
+ type: (template_type) @type-binding.type
579
+ declarator: (reference_declarator
580
+ (field_identifier) @type-binding.name)) @type-binding.field
581
+
582
+ ;; ─── Field type, QUALIFIED: ns::Address addr; std::vector<Item> items; ─
583
+ ;; The six rules above require the type node to BE a type_identifier or a
584
+ ;; template_type, and a qualified member type is NEITHER: tree-sitter-cpp parses
585
+ ;; ns::Address as a qualified_identifier WRAPPING the type_identifier, and
586
+ ;; std::vector<Item> as one wrapping the template_type. So every qualified
587
+ ;; member — generic or not — matched none of the six and bound nothing, which
588
+ ;; covers the commonest member spellings in real C++ (std::string, std::mutex,
589
+ ;; std::vector<T>, ns::Config).
590
+ ;;
591
+ ;; ONE PATTERN PER DECLARATOR SHAPE, MATCHING THE OUTER qualified_identifier,
592
+ ;; and that is the whole design. A tree-sitter query cannot match a node at
593
+ ;; arbitrary nesting depth, and a::b::c::Repo<User> nests one
594
+ ;; qualified_identifier per qualifier — so enumerating the inner node instead
595
+ ;; costs 3 patterns per depth per genericity and STILL ends at whatever depth
596
+ ;; the last author enumerated (that boundary was real: depth 3 was uncaptured).
597
+ ;; Matching the outer node is depth-agnostic and genericity-agnostic, and it is
598
+ ;; a single node type in the field position, not an alternation — the
599
+ ;; tree-sitter 0.21 hazard this repo has been bitten by before.
600
+ ;;
601
+ ;; The QUALIFIER IS THEN DROPPED, by cppQualifiedTail in interpret.ts, not
602
+ ;; here — and dropping it was measured rather than assumed. Recording
603
+ ;; ns::Repo<User> resolves to NOTHING: findClassBindingInScope's dotted-tail
604
+ ;; fallback splits on "." and C++ writes "::", and resolveClassBindingForName's
605
+ ;; generic branch then looks up the base ns::Repo, which is not a key either
606
+ ;; because C++ emits no @declaration.qualified_name and indexes ns::Repo under
607
+ ;; Repo. Reducing to the tail lands on exactly the path the BARE spelling
608
+ ;; already takes — one class-like match or decline — so a qualified member field
609
+ ;; behaves like the bare one instead of like nothing. A tail that names no
610
+ ;; workspace class (std::string with no "class string" in the repo) binds
611
+ ;; nothing and emits nothing, which is why this is a miss-closing change rather
612
+ ;; than an edge-fabricating one.
613
+ ;;
614
+ ;; Like the six above, each requires the declarator to reach the field_identifier
615
+ ;; DIRECTLY, so a method whose return type is qualified (ns::Thing method();)
616
+ ;; still captures no field — a function_declarator sits in between and none of
617
+ ;; these match it. Same for a function-pointer member, a using/typedef alias, a
618
+ ;; friend declaration and an operator declaration.
619
+ (field_declaration
620
+ type: (qualified_identifier) @type-binding.type
621
+ declarator: (field_identifier) @type-binding.name) @type-binding.field
622
+
623
+ ;; Qualified field, pointer: ns::Address* addr; std::unique_ptr<Repo>* repo;
624
+ (field_declaration
625
+ type: (qualified_identifier) @type-binding.type
626
+ declarator: (pointer_declarator
627
+ declarator: (field_identifier) @type-binding.name)) @type-binding.field
628
+
629
+ ;; Qualified field, reference: ns::Address& addr; std::vector<Item>& items;
630
+ (field_declaration
631
+ type: (qualified_identifier) @type-binding.type
632
+ declarator: (reference_declarator
633
+ (field_identifier) @type-binding.name)) @type-binding.field
634
+
529
635
  ;; ─── References — constructor calls (new Foo()) ─────────────────────
530
636
  (new_expression
531
637
  type: (type_identifier) @reference.name) @reference.call.constructor
@@ -1,6 +1,7 @@
1
1
  import { findClassBindingInScope, findEnclosingClassDef, } from '../../scope-resolution/scope/walkers.js';
2
2
  import { SupportedLanguages } from '../../../../_shared/index.js';
3
3
  import { populateClassOwnedMembers, tagNamespacePrefixes, } from '../../scope-resolution/scope/walkers.js';
4
+ import { extractElementTypeFromString } from '../../type-extractors/shared.js';
4
5
  import { cppProvider } from '../c-cpp.js';
5
6
  import { cppArityCompatibility } from './arity.js';
6
7
  import { CPP_CONVERSION_ONLY_ARG_TYPE_PREFIXES, cppConversionRank } from './conversion-rank.js';
@@ -16,6 +17,12 @@ import { populateCppRangeBindings } from './range-bindings.js';
16
17
  import { cppConstraintCompatibility } from './constraint-filter.js';
17
18
  import { clearCppUserDefinedConversions, populateCppUserDefinedConversions, } from './user-defined-conversions.js';
18
19
  import { buildCppMemberLookupMro, clearCppMemberLookupState, resolveCppReceiverMember, } from './member-lookup.js';
20
+ import { stripCppSpecifiers } from './interpret.js';
21
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
22
+ /** A pointee worth binding: a bare identifier, not `T**`, `T[]`, `A::B` or a
23
+ * template spelling. Hoisted — a literal here would mint a fresh RegExp on
24
+ * every subscript the resolver folds. */
25
+ const CPP_SIMPLE_POINTEE_RE = /^[A-Za-z_]\w*$/;
19
26
  /**
20
27
  * Per-pass memo of the augmented `#include`-resolution file set
21
28
  * (`allFilePaths` ∪ header paths), keyed on the two stable source sets.
@@ -23,26 +30,24 @@ import { buildCppMemberLookupMro, clearCppMemberLookupState, resolveCppReceiverM
23
30
  * a fresh ~F-entry `Set` on every call AND defeated the shared
24
31
  * `resolveCImportTarget` suffix-index memo (in `c/import-target.ts`) by handing
25
32
  * it a new set identity each time. Both inputs are stable per pass, so the
26
- * union is built once and reused. `WeakMap`-keyed → reclaimed with the pass.
27
- * (Twin of the C resolver's `augmentedFilePaths`.)
33
+ * union is built once and reused. Reclaimed with the pass.
34
+ *
35
+ * Two inputs, so two levels of `perFileSet` composed rather than a second
36
+ * primitive: the outer memo's value is the inner memo, and a function is an
37
+ * object, which is all `T extends object` asks for.
38
+ *
39
+ * (Twin of the C resolver's `augmentedFilePathsFor`.) The two memos stay
40
+ * SEPARATE deliberately. C++ delegates to `resolveCImportTarget`, whose
41
+ * `suffixIndex` memo is keyed on the augmented set, so a single memo shared
42
+ * with C would hand each language the other's index — same
43
+ * builder-shared/memo-separate rule as `import-resolvers/pass-cache.ts`.
28
44
  */
29
- const augmentedPathsByPass = new WeakMap();
30
- function augmentedFilePaths(allFilePaths, headerPaths) {
31
- let byHeaders = augmentedPathsByPass.get(allFilePaths);
32
- if (byHeaders === undefined) {
33
- byHeaders = new WeakMap();
34
- augmentedPathsByPass.set(allFilePaths, byHeaders);
35
- }
36
- let augmented = byHeaders.get(headerPaths);
37
- if (augmented === undefined) {
38
- const set = new Set(allFilePaths);
39
- for (const h of headerPaths)
40
- set.add(h);
41
- augmented = set;
42
- byHeaders.set(headerPaths, augmented);
43
- }
44
- return augmented;
45
- }
45
+ const augmentedFilePathsFor = perFileSet((allFilePaths) => perFileSet((headerPaths) => {
46
+ const set = new Set(allFilePaths);
47
+ for (const h of headerPaths)
48
+ set.add(h);
49
+ return set;
50
+ }));
46
51
  /**
47
52
  * C++ `ScopeResolver` registered in `SCOPE_RESOLVERS` and consumed by
48
53
  * the generic `runScopeResolution` orchestrator (RFC #909 Ring 3).
@@ -78,7 +83,7 @@ export const cppScopeResolver = {
78
83
  // detection but are importable from .cpp files via #include.
79
84
  const headerPaths = resolutionConfig;
80
85
  if (headerPaths !== undefined && headerPaths.size > 0) {
81
- return resolveCppImportTarget(targetRaw, fromFile, augmentedFilePaths(allFilePaths, headerPaths));
86
+ return resolveCppImportTarget(targetRaw, fromFile, augmentedFilePathsFor(allFilePaths)(headerPaths));
82
87
  }
83
88
  return resolveCppImportTarget(targetRaw, fromFile, allFilePaths);
84
89
  },
@@ -195,6 +200,29 @@ export const cppScopeResolver = {
195
200
  const mro = scopes.methodDispatch.mroFor(enclosing.nodeId);
196
201
  return mro.includes(lhsDef.nodeId);
197
202
  },
203
+ // Subscript route only — C++ collection views are method calls.
204
+ //
205
+ // Two container spellings reach a subscript. A POINTER is one of them: `p[i]`
206
+ // on a `User*` is pointer arithmetic yielding a `User`, so the trailing `*` is
207
+ // peeled here rather than by `stripTypePreservingDecoration` (C++ declares
208
+ // none) — and peeling it at a bare class lookup instead would be wrong, since
209
+ // that is the route by which `p->m()` must keep seeing `User`'s own members.
210
+ // The other is a template container (`std::vector<User>`), left to the shared
211
+ // extractor.
212
+ //
213
+ // Fed the annotation AS WRITTEN, since `normalizeCppTypeName` strips both the
214
+ // star and the array brackets at capture. `undefined` = "not a container", so
215
+ // an `operator[]`-bearing class does not fold `grid[0]` onto `Grid`.
216
+ elementTypeOf: (containerType, via) => {
217
+ if (via.kind !== 'index')
218
+ return undefined;
219
+ const t = stripCppSpecifiers(containerType);
220
+ if (t.endsWith('*')) {
221
+ const pointee = t.slice(0, -1).trim();
222
+ return CPP_SIMPLE_POINTEE_RE.test(pointee) ? pointee : undefined;
223
+ }
224
+ return extractElementTypeFromString(t);
225
+ },
198
226
  // C++ is statically typed — disable field fallback heuristic
199
227
  fieldFallbackOnMethodLookup: false,
200
228
  // C++ needs return type propagation across #include boundaries
@@ -1,21 +1,8 @@
1
- /**
2
- * C# collection-accessor unwrapping.
3
- *
4
- * When the compound-receiver resolver encounters a trailing
5
- * `.Values` / `.Keys` on a dotted member-access chain, it calls the
6
- * provider's `unwrapCollectionAccessor` hook to find the element
7
- * type. This module supplies the C# implementation — recognizing
8
- * Dictionary-family generics and returning the value or key type.
9
- *
10
- * Other languages (Python, Java, TypeScript) use method-call syntax
11
- * for the same access (`.values()` / `.keys()`), which the compound-
12
- * receiver's call-expression branch already handles; they leave this
13
- * hook undefined.
14
- */
1
+ import type { ElementAccessRoute } from '../../scope-resolution/contract/scope-resolver.js';
15
2
  /**
16
3
  * Resolve `data.Values` / `data.Keys` on a Dictionary-like receiver
17
4
  * to its element-type simple name. Returns `undefined` for any
18
5
  * receiver / accessor combination we don't recognize, letting the
19
6
  * compound-receiver pass fall through to the regular field walk.
20
7
  */
21
- export declare function unwrapCsharpCollectionAccessor(receiverType: string, accessor: string): string | undefined;
8
+ export declare function unwrapCsharpElementType(containerType: string, via: ElementAccessRoute): string | undefined;
@@ -1,16 +1,16 @@
1
+ import { extractElementTypeFromString } from '../../type-extractors/shared.js';
1
2
  /**
2
- * C# collection-accessor unwrapping.
3
+ * C# container element-type unwrapping.
3
4
  *
4
5
  * When the compound-receiver resolver encounters a trailing
5
6
  * `.Values` / `.Keys` on a dotted member-access chain, it calls the
6
- * provider's `unwrapCollectionAccessor` hook to find the element
7
+ * provider's `elementTypeOf` hook to find the element
7
8
  * type. This module supplies the C# implementation — recognizing
8
9
  * Dictionary-family generics and returning the value or key type.
9
10
  *
10
- * Other languages (Python, Java, TypeScript) use method-call syntax
11
- * for the same access (`.values()` / `.keys()`), which the compound-
12
- * receiver's call-expression branch already handles; they leave this
13
- * hook undefined.
11
+ * Other languages (Python, Java, TypeScript) use method-call syntax for the
12
+ * same access (`.values()` / `.keys()`), which the compound-receiver's
13
+ * call-expression branch already handles; they answer only the `index` route.
14
14
  */
15
15
  /** Extract (K, V) from `Dictionary<K, V>` / `IDictionary<K, V>` /
16
16
  * `IReadOnlyDictionary<K, V>` / `SortedDictionary<K, V>` /
@@ -46,11 +46,19 @@ function extractDictionaryArgs(rawName) {
46
46
  * receiver / accessor combination we don't recognize, letting the
47
47
  * compound-receiver pass fall through to the regular field walk.
48
48
  */
49
- export function unwrapCsharpCollectionAccessor(receiverType, accessor) {
50
- if (accessor !== 'Values' && accessor !== 'Keys')
49
+ export function unwrapCsharpElementType(containerType, via) {
50
+ const args = extractDictionaryArgs(containerType);
51
+ // Subscript on a dictionary yields the VALUE type — `dict["k"]` is a V, never
52
+ // a K. Previously this route returned nothing at all for C#, because the
53
+ // dictionary parse below was reachable only from the accessor hook.
54
+ if (via.kind === 'index') {
55
+ if (args !== undefined)
56
+ return args.value;
57
+ return extractElementTypeFromString(containerType);
58
+ }
59
+ if (via.name !== 'Values' && via.name !== 'Keys')
51
60
  return undefined;
52
- const args = extractDictionaryArgs(receiverType);
53
61
  if (args === undefined)
54
62
  return undefined;
55
- return accessor === 'Values' ? args.value : args.key;
63
+ return via.name === 'Values' ? args.value : args.key;
56
64
  }
@@ -24,6 +24,7 @@ import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
24
24
  import { getTreeSitterBufferSize } from '../../constants.js';
25
25
  import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
26
26
  import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
27
+ import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
27
28
  /** Declaration anchors that carry function-like arity metadata. */
28
29
  const FUNCTION_DECL_TAGS = [
29
30
  '@declaration.method',
@@ -143,6 +144,12 @@ export function emitCsharpScopeCaptures(sourceText, _filePath, cachedTree) {
143
144
  }
144
145
  // Defensive fallback: emit the raw match so the extractor at
145
146
  // least sees an anchor, even without markers.
147
+ // Structural receiver chain for a call whose receiver is itself an
148
+ // expression, so resolution can type it by folding over structure
149
+ // instead of re-parsing the receiver's source text. Self-gating: a
150
+ // non-call match, an absent receiver, or a chain with no nameable base
151
+ // all leave `grouped` untouched.
152
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
146
153
  out.push(grouped);
147
154
  continue;
148
155
  }
@@ -159,6 +166,12 @@ export function emitCsharpScopeCaptures(sourceText, _filePath, cachedTree) {
159
166
  // the AST in code. Mirrors Python's `self`/`cls` synthesis on
160
167
  // `@scope.function` matches.
161
168
  if (grouped['@scope.function'] !== undefined) {
169
+ // Structural receiver chain for a call whose receiver is itself an
170
+ // expression, so resolution can type it by folding over structure
171
+ // instead of re-parsing the receiver's source text. Self-gating: a
172
+ // non-call match, an absent receiver, or a chain with no nameable base
173
+ // all leave `grouped` untouched.
174
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
162
175
  out.push(grouped);
163
176
  const fnNode = nodeIfType(nodeMap['@scope.function'], ...FUNCTION_NODE_TYPES);
164
177
  if (fnNode !== null) {
@@ -231,6 +244,12 @@ export function emitCsharpScopeCaptures(sourceText, _filePath, cachedTree) {
231
244
  grouped['@reference.parameter-types'] = syntheticCapture('@reference.parameter-types', callNode, JSON.stringify(argTypes));
232
245
  }
233
246
  }
247
+ // Structural receiver chain for a call whose receiver is itself an
248
+ // expression, so resolution can type it by folding over structure
249
+ // instead of re-parsing the receiver's source text. Self-gating: a
250
+ // non-call match, an absent receiver, or a chain with no nameable base
251
+ // all leave `grouped` untouched.
252
+ synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
234
253
  out.push(grouped);
235
254
  // Synthesize primary-constructor declarations on class/record
236
255
  // declarations that carry a `parameter_list` child (C# 12 syntax
@@ -19,22 +19,17 @@
19
19
  * `linkStatus: 'unresolved'`.
20
20
  */
21
21
  import { resolveCSharpImportInternal } from '../../import-resolvers/csharp.js';
22
- import { buildSuffixIndex } from '../../import-resolvers/utils.js';
22
+ import { getWorkspaceFileIndex, } from '../../import-resolvers/workspace-file-index.js';
23
+ import { buildPackageDirIndex, firstFileDirectlyInPkgDir, } from '../../import-resolvers/package-dir-index.js';
24
+ import { perFileSet } from '../../import-resolvers/per-file-set.js';
23
25
  import { csharpSuffixFallbackAllowed } from '../../csharp-namespace-gate.js';
24
- // Memoize on Set identity: the orchestrator passes the SAME `allFilePaths`
25
- // Set through every `resolveImportTarget` call in a pass, so this rebuilds
26
- // the normalized list + suffix index once instead of once per import (#1881 #2).
27
- const workspaceFileIndexCache = new WeakMap();
28
- function getWorkspaceFileIndex(allFilePaths) {
29
- const cached = workspaceFileIndexCache.get(allFilePaths);
30
- if (cached)
31
- return cached;
32
- const all = [...allFilePaths];
33
- const normalized = all.map((f) => f.replace(/\\/g, '/'));
34
- const built = { normalized, all, index: buildSuffixIndex(normalized, all) };
35
- workspaceFileIndexCache.set(allFilePaths, built);
36
- return built;
37
- }
26
+ /**
27
+ * Namespace-directory index over the `.cs` files, memoized on the Set's
28
+ * identity. Feeds `firstFileDirectlyInPkgDir` (in
29
+ * `import-resolvers/package-dir-index.ts`), which the no-csproj path calls once
30
+ * for the direct match and then up to once per stripped namespace prefix.
31
+ */
32
+ const getCsharpDirIndex = perFileSet((allFilePaths) => buildPackageDirIndex(allFilePaths, (normalized) => normalized.endsWith('.cs')));
38
33
  export function resolveCsharpImportTarget(parsedImport, workspaceIndex) {
39
34
  const ctx = narrowContext(workspaceIndex);
40
35
  if (ctx === null)
@@ -47,8 +42,8 @@ export function resolveCsharpImportTarget(parsedImport, workspaceIndex) {
47
42
  const evidence = ctx.namespaces;
48
43
  const csharpConfigs = ctx.csharpConfigs ?? [];
49
44
  if (csharpConfigs.length > 0) {
50
- const { normalized, all, index } = getWorkspaceFileIndex(ctx.allFilePaths);
51
- const fromCsproj = resolveCSharpImportInternal(targetRaw, [...csharpConfigs], normalized, all, index, evidence);
45
+ const { index } = getWorkspaceFileIndex(ctx.allFilePaths);
46
+ const fromCsproj = resolveCSharpImportInternal(targetRaw, [...csharpConfigs], ctx.allFilePaths, index, evidence);
52
47
  if (fromCsproj.length > 0)
53
48
  return fromCsproj[0];
54
49
  // csproj configs are authoritative: mirror legacy `configs/csharp.ts`,
@@ -72,12 +67,19 @@ export function resolveCsharpImportTarget(parsedImport, workspaceIndex) {
72
67
  return null;
73
68
  }
74
69
  // Exact file / nested-suffix / namespace-dir direct-child match.
75
- const direct = resolveDirectMatch(ctx.allFilePaths, pathLike);
70
+ //
71
+ // The no-csproj path used to take the raw Set and re-scan it — up to eight
72
+ // full workspace passes for a four-segment `using` — past the memoized index
73
+ // sitting right there for the csproj branch (#2878). Both legs now read the
74
+ // same per-run indexes.
75
+ const ws = getWorkspaceFileIndex(ctx.allFilePaths);
76
+ const dirs = getCsharpDirIndex(ctx.allFilePaths);
77
+ const direct = resolveDirectMatch(ws, dirs, pathLike);
76
78
  if (direct !== null)
77
79
  return direct;
78
80
  // Progressive prefix stripping — mirrors csproj's root-namespace mapping
79
81
  // without the csproj.
80
- return resolveByProgressiveStripping(ctx.allFilePaths, pathLike);
82
+ return resolveByProgressiveStripping(ws, dirs, pathLike);
81
83
  }
82
84
  /**
83
85
  * `WorkspaceIndex` is an opaque `unknown` placeholder in the shared contract;
@@ -98,46 +100,26 @@ function narrowContext(workspaceIndex) {
98
100
  * exact whole-path file > nested suffix file > first `.cs` directly inside
99
101
  * the namespace directory.
100
102
  */
101
- function resolveDirectMatch(allFilePaths, pathLike) {
103
+ function resolveDirectMatch(ws, dirs, pathLike) {
102
104
  const exactName = `${pathLike}.cs`;
103
- const nestedSuffix = `/${exactName}`;
104
- let suffixFile = null;
105
- for (const raw of allFilePaths) {
106
- const f = raw.replace(/\\/g, '/');
107
- if (!f.endsWith('.cs'))
108
- continue;
109
- if (f === exactName)
110
- return raw; // exact whole-path match wins
111
- if (suffixFile === null && f.endsWith(nestedSuffix))
112
- suffixFile = raw;
113
- }
114
- if (suffixFile !== null)
105
+ // An exact whole-path match wins even when a `…/<exactName>` suffix match
106
+ // appeared EARLIER in iteration order, so the two lookups stay separate:
107
+ // `index.get` conflates them and would return the earlier suffix hit.
108
+ const exact = ws.normToRaw.get(exactName);
109
+ if (exact !== undefined)
110
+ return exact;
111
+ // No whole-path file exists, so every segment-suffix hit is a `/<exactName>`
112
+ // match and `index.get` yields the first one in iteration order — exactly the
113
+ // `suffixFile` the scan kept. Only a `.cs` file can carry a `.cs` suffix key,
114
+ // so the old `endsWith('.cs')` filter is implied.
115
+ const suffixFile = ws.index.get(exactName);
116
+ if (suffixFile !== undefined)
115
117
  return suffixFile;
116
- return findDirectChild(allFilePaths, pathLike);
117
- }
118
- /**
119
- * First `.cs` file that lives directly inside the namespace directory
120
- * `dirSegment` (at repo root or nested under a project prefix), not deeper.
121
- * The legacy resolver emits all of them; the scope-resolver contract is
122
- * single-target so we take one.
123
- */
124
- function findDirectChild(allFilePaths, dirSegment) {
125
- const dirPrefix = `${dirSegment}/`;
126
- const nestedDirPrefix = `/${dirPrefix}`;
127
- for (const raw of allFilePaths) {
128
- const f = raw.replace(/\\/g, '/');
129
- if (!f.endsWith('.cs'))
130
- continue;
131
- const atRoot = f.startsWith(dirPrefix);
132
- const atNested = f.includes(nestedDirPrefix);
133
- if (!atRoot && !atNested)
134
- continue;
135
- const idx = atRoot ? 0 : f.indexOf(nestedDirPrefix) + 1;
136
- const after = f.slice(idx + dirPrefix.length);
137
- if (after.length > 0 && !after.includes('/'))
138
- return raw;
139
- }
140
- return null;
118
+ // First `.cs` file living directly inside the namespace directory `pathLike`
119
+ // (at repo root or nested under a project prefix), not deeper. The legacy
120
+ // resolver emits all of them; the scope-resolver contract is single-target so
121
+ // we take one.
122
+ return firstFileDirectlyInPkgDir(dirs, pathLike);
141
123
  }
142
124
  /**
143
125
  * Try each suffix of the namespace path against `.cs` files and directories,
@@ -145,27 +127,19 @@ function findDirectChild(allFilePaths, dirSegment) {
145
127
  * resolving to `Models/User.cs` in a repo laid out without the `CrossFile/`
146
128
  * prefix (the scope-resolver layer has no csproj to consult).
147
129
  */
148
- function resolveByProgressiveStripping(allFilePaths, pathLike) {
130
+ function resolveByProgressiveStripping(ws, dirs, pathLike) {
149
131
  const segments = pathLike.split('/').filter(Boolean);
150
132
  for (let skip = 1; skip < segments.length; skip++) {
151
133
  const tail = segments.slice(skip).join('/');
152
134
  if (tail === '')
153
135
  continue;
154
- const tailFile = `${tail}.cs`;
155
- const tailSuffix = `/${tailFile}`;
156
- let tailFileMatch = null;
157
- for (const raw of allFilePaths) {
158
- const f = raw.replace(/\\/g, '/');
159
- if (!f.endsWith('.cs'))
160
- continue;
161
- if (f === tailFile || f.endsWith(tailSuffix)) {
162
- tailFileMatch = raw;
163
- break;
164
- }
165
- }
166
- if (tailFileMatch !== null)
136
+ // `f === tailFile || f.endsWith('/' + tailFile)`, first in iteration order —
137
+ // no exact-wins rule here, unlike `resolveDirectMatch`, so the conflated
138
+ // suffix lookup is the right one.
139
+ const tailFileMatch = ws.index.get(`${tail}.cs`);
140
+ if (tailFileMatch !== undefined)
167
141
  return tailFileMatch;
168
- const child = findDirectChild(allFilePaths, tail);
142
+ const child = firstFileDirectlyInPkgDir(dirs, tail);
169
143
  if (child !== null)
170
144
  return child;
171
145
  }
@@ -545,7 +545,11 @@ export function populateCsharpNamespaceSiblings(parsedFiles, indexes, inputs) {
545
545
  if (seen.has(memberDef.nodeId))
546
546
  continue;
547
547
  seen.add(memberDef.nodeId);
548
- bucketArr.push({ def: memberDef, origin: 'import' });
548
+ bucketArr.push({
549
+ def: memberDef,
550
+ origin: 'import',
551
+ visibility: 'static-member-import',
552
+ });
549
553
  }
550
554
  }
551
555
  }
@@ -61,24 +61,44 @@ const CSHARP_SCOPE_QUERY = `
61
61
  ;; Anonymous methods / lambdas are not scoped — out of scope per plan.
62
62
 
63
63
  ;; Declarations — types
64
+ ;; The parameter list is matched as an UNNAMED optional child, not through a
65
+ ;; \`type_parameters:\` field: the C# grammar gives \`interface_declaration\` that
66
+ ;; field but \`class_declaration\` / \`struct_declaration\` / \`record_declaration\`
67
+ ;; only a bare \`type_parameter_list\` child, so the field form would silently
68
+ ;; capture nothing on exactly the three most common declarations. The unnamed
69
+ ;; form matches all four.
70
+ ;;
71
+ ;; A \`where T : IRepo\` constraint is a SEPARATE sibling clause
72
+ ;; (\`type_parameter_constraints_clause\`) and is deliberately not read here — the
73
+ ;; bound stays absent for C#, which reads as "unknown", the safe direction.
64
74
  (class_declaration
65
- name: (identifier) @declaration.name) @declaration.class
75
+ name: (identifier) @declaration.name
76
+ (type_parameter_list)? @declaration.type-parameters) @declaration.class
66
77
 
67
78
  (interface_declaration
68
- name: (identifier) @declaration.name) @declaration.interface
79
+ name: (identifier) @declaration.name
80
+ (type_parameter_list)? @declaration.type-parameters) @declaration.interface
69
81
 
70
82
  (struct_declaration
71
- name: (identifier) @declaration.name) @declaration.struct
83
+ name: (identifier) @declaration.name
84
+ (type_parameter_list)? @declaration.type-parameters) @declaration.struct
72
85
 
73
86
  (record_declaration
74
- name: (identifier) @declaration.name) @declaration.record
87
+ name: (identifier) @declaration.name
88
+ (type_parameter_list)? @declaration.type-parameters) @declaration.record
75
89
 
76
90
  (enum_declaration
77
91
  name: (identifier) @declaration.name) @declaration.enum
78
92
 
79
93
  ;; Declarations — methods / constructors / properties
94
+ ;;
95
+ ;; A generic METHOD's parameters are read for the same reason a generic type's
96
+ ;; are (#2912 review): \`void Run<T>(IValidator<T> v)\` writes a receiver whose
97
+ ;; argument is a type VARIABLE, and a pass that cannot tell that from a concrete
98
+ ;; type prunes every implementor of \`IValidator\` from the call's fan-out.
80
99
  (method_declaration
81
- name: (identifier) @declaration.name) @declaration.method
100
+ name: (identifier) @declaration.name
101
+ (type_parameter_list)? @declaration.type-parameters) @declaration.method
82
102
 
83
103
  (constructor_declaration
84
104
  name: (identifier) @declaration.name) @declaration.constructor