cgraphx 2.0.2 → 2.0.3

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 (680) hide show
  1. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  2. package/dist/core/code/engine/cli/analyze.js +1086 -0
  3. package/dist/core/code/engine/cli/cli-message.js +83 -0
  4. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  5. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  6. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  7. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  8. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  9. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  10. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  11. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  12. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  13. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  14. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  15. package/dist/core/code/engine/cli/status.js +156 -0
  16. package/dist/core/code/engine/cli/tool.js +384 -0
  17. package/dist/core/code/engine/config/ignore-service.js +511 -0
  18. package/dist/core/code/engine/config/supported-languages.js +17 -0
  19. package/dist/core/code/engine/core/analysis-features.js +64 -0
  20. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  21. package/dist/core/code/engine/core/git-staleness.js +180 -0
  22. package/dist/core/code/engine/core/graph/graph.js +180 -0
  23. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  24. package/dist/core/code/engine/core/graph/types.js +2 -0
  25. package/dist/core/code/engine/core/index-freshness.js +12 -0
  26. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  27. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  28. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  29. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  30. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  31. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  32. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  33. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  34. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  35. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  36. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  37. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  38. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  39. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  40. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  41. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  42. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  43. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  44. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  45. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  46. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  47. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  48. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  49. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  50. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  51. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  52. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  53. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  54. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  55. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  56. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  57. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  58. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  59. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  60. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  61. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  62. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  63. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  64. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  65. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  66. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  67. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  81. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  82. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  83. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  84. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  85. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  86. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  87. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  88. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  89. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  90. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  91. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  92. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  93. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  94. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  95. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  96. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  97. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  98. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  99. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  100. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  101. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  102. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  103. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  104. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  105. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  106. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  107. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  108. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  109. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  110. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  111. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  113. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  114. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  115. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  116. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  117. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  118. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  119. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  120. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  121. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  122. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  123. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  124. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  125. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  126. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  127. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  128. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  129. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  130. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  131. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  132. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  133. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  134. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  135. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  136. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  137. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  138. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  139. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  140. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  141. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  142. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  143. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  144. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  145. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  146. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  147. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  148. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  149. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  150. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  151. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  152. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  153. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  154. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  155. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  156. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  157. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  158. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  159. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  160. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  161. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  162. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  163. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  164. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  165. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  166. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  167. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  168. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  169. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  170. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  171. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  172. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  173. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  174. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  175. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  176. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  177. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  178. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  179. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  180. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  181. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  182. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  183. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  184. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  185. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  186. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  187. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  188. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  189. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  190. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  191. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  192. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  193. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  194. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  195. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  196. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  197. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  198. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  199. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  200. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  201. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  202. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  203. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  204. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  205. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  206. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  207. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  208. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  209. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  210. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  211. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  212. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  213. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  214. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  215. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  216. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  217. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  218. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  219. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  220. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  221. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  222. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  223. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  224. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  225. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  226. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  227. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  228. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  229. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  230. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  231. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  232. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  233. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  234. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  235. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  236. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  237. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  238. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  239. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  240. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  241. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  242. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  243. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  244. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  245. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  246. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  247. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  248. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  249. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  250. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  251. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  252. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  253. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  254. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  255. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  256. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  257. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  258. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  259. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  260. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  261. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  262. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  263. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  264. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  265. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  266. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  267. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  268. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  269. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  270. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  271. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  272. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  273. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  274. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  275. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  276. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  277. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  278. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  279. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  280. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  281. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  282. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  283. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  284. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  285. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  286. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  287. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  288. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  289. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  290. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  291. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  292. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  293. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  294. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  295. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  296. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  297. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  298. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  299. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  300. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  301. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  302. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  303. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  304. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  305. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  306. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  307. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  308. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  309. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  310. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  311. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  312. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  313. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  314. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  315. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  316. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  317. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  318. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  319. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  320. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  321. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  322. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  323. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  324. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  325. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  326. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  327. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  328. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  329. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  330. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  331. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  332. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  333. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  334. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  335. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  336. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  337. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  338. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  339. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  340. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  341. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  342. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  343. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  344. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  345. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  346. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  347. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  348. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  349. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  350. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  351. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  352. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  353. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  354. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  355. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  356. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  357. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  358. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  359. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  360. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  361. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  362. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  363. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  364. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  365. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  366. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  367. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  368. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  369. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  370. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  371. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  372. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  373. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  374. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  375. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  376. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  377. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  378. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  379. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  380. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  381. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  382. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  383. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  384. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  385. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  386. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  387. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  388. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  389. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  390. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  391. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  392. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  393. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  394. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  395. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  396. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  397. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  398. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  399. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  400. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  401. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  402. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  403. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  404. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  405. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  406. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  407. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  408. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  409. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  410. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  411. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  412. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  413. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  414. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  415. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  416. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  417. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  418. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  419. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  420. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  421. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  422. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  423. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  424. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  425. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  426. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  427. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  428. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  429. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  430. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  431. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  432. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  433. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  434. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  435. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  436. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  437. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  438. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  439. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  440. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  441. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  442. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  443. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  444. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  445. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  446. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  447. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  448. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  449. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  450. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  451. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  452. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  453. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  454. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  455. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  456. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  457. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  458. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  459. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  460. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  461. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  462. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  463. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  464. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  465. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  466. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  467. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  468. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  469. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  470. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  471. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  472. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  473. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  474. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  475. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  476. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  477. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  478. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  479. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  480. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  481. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  482. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  483. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  484. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  485. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  486. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  487. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  488. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  489. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  490. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  491. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  492. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  493. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  494. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  495. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  496. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  497. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  498. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  499. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  500. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  501. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  502. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  503. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  504. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  505. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  506. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  507. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  508. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  509. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  510. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  511. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  513. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  514. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  515. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  516. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  517. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  518. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  519. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  520. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  521. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  522. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  523. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  524. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  525. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  526. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  527. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  528. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  529. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  530. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  531. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  532. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  533. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  534. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  535. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  536. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  537. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  538. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  539. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  540. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  541. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  542. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  543. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  544. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  545. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  546. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  547. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  548. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  549. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  550. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  551. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  552. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  553. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  554. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  555. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  556. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  557. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  558. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  559. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  560. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  561. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  562. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  563. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  564. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  565. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  566. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  567. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  568. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  569. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  570. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  571. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  572. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  573. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  574. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  575. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  576. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  577. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  578. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  579. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  580. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  581. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  582. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  583. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  584. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  585. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  586. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  587. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  588. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  589. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  590. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  591. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  592. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  593. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  594. package/dist/core/code/engine/core/logger.js +339 -0
  595. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  596. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  597. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  598. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  599. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  600. package/dist/core/code/engine/lib/utils.js +121 -0
  601. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  602. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  603. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  604. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  605. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  606. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  607. package/dist/core/code/engine/storage/branch-index.js +72 -0
  608. package/dist/core/code/engine/storage/file-hash.js +95 -0
  609. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  610. package/dist/core/code/engine/storage/git.js +555 -0
  611. package/dist/core/code/engine/storage/index-lock.js +664 -0
  612. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  613. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  614. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  615. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  616. package/dist/core/code/engine/types/pipeline.js +2 -0
  617. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  618. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  619. package/dist/core/code/shared/graph/types.js +8 -0
  620. package/dist/core/code/shared/index.js +105 -0
  621. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  622. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  623. package/dist/core/code/shared/integrations/retry.js +70 -0
  624. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  625. package/dist/core/code/shared/language-detection.js +162 -0
  626. package/dist/core/code/shared/languages.js +27 -0
  627. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  628. package/dist/core/code/shared/mro-strategy.js +2 -0
  629. package/dist/core/code/shared/pipeline.js +5 -0
  630. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  631. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  632. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  633. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  634. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  635. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  636. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  637. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  638. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  639. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  640. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  641. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  642. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  643. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  644. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  645. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  646. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  647. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  648. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  649. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  650. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  651. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  652. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  653. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  654. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  655. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  656. package/dist/core/code/shared/test-helpers.js +17 -0
  657. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  658. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  659. package/dist/core/timeline/cli.d.ts.map +1 -1
  660. package/dist/core/timeline/cli.js +13 -6
  661. package/dist/core/timeline/cli.js.map +1 -1
  662. package/dist/core/timeline/debris.d.ts +20 -0
  663. package/dist/core/timeline/debris.d.ts.map +1 -0
  664. package/dist/core/timeline/debris.js +124 -0
  665. package/dist/core/timeline/debris.js.map +1 -0
  666. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  667. package/dist/core/timeline/hook-runner.js +3 -1
  668. package/dist/core/timeline/hook-runner.js.map +1 -1
  669. package/dist/core/timeline/hooks.d.ts.map +1 -1
  670. package/dist/core/timeline/hooks.js +13 -5
  671. package/dist/core/timeline/hooks.js.map +1 -1
  672. package/dist/core/timeline/installer.d.ts +2 -0
  673. package/dist/core/timeline/installer.d.ts.map +1 -1
  674. package/dist/core/timeline/installer.js +12 -0
  675. package/dist/core/timeline/installer.js.map +1 -1
  676. package/dist/core/timeline/project-root.d.ts +21 -0
  677. package/dist/core/timeline/project-root.d.ts.map +1 -0
  678. package/dist/core/timeline/project-root.js +83 -0
  679. package/dist/core/timeline/project-root.js.map +1 -0
  680. package/package.json +1 -1
@@ -0,0 +1,1328 @@
1
+ "use strict";
2
+ /**
3
+ * Tree-sitter query for TypeScript scope captures (RFC §5.1).
4
+ *
5
+ * Captures the structural skeleton the generic scope-resolution pipeline
6
+ * consumes: scopes (module/namespace/class/function), declarations (class-
7
+ * likes, method-likes, properties, variables), imports (one anchor per
8
+ * statement — decomposed in `import-decomposer.ts`), type bindings
9
+ * (parameter annotations, variable annotations, constructor inference,
10
+ * return types), and references (call sites, member writes).
11
+ *
12
+ * TypeScript specifics that shape this query:
13
+ *
14
+ * - **Namespaces** (`namespace Foo { }`) use `internal_module` with a
15
+ * `namespace` anon keyword + `identifier` or `nested_identifier` name +
16
+ * `statement_block` body. Verified via Unit 1 probe.
17
+ * - **`this` / `super`** are NAMED nodes `(this)` / `(super)` — unlike
18
+ * C#'s `this`/`base` which are anonymous tokens. `(_)` wildcard matches
19
+ * them as the receiver child of `member_expression`, so we don't need
20
+ * explicit string patterns.
21
+ * - **Optional chaining** (`obj?.m()`) still matches the regular
22
+ * `member_expression > object: (_) / property: (property_identifier)`
23
+ * pattern; the `(optional_chain)` child sits between them but doesn't
24
+ * occupy a named field. Same query handles both.
25
+ * - **Dynamic imports** (`import('./mod')`) are `call_expression` whose
26
+ * `function` field is a named `import` node (not a regular identifier).
27
+ * Captured via a dedicated pattern.
28
+ * - **Function overloads** — `function f(x:string); function f(x:number);
29
+ * function f(x) { … }` emits two `function_signature` nodes plus one
30
+ * `function_declaration`. All three emit `@declaration.function`;
31
+ * arity metadata synthesis merges parameterTypes.
32
+ * - **Parameter properties** (`constructor(public name: string)`) — each
33
+ * parameter emits `@declaration.property` on the enclosing class; the
34
+ * same identifier also binds as a parameter in the constructor scope
35
+ * via the normal `required_parameter` → `@type-binding.parameter` path.
36
+ * - **Enum** — dual type+value. Emits `@scope.class` (enum body contains
37
+ * member declarations) + `@declaration.enum`. Enum member names
38
+ * are captured via `enum_assignment` (see below).
39
+ *
40
+ * Node types pinned via `scripts/_probe_typescript_grammar.ts`:
41
+ * internal_module, namespace_export, namespace_import, import_specifier,
42
+ * export_specifier, enum_declaration, type_alias_declaration,
43
+ * abstract_class_declaration, abstract_method_signature, method_signature,
44
+ * generator_function_declaration, optional_parameter, rest_parameter,
45
+ * required_parameter, public_field_definition, private_property_identifier,
46
+ * new_expression (constructor field), call_expression with (import) fn.
47
+ *
48
+ * Grammar version: tree-sitter-typescript pinned in cgraph/package.json.
49
+ *
50
+ * Exposes lazy `Parser` and `Query` singletons so callers don't pay tree-
51
+ * sitter init cost per file.
52
+ */
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.TYPESCRIPT_SCOPE_QUERY = void 0;
58
+ exports.getTsParser = getTsParser;
59
+ exports.getTsScopeQuery = getTsScopeQuery;
60
+ exports.tsCachedTreeMatchesGrammar = tsCachedTreeMatchesGrammar;
61
+ const tree_sitter_1 = __importDefault(require("tree-sitter"));
62
+ const tree_sitter_typescript_1 = __importDefault(require("tree-sitter-typescript"));
63
+ const ts_js_hoc_utils_js_1 = require("../../ts-js-hoc-utils.js");
64
+ // tree-sitter-typescript exports both `typescript` and `tsx` grammars on
65
+ // the default export. The package's `.d.ts` types the default export
66
+ // loosely; we narrow at the use site. The two grammars are NOT
67
+ // interchangeable: feeding a `.tsx` source to the `typescript` grammar
68
+ // mis-parses JSX as a sequence of less-than/greater-than expressions
69
+ // and silently drops every capture inside JSX elements. We therefore
70
+ // pick the grammar by file extension.
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ const TS_GRAMMAR = tree_sitter_typescript_1.default.typescript;
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ const TSX_GRAMMAR = tree_sitter_typescript_1.default.tsx;
75
+ /** True when the file should be parsed with the TSX grammar. The TSX
76
+ * grammar is a superset of TypeScript that adds JSX productions; it
77
+ * parses plain `.ts` files correctly too, but we keep `.ts` on the
78
+ * `typescript` grammar so the parser cache stays small and so any
79
+ * subtle TSX-only mis-parses don't bleed into non-TSX files. */
80
+ function isTsxFile(filePath) {
81
+ return filePath.endsWith('.tsx');
82
+ }
83
+ exports.TYPESCRIPT_SCOPE_QUERY = `
84
+ ;; Scopes — module / namespace / class-likes / function-likes
85
+ (program) @scope.module
86
+
87
+ (internal_module) @scope.namespace
88
+
89
+ (class_declaration) @scope.class
90
+ (abstract_class_declaration) @scope.class
91
+ (interface_declaration) @scope.class
92
+ (enum_declaration) @scope.class
93
+ ;; Class expressions: const Foo = class { ... } / const Foo = class Named { ... }.
94
+ ;; tree-sitter-typescript uses (class) (NOT class_expression) -- same node
95
+ ;; name as tree-sitter-javascript. The name field is optional (anonymous
96
+ ;; class expressions omit it); ScopeExtractor tolerates missing names.
97
+ (class) @scope.class
98
+
99
+ ;; \`@receiver-owner.this\` marks a scope that BINDS its own \`this\` rather
100
+ ;; than inheriting one (#2701) — see \`Scope.ownsReceivers\`. Every function
101
+ ;; form except \`arrow_function\` carries it: ECMA-262 gives an arrow
102
+ ;; \`[[ThisMode]] = lexical\` (no \`this\` in its environment record, so the
103
+ ;; lookup passes through), while every other form binds \`this\` at call time.
104
+ ;; \`method_definition\` is marked too and is unaffected — it also carries a
105
+ ;; synthesized \`this\` typeBinding, which the walk consults first.
106
+ ;; The marker rides on the same node as \`@scope.function\`; it is outside the
107
+ ;; \`@scope.\` namespace so \`anchorCaptureFor\` cannot mistake it for the anchor.
108
+ (function_declaration) @scope.function @receiver-owner.this
109
+ (generator_function_declaration) @scope.function @receiver-owner.this
110
+ (function_signature) @scope.function @receiver-owner.this
111
+ (method_definition) @scope.function @receiver-owner.this
112
+ (method_signature) @scope.function @receiver-owner.this
113
+ (abstract_method_signature) @scope.function @receiver-owner.this
114
+ (arrow_function) @scope.function
115
+ (function_expression) @scope.function @receiver-owner.this
116
+ ;; \`function*(){}\` as an EXPRESSION. Absent from this list before #2701, so it
117
+ ;; was not a scope at all and \`this\` inside one read as the enclosing method's.
118
+ (generator_function) @scope.function @receiver-owner.this
119
+
120
+ ;; Object literals (the { ... } value expression, NOT object_type or
121
+ ;; object_pattern) get their own scope boundary. Without it, a
122
+ ;; method_definition/property-arrow's auto-hoist (scope-extractor.ts)
123
+ ;; has nowhere to stop and leaks the name past the literal into whatever
124
+ ;; lexically encloses it -- e.g. 'export default { async fetch(req) {} }'
125
+ ;; would bind fetch at Module scope, letting an unrelated same-file
126
+ ;; fetch(...) call (the platform global) incorrectly resolve to it
127
+ ;; (#2545). Object (not Block or Class): object-literal members are
128
+ ;; reachable only via property access, never as bare identifiers -- not
129
+ ;; even by a SIBLING property's function body, unlike a real Block
130
+ ;; (if/for/while, where a nested closure legitimately sees a sibling
131
+ ;; let/const) or a Class (implicit-this sibling dispatch). Scope-chain
132
+ ;; walkers (scope-resolution/scope/walkers.ts) skip an Object scope's
133
+ ;; own bindings entirely while still treating it as a hoist boundary
134
+ ;; (#2551).
135
+ (object) @scope.object
136
+
137
+ ;; Statement blocks are BINDING scopes (#2699). ECMAScript gives every block its
138
+ ;; own environment record, so \`let\`/\`const\`/\`class\`/\`function\` declared in
139
+ ;; sibling blocks of one function are DIFFERENT bindings — without this the
140
+ ;; resolver sees both as function-level and a call in one branch resolves to
141
+ ;; both. \`tsBindingScopeFor\` already implements the other half of the rule:
142
+ ;; \`var\` hoists past blocks to the enclosing Function/Module, \`let\`/\`const\`
143
+ ;; take the innermost scope, which is now the block.
144
+ (statement_block) @scope.block
145
+
146
+
147
+ ;; Type aliases that contain an object_type are structurally class-like —
148
+ ;; they define a shape with named members. Emit @scope.class so the
149
+ ;; field-extractor's type-alias-with-object-type handling (in
150
+ ;; field-extractors/typescript.ts) finds a scope for its members.
151
+ (type_alias_declaration
152
+ value: (object_type)) @scope.class
153
+
154
+ ;; Declarations — types
155
+ ;; The type-parameter list is captured with \`?\` rather than as a second
156
+ ;; pattern: a separate rule would make a GENERIC declaration match twice, and
157
+ ;; both matches mint the same def id (filePath+range+type+name), so which one
158
+ ;; survived — the one carrying the parameters or the one without — would be
159
+ ;; decided by match order. An optional child keeps it at one match either way.
160
+ (class_declaration
161
+ name: (type_identifier) @declaration.name
162
+ type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.class
163
+
164
+ (abstract_class_declaration
165
+ name: (type_identifier) @declaration.name
166
+ type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.class
167
+
168
+ (interface_declaration
169
+ name: (type_identifier) @declaration.name
170
+ type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.interface
171
+
172
+ (enum_declaration
173
+ name: (identifier) @declaration.name) @declaration.enum
174
+
175
+ (type_alias_declaration
176
+ name: (type_identifier) @declaration.name) @declaration.type
177
+
178
+ (internal_module
179
+ name: (identifier) @declaration.name) @declaration.namespace
180
+
181
+ ;; Declarations — methods / functions / constructors
182
+ (function_declaration
183
+ name: (identifier) @declaration.name) @declaration.function
184
+
185
+ (generator_function_declaration
186
+ name: (identifier) @declaration.name) @declaration.function
187
+
188
+ ;; Function overload signatures (declaration-only; body in a separate
189
+ ;; function_declaration). Extractors dedup by (name, parameterTypes).
190
+ (function_signature
191
+ name: (identifier) @declaration.name) @declaration.function
192
+
193
+ ;; Arrow/function-expression assigned to a const/let/var — named by the
194
+ ;; variable_declarator. Covers \`const fn = () => {}\` and its export
195
+ ;; variant. Matches the legacy TYPESCRIPT_QUERIES pattern.
196
+ ;;
197
+ ;; The \`@declaration.function\` anchor sits on the INNER arrow_function /
198
+ ;; function_expression node (NOT the wrapping lexical_declaration), so
199
+ ;; \`anchor.range\` aligns with the corresponding \`@scope.function\` scope
200
+ ;; range. \`pass2AttachDeclarations\` then resolves \`innermost\` to the
201
+ ;; arrow's own scope (instead of the module scope) and the def is owned
202
+ ;; by the arrow itself. Without this alignment, calls inside the arrow
203
+ ;; body lose caller attribution: \`resolveCallerGraphId\` walks up past
204
+ ;; the empty arrow scope into the module scope and grabs whichever
205
+ ;; Function-like def appears first there — silently mis-attributing
206
+ ;; every nested call (Zustand stores, TanStack hooks, Promise-all/map,
207
+ ;; etc.). See \`typescript-hof-callbacks.test.ts\`.
208
+ (lexical_declaration
209
+ (variable_declarator
210
+ name: (identifier) @declaration.name
211
+ value: (arrow_function) @declaration.function))
212
+
213
+ (lexical_declaration
214
+ (variable_declarator
215
+ name: (identifier) @declaration.name
216
+ value: (function_expression) @declaration.function))
217
+
218
+ (variable_declaration
219
+ (variable_declarator
220
+ name: (identifier) @declaration.name
221
+ value: (arrow_function) @declaration.function))
222
+
223
+ (variable_declaration
224
+ (variable_declarator
225
+ name: (identifier) @declaration.name
226
+ value: (function_expression) @declaration.function))
227
+
228
+ ;; CJS property-assignment exports (#2723) — see the matching block in
229
+ ;; \`languages/javascript/query.ts\` for the rationale. Mirrored here because
230
+ ;; \`.ts\` files in a CommonJS package use the same form, and because the JS
231
+ ;; provider delegates several hooks to these TypeScript counterparts.
232
+ ;; One pattern per receiver form, RHS forms folded into an inner LEAF
233
+ ;; alternation — see the matching note in \`languages/javascript/query.ts\` for
234
+ ;; why that shape is safe under the tree-sitter 0.21.1 alternation hazard.
235
+ (assignment_expression
236
+ left: (member_expression
237
+ object: (identifier) @_cjs.receiver
238
+ property: (property_identifier) @declaration.name)
239
+ right: [
240
+ (arrow_function)
241
+ (function_expression)
242
+ (generator_function)
243
+ ] @declaration.function)
244
+
245
+ ;; \`this.X = fn\` at MODULE level of a CommonJS file — there \`this\` IS
246
+ ;; \`module.exports\`, so this declares an export. Pruned emit-side for ESM
247
+ ;; files (where top-level \`this\` is undefined) and for a \`this\` inside a
248
+ ;; function, which is an instance member rather than an export.
249
+ (assignment_expression
250
+ left: (member_expression
251
+ object: (this)
252
+ property: (property_identifier) @declaration.name)
253
+ right: [
254
+ (arrow_function)
255
+ (function_expression)
256
+ (generator_function)
257
+ ] @declaration.function)
258
+
259
+ (assignment_expression
260
+ left: (member_expression
261
+ object: (member_expression
262
+ object: (identifier) @_cjs.module
263
+ property: (property_identifier) @_cjs.exports)
264
+ property: (property_identifier) @declaration.name)
265
+ right: [
266
+ (arrow_function)
267
+ (function_expression)
268
+ (generator_function)
269
+ ] @declaration.function
270
+ (#eq? @_cjs.module "module")
271
+ (#eq? @_cjs.exports "exports"))
272
+
273
+ ;; Object-property arrows / function expressions named by their pair key:
274
+ ;; \`{ addItem: (item) => ..., removeItem: (item) => ... }\`. The legacy
275
+ ;; TYPESCRIPT_QUERIES emits the same shape; mirroring it here keeps
276
+ ;; scope-resolution declarations in sync (issue #1166). Computed keys
277
+ ;; (\`[K]: () => ...\`) intentionally fall through anonymous.
278
+ ;;
279
+ ;; Same anchor discipline as the \`lexical_declaration\` block above: the
280
+ ;; \`@declaration.function\` capture must sit on the INNER \`arrow_function\`
281
+ ;; / \`function_expression\` node — NOT the outer \`pair\`. The pair node
282
+ ;; starts at the property-key token, BEFORE the arrow's
283
+ ;; \`@scope.function\` range. \`pass2AttachDeclarations.atPosition(pair.startLine,
284
+ ;; pair.startCol)\` therefore resolves to the PARENT scope (the enclosing
285
+ ;; function-like, e.g. the \`(set) => ({...})\` callback in
286
+ ;; \`persist((set) => ({...}))\`), not the inner arrow's own scope.
287
+ ;;
288
+ ;; With the anchor on \`pair\`, ALL pair-function defs from the same object
289
+ ;; literal land in the same parent scope's \`ownedDefs\`. \`resolveCallerGraphId\`
290
+ ;; walking up from a call inside any of those arrows then matches the
291
+ ;; FIRST Function-like def via \`ownedDefs.find()\` — silently mis-attributing
292
+ ;; every call to the first sibling. Multi-action Zustand stores
293
+ ;; (\`{ addItem, removeItem, fetchData, … }\`) — the dominant 0%-capture
294
+ ;; pattern in the bug report — would land all calls on \`addItem\`.
295
+ ;;
296
+ ;; With the anchor on the inner \`arrow_function\` / \`function_expression\`,
297
+ ;; \`anchor.range\` matches the arrow's own \`@scope.function\` range; the
298
+ ;; def lands in the arrow scope's own \`ownedDefs\` and \`pass2AttachDeclarations\`'s
299
+ ;; auto-hoist (\`rangesEqual(anchor.range, innermost.range)\`) promotes
300
+ ;; the BINDING to the parent scope (so importers and lookups still find
301
+ ;; the name in the object's surrounding scope). Each pair-arrow becomes
302
+ ;; an independent caller anchor in the walk.
303
+ (pair
304
+ key: (property_identifier) @declaration.name
305
+ value: (arrow_function) @declaration.function)
306
+
307
+ (pair
308
+ key: (property_identifier) @declaration.name
309
+ value: (function_expression) @declaration.function)
310
+
311
+ (pair
312
+ key: (string (string_fragment) @declaration.name)
313
+ value: (arrow_function) @declaration.function)
314
+
315
+ (pair
316
+ key: (string (string_fragment) @declaration.name)
317
+ value: (function_expression) @declaration.function)
318
+
319
+ ;; HOC-wrapped variable declarations: \`const X = HOC((args) => { ... })\`.
320
+ ;;
321
+ ;; Covers the dominant React UI idiom (\`React.forwardRef\`, \`React.memo\`,
322
+ ;; bare \`forwardRef\` / \`memo\` / \`observer\`), Hook callbacks
323
+ ;; (\`useCallback\`, \`useMemo\`), and library-wrapper factories (\`debounce\`,
324
+ ;; \`throttle\`, user-defined \`withErrorBoundary\` / \`createHook\`, etc.).
325
+ ;; All produce the same AST shape:
326
+ ;;
327
+ ;; lexical_declaration
328
+ ;; variable_declarator
329
+ ;; name: identifier "X" ← we want this name
330
+ ;; value: call_expression
331
+ ;; function: identifier | member_expression ← any callee
332
+ ;; arguments: arguments
333
+ ;; arrow_function | function_expression ← the actual code
334
+ ;;
335
+ ;; The pre-fix \`tsExtractFunctionName\` only handled \`variable_declarator\`
336
+ ;; and \`pair\` parents, so HOC-wrapped arrows fell through anonymous. The
337
+ ;; registry-primary \`query.ts\` had no pattern for this shape either —
338
+ ;; \`const Button = forwardRef((p, r) => { ... })\` registered as a
339
+ ;; \`Variable\` with no \`Function\` def, and every call inside the arrow
340
+ ;; body lost caller attribution: \`resolveCallerGraphId\` walked up past
341
+ ;; the empty arrow scope to the module's File fallback. Sourcerer-fe alone
342
+ ;; has ~296 such declarations (57 forwardRef + 21 memo + 161 useCallback
343
+ ;; + 57 useMemo) — all invisible to \`gitnexus_context\` /
344
+ ;; \`gitnexus_impact\` for outgoing edges before this fix.
345
+ ;;
346
+ ;; Anchor discipline: same as the \`lexical_declaration\` / \`pair\` blocks
347
+ ;; above — on the INNER \`arrow_function\` / \`function_expression\`, NOT
348
+ ;; the outer \`call_expression\`. The arrow's range matches its own
349
+ ;; \`@scope.function\` range, so \`pass2AttachDeclarations.atPosition\`
350
+ ;; resolves \`innermost\` to the arrow's own scope and
351
+ ;; \`rangesEqual(anchor.range, innermost.range)\` triggers the auto-hoist
352
+ ;; that promotes the binding to the parent scope (where \`const X\`
353
+ ;; lives).
354
+ ;;
355
+ ;; #1876 — chained array-method form: \`const x = arr.find((y) => p(y))\`
356
+ ;; has the same syntactic shape and matches here too, naming the
357
+ ;; \`.find\` callback as \`x\`. Because \`x\` holds a value (the method
358
+ ;; result), not a callable, the spurious \`Function:x\` def is dropped
359
+ ;; emit-side in captures.ts: \`isArrayMethodCallbackArrow\` skips any
360
+ ;; \`@declaration.function\` whose enclosing call has a member-expression
361
+ ;; callee with a known Array-method property (\`ARRAY_CALLBACK_METHODS\`:
362
+ ;; \`map\` / \`filter\` / \`find\` / \`reduce\` / \`forEach\` / \`some\` /
363
+ ;; \`every\` / …). Only the \`@declaration.variable\` survives, so the
364
+ ;; binding is a single value def and calls inside the callback attribute
365
+ ;; to the enclosing scope rather than \`Function:x\`.
366
+ ;;
367
+ ;; Residual (intentional): a user-defined fluent-API method with a
368
+ ;; callback (\`qb.where(x => …)\`) is NOT in the blocklist and still
369
+ ;; classifies as \`Function\` — there's no clean syntactic line beyond
370
+ ;; the well-known Array surface, so the set is closed and easy to extend.
371
+ ;;
372
+ ;; Trade-off — multi-arrow arguments: \`const x = call(arrow1, arrow2)\`
373
+ ;; would emit TWO matches with the same name \`x\`. tree-sitter-query
374
+ ;; iterates all arrow_function direct children of \`arguments\`, so each
375
+ ;; emits its own \`(name=x, function=...)\` pair. \`pass2AttachDeclarations\`
376
+ ;; pushes both \`Function:x\` defs into the same arrow scopes (each in
377
+ ;; its own arrow's \`ownedDefs\`) and hoists both bindings to the parent.
378
+ ;; The downstream registry's qualified-name dedup then collapses them
379
+ ;; via \`(filePath, type, qualifiedName)\` — second wins. Acceptable;
380
+ ;; multi-arrow-callback APIs are rare (\`new Promise(executor)\` is the
381
+ ;; main one and takes a single executor).
382
+ ;;
383
+ ;; NOTE: Split into identifier vs member_expression patterns. Member
384
+ ;; expressions are filtered with a blocklist of common array methods
385
+ ;; (map, filter, reduce, etc.) to avoid false positives like
386
+ ;; \`const x = arr.map(a => ...)\` being classified as Function.
387
+ (lexical_declaration
388
+ (variable_declarator
389
+ name: (identifier) @declaration.name
390
+ value: (call_expression
391
+ function: (identifier)
392
+ arguments: (arguments
393
+ (arrow_function) @declaration.function))))
394
+
395
+ (lexical_declaration
396
+ (variable_declarator
397
+ name: (identifier) @declaration.name
398
+ value: (call_expression
399
+ function: (identifier)
400
+ arguments: (arguments
401
+ (function_expression) @declaration.function))))
402
+
403
+ (lexical_declaration
404
+ (variable_declarator
405
+ name: (identifier) @declaration.name
406
+ value: (call_expression
407
+ function: (member_expression
408
+ property: (property_identifier) @callee)
409
+ arguments: (arguments
410
+ (arrow_function) @declaration.function)))
411
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
412
+
413
+ (lexical_declaration
414
+ (variable_declarator
415
+ name: (identifier) @declaration.name
416
+ value: (call_expression
417
+ function: (member_expression
418
+ property: (property_identifier) @callee)
419
+ arguments: (arguments
420
+ (function_expression) @declaration.function)))
421
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
422
+
423
+ (variable_declaration
424
+ (variable_declarator
425
+ name: (identifier) @declaration.name
426
+ value: (call_expression
427
+ function: (identifier)
428
+ arguments: (arguments
429
+ (arrow_function) @declaration.function))))
430
+
431
+ (variable_declaration
432
+ (variable_declarator
433
+ name: (identifier) @declaration.name
434
+ value: (call_expression
435
+ function: (identifier)
436
+ arguments: (arguments
437
+ (function_expression) @declaration.function))))
438
+
439
+ (variable_declaration
440
+ (variable_declarator
441
+ name: (identifier) @declaration.name
442
+ value: (call_expression
443
+ function: (member_expression
444
+ property: (property_identifier) @callee)
445
+ arguments: (arguments
446
+ (arrow_function) @declaration.function)))
447
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
448
+
449
+ (variable_declaration
450
+ (variable_declarator
451
+ name: (identifier) @declaration.name
452
+ value: (call_expression
453
+ function: (member_expression
454
+ property: (property_identifier) @callee)
455
+ arguments: (arguments
456
+ (function_expression) @declaration.function)))
457
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
458
+
459
+ ;; HOC-wrapped default exports: \`export default defineEventHandler(async (e) => { ... })\`.
460
+ ;; The emit phase rewrites @declaration.name to a file-derived name so
461
+ ;; wrappers like \`defineEventHandler\` / \`React.memo\` do not collapse
462
+ ;; unrelated modules onto the same symbol name.
463
+ ((export_statement
464
+ value: (call_expression
465
+ function: (identifier) @hoc
466
+ arguments: (arguments
467
+ (arrow_function) @declaration.function)))
468
+ ${ts_js_hoc_utils_js_1.DEFAULT_EXPORT_IDENTIFIER_NOT_ANY_OF_PREDICATE})
469
+
470
+ ((export_statement
471
+ value: (call_expression
472
+ function: (identifier) @hoc
473
+ arguments: (arguments
474
+ (function_expression) @declaration.function)))
475
+ ${ts_js_hoc_utils_js_1.DEFAULT_EXPORT_IDENTIFIER_NOT_ANY_OF_PREDICATE})
476
+
477
+ ((export_statement
478
+ value: (call_expression
479
+ function: (member_expression
480
+ property: (property_identifier) @callee)
481
+ arguments: (arguments
482
+ (arrow_function) @declaration.function)))
483
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
484
+
485
+ ((export_statement
486
+ value: (call_expression
487
+ function: (member_expression
488
+ property: (property_identifier) @callee)
489
+ arguments: (arguments
490
+ (function_expression) @declaration.function)))
491
+ ${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
492
+
493
+ ;; Method definitions — regular + private (#field) methods.
494
+ ;; These match inside both class_declaration and class (class expression)
495
+ ;; bodies. The @scope.class for class expressions (see (class) above)
496
+ ;; ensures methods inside class expressions get the correct Class scope parent.
497
+ (method_definition
498
+ name: (property_identifier) @declaration.name) @declaration.method
499
+
500
+ (method_definition
501
+ name: (private_property_identifier) @declaration.name) @declaration.method
502
+
503
+ ;; Abstract method signatures in abstract classes.
504
+ (abstract_method_signature
505
+ name: (property_identifier) @declaration.name) @declaration.method
506
+
507
+ ;; Interface method signatures.
508
+ (method_signature
509
+ name: (property_identifier) @declaration.name) @declaration.method
510
+
511
+ ;; Declarations — class fields
512
+ (public_field_definition
513
+ name: (property_identifier) @declaration.name) @declaration.property
514
+
515
+ (public_field_definition
516
+ name: (private_property_identifier) @declaration.name) @declaration.property
517
+
518
+ ;; Enum members: enum Color { Red, Green = 1, Blue }.
519
+ ;; Bare members (no value): Red, Blue — property_identifier inside enum_body.
520
+ ;; Members with value: Green = 1 — enum_assignment with name field.
521
+ (enum_body
522
+ (property_identifier) @declaration.name) @declaration.property
523
+
524
+ (enum_assignment
525
+ name: (_) @declaration.name) @declaration.property
526
+
527
+ ;; Declarations — parameter properties: \`constructor(public name: string)\`.
528
+ ;; The accessibility_modifier presence distinguishes these from regular
529
+ ;; parameters. The identifier is also bound as a parameter in the
530
+ ;; constructor's scope via @type-binding.parameter below (dual binding).
531
+ (required_parameter
532
+ (accessibility_modifier)
533
+ pattern: (identifier) @declaration.name) @declaration.property
534
+
535
+ ;; Declarations — variables (let / const / var)
536
+ (lexical_declaration
537
+ (variable_declarator
538
+ name: (identifier) @declaration.name)) @declaration.variable
539
+
540
+ (variable_declaration
541
+ (variable_declarator
542
+ name: (identifier) @declaration.name)) @declaration.variable
543
+
544
+ ;; Imports — single anchor per statement; decomposer emits per-specifier markers.
545
+ (import_statement) @import.statement
546
+
547
+ ;; Re-exports: \`export { X } from './y'\` / \`export * from './y'\` /
548
+ ;; \`export * as ns from './y'\` / \`export type { X } from './y'\`.
549
+ ;; Only re-exports (those with a \`from\` clause) emit @import.statement;
550
+ ;; local \`export { X }\` (no source) is just visibility metadata, not an
551
+ ;; import. The decomposer filters by source presence.
552
+ (export_statement
553
+ source: (string)) @import.statement
554
+
555
+ ;; Dynamic imports: \`import('./m')\` / \`await import(x)\`. tree-sitter-
556
+ ;; typescript represents \`import\` as a named leaf node; the call_expression's
557
+ ;; function field points at it.
558
+ (call_expression
559
+ function: (import)) @import.dynamic
560
+
561
+ ;; Type bindings — parameter annotations: \`function f(u: User)\`
562
+ (required_parameter
563
+ pattern: (identifier) @type-binding.name
564
+ type: (type_annotation
565
+ (type_identifier) @type-binding.type)) @type-binding.parameter
566
+
567
+ (required_parameter
568
+ pattern: (identifier) @type-binding.name
569
+ type: (type_annotation
570
+ (generic_type) @type-binding.type)) @type-binding.parameter
571
+
572
+ (required_parameter
573
+ pattern: (identifier) @type-binding.name
574
+ type: (type_annotation
575
+ (predefined_type) @type-binding.type)) @type-binding.parameter
576
+
577
+ ;; Parameter with union / array / readonly wrappers: \`users: readonly User[]\`,
578
+ ;; \`x: User | null\`, \`xs: User[]\`. interpret strips wrappers to the
579
+ ;; discriminating type.
580
+ (required_parameter
581
+ pattern: (identifier) @type-binding.name
582
+ type: (type_annotation
583
+ (union_type) @type-binding.type)) @type-binding.parameter
584
+
585
+ (required_parameter
586
+ pattern: (identifier) @type-binding.name
587
+ type: (type_annotation
588
+ (array_type) @type-binding.type)) @type-binding.parameter
589
+
590
+ (required_parameter
591
+ pattern: (identifier) @type-binding.name
592
+ type: (type_annotation
593
+ (readonly_type) @type-binding.type)) @type-binding.parameter
594
+
595
+ ;; Type bindings — parameter properties:
596
+ ;; \`constructor(public address: Address)\` — each parameter with an
597
+ ;; accessibility modifier is ALSO a class field. We emit a second
598
+ ;; capture so \`tsBindingScopeFor\` can hoist these to the Class scope,
599
+ ;; enabling \`user.address\` field access resolution. The regular
600
+ ;; @type-binding.parameter above still fires for the constructor
601
+ ;; scope binding — both bindings coexist, which is correct.
602
+ (required_parameter
603
+ (accessibility_modifier)
604
+ pattern: (identifier) @type-binding.name
605
+ type: (type_annotation
606
+ (type_identifier) @type-binding.type)) @type-binding.parameter-property
607
+
608
+ (required_parameter
609
+ (accessibility_modifier)
610
+ pattern: (identifier) @type-binding.name
611
+ type: (type_annotation
612
+ (generic_type) @type-binding.type)) @type-binding.parameter-property
613
+
614
+ (required_parameter
615
+ (accessibility_modifier)
616
+ pattern: (identifier) @type-binding.name
617
+ type: (type_annotation
618
+ (predefined_type) @type-binding.type)) @type-binding.parameter-property
619
+
620
+ (required_parameter
621
+ (accessibility_modifier)
622
+ pattern: (identifier) @type-binding.name
623
+ type: (type_annotation
624
+ (union_type) @type-binding.type)) @type-binding.parameter-property
625
+
626
+ (required_parameter
627
+ (accessibility_modifier)
628
+ pattern: (identifier) @type-binding.name
629
+ type: (type_annotation
630
+ (array_type) @type-binding.type)) @type-binding.parameter-property
631
+
632
+ (required_parameter
633
+ (accessibility_modifier)
634
+ pattern: (identifier) @type-binding.name
635
+ type: (type_annotation
636
+ (readonly_type) @type-binding.type)) @type-binding.parameter-property
637
+
638
+ (optional_parameter
639
+ pattern: (identifier) @type-binding.name
640
+ type: (type_annotation
641
+ (type_identifier) @type-binding.type)) @type-binding.parameter
642
+
643
+ (optional_parameter
644
+ pattern: (identifier) @type-binding.name
645
+ type: (type_annotation
646
+ (generic_type) @type-binding.type)) @type-binding.parameter
647
+
648
+ (optional_parameter
649
+ pattern: (identifier) @type-binding.name
650
+ type: (type_annotation
651
+ (predefined_type) @type-binding.type)) @type-binding.parameter
652
+
653
+ (optional_parameter
654
+ pattern: (identifier) @type-binding.name
655
+ type: (type_annotation
656
+ (union_type) @type-binding.type)) @type-binding.parameter
657
+
658
+ (optional_parameter
659
+ pattern: (identifier) @type-binding.name
660
+ type: (type_annotation
661
+ (array_type) @type-binding.type)) @type-binding.parameter
662
+
663
+ (optional_parameter
664
+ pattern: (identifier) @type-binding.name
665
+ type: (type_annotation
666
+ (readonly_type) @type-binding.type)) @type-binding.parameter
667
+
668
+ ;; Type bindings — variable annotations: \`let u: User = ...\` / \`const u: User\`.
669
+ (variable_declarator
670
+ name: (identifier) @type-binding.name
671
+ type: (type_annotation
672
+ (type_identifier) @type-binding.type)) @type-binding.annotation
673
+
674
+ (variable_declarator
675
+ name: (identifier) @type-binding.name
676
+ type: (type_annotation
677
+ (generic_type) @type-binding.type)) @type-binding.annotation
678
+
679
+ (variable_declarator
680
+ name: (identifier) @type-binding.name
681
+ type: (type_annotation
682
+ (predefined_type) @type-binding.type)) @type-binding.annotation
683
+
684
+ ;; Union types like \`User | null\` / \`User | undefined\` — interpret's
685
+ ;; stripNullableUnion collapses to the discriminating arm.
686
+ (variable_declarator
687
+ name: (identifier) @type-binding.name
688
+ type: (type_annotation
689
+ (union_type) @type-binding.type)) @type-binding.annotation
690
+
691
+ ;; Array types: \`User[]\` / \`readonly User[]\` — stripArraySuffix unwraps.
692
+ (variable_declarator
693
+ name: (identifier) @type-binding.name
694
+ type: (type_annotation
695
+ (array_type) @type-binding.type)) @type-binding.annotation
696
+
697
+ (variable_declarator
698
+ name: (identifier) @type-binding.name
699
+ type: (type_annotation
700
+ (readonly_type) @type-binding.type)) @type-binding.annotation
701
+
702
+ ;; Type bindings — constructor-inferred: \`const u = new User()\`.
703
+ ;; The variable_declarator's \`value\` field carries the new_expression; its
704
+ ;; \`constructor\` field is the type identifier. Covers both typed (\`:User = \`)
705
+ ;; and untyped declarations — the annotation pattern above wins if both
706
+ ;; fire, via the scope-extractor's source-strength tie-break in
707
+ ;; pass4CollectTypeBindings.
708
+ (variable_declarator
709
+ name: (identifier) @type-binding.name
710
+ value: (new_expression
711
+ constructor: (identifier) @type-binding.type)) @type-binding.constructor
712
+
713
+ ;; Qualified constructor: \`const u = new models.User()\`. Captures the
714
+ ;; member_expression's text as the type — resolver's QualifiedNameIndex
715
+ ;; handles the dotted lookup.
716
+ (variable_declarator
717
+ name: (identifier) @type-binding.name
718
+ value: (new_expression
719
+ constructor: (member_expression) @type-binding.type)) @type-binding.constructor
720
+
721
+ ;; Cast-wrapped constructor: \`const u = new User() as any\` /
722
+ ;; \`const u = new User()!\`. The \`as T\` pattern also captures T itself
723
+ ;; via the assertion clause above, but T is usually a non-discriminating
724
+ ;; type (\`any\`, \`unknown\`) in these idioms; interpretTsTypeBinding
725
+ ;; drops those so the constructor-inferred binding survives.
726
+ (variable_declarator
727
+ name: (identifier) @type-binding.name
728
+ value: (as_expression
729
+ (new_expression
730
+ constructor: (identifier) @type-binding.type))) @type-binding.constructor
731
+
732
+ (variable_declarator
733
+ name: (identifier) @type-binding.name
734
+ value: (non_null_expression
735
+ (new_expression
736
+ constructor: (identifier) @type-binding.type))) @type-binding.constructor
737
+
738
+ ;; Double-cast: \`const u = new User() as unknown as any\` — as_expression
739
+ ;; nested inside as_expression, with new_expression at the core.
740
+ (variable_declarator
741
+ name: (identifier) @type-binding.name
742
+ value: (as_expression
743
+ (as_expression
744
+ (new_expression
745
+ constructor: (identifier) @type-binding.type)))) @type-binding.constructor
746
+
747
+ ;; Type bindings — call-result alias: \`const u = find()\`. Chain-follow
748
+ ;; walks \`find\`'s return type via propagateImportedReturnTypes for cross-
749
+ ;; file; same-file covered by explicit return annotations.
750
+ (variable_declarator
751
+ name: (identifier) @type-binding.name
752
+ value: (call_expression
753
+ function: (identifier) @type-binding.type)) @type-binding.alias
754
+
755
+ ;; Type bindings — member-call alias: \`const u = svc.getUser()\`. The
756
+ ;; callee is captured as a full \`member_expression\` text (\`svc.getUser\`)
757
+ ;; so compound-receiver can resolve the receiver object before looking up
758
+ ;; the method's hoisted return-type binding.
759
+ (variable_declarator
760
+ name: (identifier) @type-binding.name
761
+ value: (call_expression
762
+ function: (member_expression) @type-binding.type)) @type-binding.alias
763
+
764
+ ;; Type bindings — await chain: \`const u = await find()\` / \`await svc.m()\`.
765
+ (variable_declarator
766
+ name: (identifier) @type-binding.name
767
+ value: (await_expression
768
+ (call_expression
769
+ function: (identifier) @type-binding.type))) @type-binding.alias
770
+
771
+ (variable_declarator
772
+ name: (identifier) @type-binding.name
773
+ value: (await_expression
774
+ (call_expression
775
+ function: (member_expression) @type-binding.type))) @type-binding.alias
776
+
777
+ ;; Awaited generic calls re-associate: \`await fn<T>(...)\` parses as
778
+ ;; \`call_expression(function: await_expression(identifier), type_arguments, arguments)\`
779
+ ;; — NOT as an await_expression wrapping a call_expression. Handle both
780
+ ;; free and member forms so the chain-follow picks up the inner callee.
781
+ (variable_declarator
782
+ name: (identifier) @type-binding.name
783
+ value: (call_expression
784
+ function: (await_expression
785
+ (identifier) @type-binding.type))) @type-binding.alias
786
+
787
+ (variable_declarator
788
+ name: (identifier) @type-binding.name
789
+ value: (call_expression
790
+ function: (await_expression
791
+ (member_expression) @type-binding.type))) @type-binding.alias
792
+
793
+ ;; Type bindings — member-access alias: \`const addr = user.address\`.
794
+ ;; Full \`member_expression\` text feeds compound-receiver Case 3b.
795
+ (variable_declarator
796
+ name: (identifier) @type-binding.name
797
+ value: (member_expression) @type-binding.type) @type-binding.member-alias
798
+
799
+ ;; Type bindings — identifier alias: \`const alias = user\`. Chain-follow
800
+ ;; resolves alias via user's binding.
801
+ (variable_declarator
802
+ name: (identifier) @type-binding.name
803
+ value: (identifier) @type-binding.type) @type-binding.alias
804
+
805
+ ;; Type bindings — \`as\` assertion: \`const u = x as User\`. Prefer
806
+ ;; the assertion's target type over RHS inference. as_expression's right
807
+ ;; child is the target type (positional; no field name).
808
+ (variable_declarator
809
+ name: (identifier) @type-binding.name
810
+ value: (as_expression
811
+ (_)
812
+ (type_identifier) @type-binding.type)) @type-binding.assertion
813
+
814
+ (variable_declarator
815
+ name: (identifier) @type-binding.name
816
+ value: (as_expression
817
+ (_)
818
+ (generic_type) @type-binding.type)) @type-binding.assertion
819
+
820
+ ;; Type bindings — non-null assertion: \`const u = find()!\`. Unwrap to the
821
+ ;; underlying call's function identifier (matches the call-alias pattern).
822
+ (variable_declarator
823
+ name: (identifier) @type-binding.name
824
+ value: (non_null_expression
825
+ (call_expression
826
+ function: (identifier) @type-binding.type))) @type-binding.alias
827
+
828
+ ;; Type bindings — for-of element: \`for (const u of users)\` — bind u to
829
+ ;; users (chain-follow unwraps to element type via stripGeneric).
830
+ (for_in_statement
831
+ left: (identifier) @type-binding.name
832
+ right: (identifier) @type-binding.type) @type-binding.alias
833
+
834
+ ;; Type bindings — for-of call iterable: \`for (const u of getUsers())\`.
835
+ (for_in_statement
836
+ left: (identifier) @type-binding.name
837
+ right: (call_expression
838
+ function: (identifier) @type-binding.type)) @type-binding.alias
839
+
840
+ ;; Type bindings — for-of member-call iterable: \`for (const u of svc.getUsers())\`.
841
+ (for_in_statement
842
+ left: (identifier) @type-binding.name
843
+ right: (call_expression
844
+ function: (member_expression) @type-binding.type)) @type-binding.alias
845
+
846
+ ;; Type bindings — for-of member-access iterable: \`for (const u of this.users)\`.
847
+ ;; Bind u to \`users\` (the attribute name); chain-follow resolves users
848
+ ;; via the enclosing class's field binding.
849
+ (for_in_statement
850
+ left: (identifier) @type-binding.name
851
+ right: (member_expression
852
+ property: (property_identifier) @type-binding.type)) @type-binding.alias
853
+
854
+ ;; Type bindings — class field annotation: \`private city: City\`.
855
+ (public_field_definition
856
+ name: (property_identifier) @type-binding.name
857
+ type: (type_annotation
858
+ (type_identifier) @type-binding.type)) @type-binding.annotation
859
+
860
+ (public_field_definition
861
+ name: (property_identifier) @type-binding.name
862
+ type: (type_annotation
863
+ (generic_type) @type-binding.type)) @type-binding.annotation
864
+
865
+ (public_field_definition
866
+ name: (property_identifier) @type-binding.name
867
+ type: (type_annotation
868
+ (predefined_type) @type-binding.type)) @type-binding.annotation
869
+
870
+ ;; Class field with union / array / readonly wrappers:
871
+ ;; \`private users: User[]\`, \`private repos: readonly Repo[]\`,
872
+ ;; \`private x: City | null\`. interpret strips wrappers to the
873
+ ;; discriminating type so chain-follow unwraps to the element.
874
+ (public_field_definition
875
+ name: (property_identifier) @type-binding.name
876
+ type: (type_annotation
877
+ (union_type) @type-binding.type)) @type-binding.annotation
878
+
879
+ (public_field_definition
880
+ name: (property_identifier) @type-binding.name
881
+ type: (type_annotation
882
+ (array_type) @type-binding.type)) @type-binding.annotation
883
+
884
+ (public_field_definition
885
+ name: (property_identifier) @type-binding.name
886
+ type: (type_annotation
887
+ (readonly_type) @type-binding.type)) @type-binding.annotation
888
+
889
+ ;; Private class field annotation: \`#city: City\`.
890
+ (public_field_definition
891
+ name: (private_property_identifier) @type-binding.name
892
+ type: (type_annotation
893
+ (type_identifier) @type-binding.type)) @type-binding.annotation
894
+
895
+ ;; Type bindings — class field constructor-inferred: \`private p = new Outer()\`.
896
+ ;; The annotation patterns above cover a field that DECLARES its type; a field
897
+ ;; whose type must be inferred from its initializer matched nothing, so it had
898
+ ;; no typeBinding, so \`this.p\` could not be typed and the receiver fold declined
899
+ ;; the whole chain — losing even the first, ordinary named link (#2807).
900
+ ;;
901
+ ;; Anchored on \`public_field_definition\` exactly like the annotation patterns,
902
+ ;; so the binding lands in the same (class body) scope with no bindingScopeFor
903
+ ;; override. \`annotation\` outranks \`constructor-inferred\` in
904
+ ;; typeBindingStrength, so \`private p: Outer = new Outer()\` still resolves
905
+ ;; through its annotation regardless of which pattern matches first.
906
+ ;;
907
+ ;; Kotlin and Swift express both a local and a stored property with ONE grammar
908
+ ;; node (property_declaration) and so needed no separate field pattern; the
909
+ ;; TypeScript grammar splits them (variable_declarator vs
910
+ ;; public_field_definition), which is why only the local form was ever covered.
911
+ (public_field_definition
912
+ name: (property_identifier) @type-binding.name
913
+ value: (new_expression
914
+ constructor: (identifier) @type-binding.type)) @type-binding.constructor
915
+
916
+ ;; Qualified: \`private p = new models.Outer()\` — mirrors the local form above;
917
+ ;; the member_expression's text is resolved via QualifiedNameIndex.
918
+ (public_field_definition
919
+ name: (property_identifier) @type-binding.name
920
+ value: (new_expression
921
+ constructor: (member_expression) @type-binding.type)) @type-binding.constructor
922
+
923
+ ;; Private-name field: \`#p = new Outer()\`.
924
+ (public_field_definition
925
+ name: (private_property_identifier) @type-binding.name
926
+ value: (new_expression
927
+ constructor: (identifier) @type-binding.type)) @type-binding.constructor
928
+
929
+ ;; Type bindings — method return type: \`save(): User { … }\` / \`function f(): User { … }\`.
930
+ ;; Function/method return-type is the type_annotation that is a direct
931
+ ;; child of the function node (not the parameter's annotation). Anchor on
932
+ ;; the function node so bindingScopeFor can hoist if the language requests
933
+ ;; (TS keeps it on the method scope; we emit here and let the resolver
934
+ ;; decide via hoistTypeBindingsToModule).
935
+ ;;
936
+ ;; Wrapper forms covered: plain \`User\`, generic \`Promise<User>\`,
937
+ ;; array \`User[]\`, readonly \`readonly User[]\`, union \`User | null\`.
938
+ ;; \`stripArraySuffix\` / \`stripReadonly\` / \`stripNullableUnion\` in
939
+ ;; interpret reduce these to the discriminating element so chain-follow
940
+ ;; can unwrap iterators returned from \`getUsers(): User[]\`.
941
+ (function_declaration
942
+ name: (identifier) @type-binding.name
943
+ return_type: (type_annotation
944
+ (type_identifier) @type-binding.type)) @type-binding.return
945
+
946
+ (function_declaration
947
+ name: (identifier) @type-binding.name
948
+ return_type: (type_annotation
949
+ (generic_type) @type-binding.type)) @type-binding.return
950
+
951
+ (function_declaration
952
+ name: (identifier) @type-binding.name
953
+ return_type: (type_annotation
954
+ (array_type) @type-binding.type)) @type-binding.return
955
+
956
+ (function_declaration
957
+ name: (identifier) @type-binding.name
958
+ return_type: (type_annotation
959
+ (readonly_type) @type-binding.type)) @type-binding.return
960
+
961
+ (function_declaration
962
+ name: (identifier) @type-binding.name
963
+ return_type: (type_annotation
964
+ (union_type) @type-binding.type)) @type-binding.return
965
+
966
+ (function_signature
967
+ name: (identifier) @type-binding.name
968
+ return_type: (type_annotation
969
+ (type_identifier) @type-binding.type)) @type-binding.return
970
+
971
+ (function_signature
972
+ name: (identifier) @type-binding.name
973
+ return_type: (type_annotation
974
+ (generic_type) @type-binding.type)) @type-binding.return
975
+
976
+ (function_signature
977
+ name: (identifier) @type-binding.name
978
+ return_type: (type_annotation
979
+ (array_type) @type-binding.type)) @type-binding.return
980
+
981
+ (function_signature
982
+ name: (identifier) @type-binding.name
983
+ return_type: (type_annotation
984
+ (readonly_type) @type-binding.type)) @type-binding.return
985
+
986
+ (function_signature
987
+ name: (identifier) @type-binding.name
988
+ return_type: (type_annotation
989
+ (union_type) @type-binding.type)) @type-binding.return
990
+
991
+ (method_definition
992
+ name: (property_identifier) @type-binding.name
993
+ return_type: (type_annotation
994
+ (type_identifier) @type-binding.type)) @type-binding.return
995
+
996
+ (method_definition
997
+ name: (property_identifier) @type-binding.name
998
+ return_type: (type_annotation
999
+ (generic_type) @type-binding.type)) @type-binding.return
1000
+
1001
+ (method_definition
1002
+ name: (property_identifier) @type-binding.name
1003
+ return_type: (type_annotation
1004
+ (array_type) @type-binding.type)) @type-binding.return
1005
+
1006
+ (method_definition
1007
+ name: (property_identifier) @type-binding.name
1008
+ return_type: (type_annotation
1009
+ (readonly_type) @type-binding.type)) @type-binding.return
1010
+
1011
+ (method_definition
1012
+ name: (property_identifier) @type-binding.name
1013
+ return_type: (type_annotation
1014
+ (union_type) @type-binding.type)) @type-binding.return
1015
+
1016
+ (method_signature
1017
+ name: (property_identifier) @type-binding.name
1018
+ return_type: (type_annotation
1019
+ (type_identifier) @type-binding.type)) @type-binding.return
1020
+
1021
+ (method_signature
1022
+ name: (property_identifier) @type-binding.name
1023
+ return_type: (type_annotation
1024
+ (generic_type) @type-binding.type)) @type-binding.return
1025
+
1026
+ (method_signature
1027
+ name: (property_identifier) @type-binding.name
1028
+ return_type: (type_annotation
1029
+ (array_type) @type-binding.type)) @type-binding.return
1030
+
1031
+ (method_signature
1032
+ name: (property_identifier) @type-binding.name
1033
+ return_type: (type_annotation
1034
+ (readonly_type) @type-binding.type)) @type-binding.return
1035
+
1036
+ (method_signature
1037
+ name: (property_identifier) @type-binding.name
1038
+ return_type: (type_annotation
1039
+ (union_type) @type-binding.type)) @type-binding.return
1040
+
1041
+ (abstract_method_signature
1042
+ name: (property_identifier) @type-binding.name
1043
+ return_type: (type_annotation
1044
+ (type_identifier) @type-binding.type)) @type-binding.return
1045
+
1046
+ (abstract_method_signature
1047
+ name: (property_identifier) @type-binding.name
1048
+ return_type: (type_annotation
1049
+ (generic_type) @type-binding.type)) @type-binding.return
1050
+
1051
+ ;; Type bindings — assignment rebind: \`u = new User()\` (no \`const\`).
1052
+ (assignment_expression
1053
+ left: (identifier) @type-binding.name
1054
+ right: (new_expression
1055
+ constructor: (identifier) @type-binding.type)) @type-binding.constructor
1056
+
1057
+ ;; Type bindings — field assigned through \`this\`: \`this.p = new Outer()\` on a
1058
+ ;; field that declares no type (#2807). The rebind pattern above only matches a
1059
+ ;; bare identifier LHS, so an unannotated field assigned in the constructor had
1060
+ ;; no typeBinding at all. (An ANNOTATED field does not need this — its
1061
+ ;; annotation already types it, which is why \`private p: Outer;\` + the same
1062
+ ;; assignment always resolved.)
1063
+ ;;
1064
+ ;; The nesting is the whole safety property. \`this.x = new Y()\` is a legal
1065
+ ;; statement ANYWHERE, and the binding it produces is hoisted onto the nearest
1066
+ ;; enclosing Class — so a context-free version of this pattern typed a class's
1067
+ ;; field from an assignment whose \`this\` was some OTHER object, overwriting the
1068
+ ;; field's real type (pass4CollectTypeBindings resolves a same-source tie in
1069
+ ;; favour of the LATER match). Requiring the chain
1070
+ ;; \`class_body → method_definition → statement_block → expression_statement\`
1071
+ ;; makes the marker fire only where \`this\` provably IS an instance of the class
1072
+ ;; the binding lands on. It rejects, in order of how easily each was hit:
1073
+ ;; a non-arrow callback inside a method (\`function () { this.x = new Y(); }\` —
1074
+ ;; \`this\` is the call's receiver), an object-literal method (also a
1075
+ ;; \`method_definition\`, but under \`object\`, not \`class_body\`), and module top
1076
+ ;; level (no enclosing Class at all, where the hoist used to fall back to the
1077
+ ;; innermost scope and could overwrite a module local of the same name).
1078
+ ;;
1079
+ ;; This mirrors \`synthesizeConstructorFieldBindings\` in
1080
+ ;; \`languages/javascript/captures.ts\`, which walks only \`method_definition\`
1081
+ ;; bodies and only their DIRECT \`expression_statement\` children — the two
1082
+ ;; languages must not read the same source differently. TypeScript accepts any
1083
+ ;; method rather than only \`constructor\` (a later \`setUp()\` assignment types
1084
+ ;; the field just as well), which is the one intended divergence.
1085
+ ;;
1086
+ ;; Two shapes are deliberately NOT matched, both erring toward no binding:
1087
+ ;; an assignment nested in a block (\`if (…) { this.p = new Outer(); }\`) and one
1088
+ ;; inside an arrow (\`() => { this.p = new Outer(); }\`, where \`this\` IS the
1089
+ ;; instance). Both are only ever a MISSING binding, never a wrong one, and JS
1090
+ ;; declines them too.
1091
+ ;;
1092
+ ;; \`@type-binding.this-field\` is a MARKER, not the anchor: it sits on the narrow
1093
+ ;; \`(this)\` node, so anchorCaptureFor's broadest-range rule keeps the whole
1094
+ ;; assignment_expression (@type-binding.constructor) as the anchor and the
1095
+ ;; source stays \`constructor-inferred\`. tsBindingScopeFor reads the marker to
1096
+ ;; hoist the binding onto the enclosing Class scope — without that hoist the
1097
+ ;; binding would land on the method's own Function scope, where
1098
+ ;; typeOfMemberOnClass never looks. The marker must stay specific to THIS
1099
+ ;; pattern: hoisting every constructor-inferred binding would move method-local
1100
+ ;; \`const o = new Outer()\` out of its own scope.
1101
+ ;;
1102
+ ;; One constraint the grammar cannot carry: \`static\` is an ANONYMOUS token on
1103
+ ;; \`method_definition\` with no field name, and tree-sitter patterns cannot
1104
+ ;; negate one. \`this\` in a static method is the class object, so that last
1105
+ ;; wrong receiver is dropped by \`emitTsScopeCaptures\` instead.
1106
+ (class_body
1107
+ (method_definition
1108
+ body: (statement_block
1109
+ (expression_statement
1110
+ (assignment_expression
1111
+ left: (member_expression
1112
+ object: (this) @type-binding.this-field
1113
+ property: (property_identifier) @type-binding.name)
1114
+ right: (new_expression
1115
+ constructor: (identifier) @type-binding.type)) @type-binding.constructor))))
1116
+
1117
+ ;; Qualified form: \`this.p = new models.Outer()\`.
1118
+ (class_body
1119
+ (method_definition
1120
+ body: (statement_block
1121
+ (expression_statement
1122
+ (assignment_expression
1123
+ left: (member_expression
1124
+ object: (this) @type-binding.this-field
1125
+ property: (property_identifier) @type-binding.name)
1126
+ right: (new_expression
1127
+ constructor: (member_expression) @type-binding.type)) @type-binding.constructor))))
1128
+
1129
+ (assignment_expression
1130
+ left: (identifier) @type-binding.name
1131
+ right: (call_expression
1132
+ function: (identifier) @type-binding.type)) @type-binding.alias
1133
+
1134
+ (assignment_expression
1135
+ left: (identifier) @type-binding.name
1136
+ right: (identifier) @type-binding.type) @type-binding.alias
1137
+
1138
+ ;; References — free calls: \`fn(args)\`. Exclude the dynamic-import form,
1139
+ ;; which would otherwise double-classify as a call to a built-in \`import\`.
1140
+ ;; tree-sitter can't negate (import) with #not-eq?; the captures.ts layer
1141
+ ;; filters dynamic-imports BEFORE the free-call is consumed.
1142
+ (call_expression
1143
+ function: (identifier) @reference.name) @reference.call.free
1144
+
1145
+ ;; Awaited free call with generics: \`await fn<T>(...)\` — re-associated
1146
+ ;; by tree-sitter as \`call_expression(function: await_expression(identifier))\`.
1147
+ (call_expression
1148
+ function: (await_expression
1149
+ (identifier) @reference.name)) @reference.call.free
1150
+
1151
+ ;; References — member calls: \`obj.method()\` (includes optional chain).
1152
+ ;; The (_) wildcard matches any named receiver including \`this\` /
1153
+ ;; \`super\` (both are named nodes in tree-sitter-typescript, unlike C#'s
1154
+ ;; anonymous tokens).
1155
+ (call_expression
1156
+ function: (member_expression
1157
+ object: (_) @reference.receiver
1158
+ property: (property_identifier) @reference.name)) @reference.call.member
1159
+
1160
+ ;; Awaited member call with generics: \`await svc.m<T>(...)\` — re-associated
1161
+ ;; as \`call_expression(function: await_expression(member_expression))\`.
1162
+ (call_expression
1163
+ function: (await_expression
1164
+ (member_expression
1165
+ object: (_) @reference.receiver
1166
+ property: (property_identifier) @reference.name))) @reference.call.member
1167
+
1168
+ ;; References — constructor calls: \`new User()\` / \`new ns.User()\`.
1169
+ (new_expression
1170
+ constructor: (identifier) @reference.name) @reference.call.constructor
1171
+
1172
+ (new_expression
1173
+ constructor: (member_expression
1174
+ property: (property_identifier) @reference.name) @reference.call.constructor.qualified) @reference.call.constructor
1175
+
1176
+ ;; References — write access: \`obj.field = value\`.
1177
+ (assignment_expression
1178
+ left: (member_expression
1179
+ object: (_) @reference.receiver
1180
+ property: (property_identifier) @reference.name)) @reference.write.member
1181
+
1182
+ (augmented_assignment_expression
1183
+ left: (member_expression
1184
+ object: (_) @reference.receiver
1185
+ property: (property_identifier) @reference.name)) @reference.write.member
1186
+
1187
+ ;; References — read access: \`obj.field\` used in a read context.
1188
+ ;; Fires on EVERY member_expression; \`emitTsScopeCaptures\` filters out
1189
+ ;; contexts that shouldn't emit a read ACCESSES edge (LHS of assignment,
1190
+ ;; the \`function:\` of a call_expression, property_identifier inside a
1191
+ ;; computed member name, etc.). Keeping the filter on the emit side lets
1192
+ ;; tree-sitter's pattern stay simple and we don't replicate AST-context
1193
+ ;; predicates in the query itself.
1194
+ (member_expression
1195
+ object: (_) @reference.receiver
1196
+ property: (property_identifier) @reference.name) @reference.read.member
1197
+
1198
+ ;; References — value position (#2437): a function identifier assigned as an
1199
+ ;; object-literal property value (\`{ emitScopeCaptures: emitCppScopeCaptures }\`)
1200
+ ;; or shorthand (\`{ emitHook }\`). Resolution keeps only callable targets
1201
+ ;; (MethodRegistry), so plain-value pairs (\`{ port: DEFAULT_PORT }\`) emit
1202
+ ;; nothing; the emitted edge is a reference-class USES (registration ≠
1203
+ ;; invocation). \`@reference.property-key\` records the key so the
1204
+ ;; property-dispatch pass can synthesize CALLS at \`x.<key>()\` sites; for
1205
+ ;; shorthand the key IS the name (both tags on one node). Two separate
1206
+ ;; patterns — never combined in \`[...]\` (tree-sitter 0.21 drops alternation
1207
+ ;; siblings around predicates). Destructuring shorthand is a different node
1208
+ ;; (\`shorthand_property_identifier_pattern\`), so \`const { a } = o\` cannot
1209
+ ;; match; string/computed keys carry no \`property_identifier\` and register
1210
+ ;; without a dispatch key.
1211
+ (pair
1212
+ key: (property_identifier) @reference.property-key
1213
+ value: (identifier) @reference.name @reference.value-ref)
1214
+
1215
+ (object
1216
+ (shorthand_property_identifier) @reference.name @reference.property-key @reference.value-ref)
1217
+ `;
1218
+ /**
1219
+ * JSX-only query suffix. Appended to the base query when compiling
1220
+ * against the TSX grammar; NOT compiled against the plain TS grammar
1221
+ * (which has no \`jsx_*\` node types and would reject these patterns).
1222
+ *
1223
+ * Why JSX as a CALLS edge: \`<Foo />\` is syntactic sugar for \`Foo(props)\`
1224
+ * and the React component is invoked by the renderer, so for blast-radius
1225
+ * (\`gitnexus_impact("Badge", direction: "upstream")\`) and call-graph
1226
+ * (\`gitnexus_context("Foo")\`) purposes JSX usage IS a call. Routing
1227
+ * through \`@reference.call.free\` / \`@reference.call.member\` makes the
1228
+ * downstream caller-walk + edge-emission paths handle JSX uniformly with
1229
+ * ordinary call expressions — no new edge type, no schema changes.
1230
+ *
1231
+ * Identifier-only JSX is filtered to PascalCase via \`(#match? ... "^[A-Z]")\`
1232
+ * so \`<div>\`, \`<span>\`, \`<button>\` and other native HTML elements (which
1233
+ * by JSX convention start lowercase) don't emit edges to nonexistent
1234
+ * "div" / "span" symbols. Member-form JSX (\`<Foo.Bar />\`) is always a
1235
+ * component (HTML element names can't contain dots), so no predicate
1236
+ * filter is applied there.
1237
+ *
1238
+ * Both \`jsx_self_closing_element\` (\`<Foo />\`) and \`jsx_opening_element\`
1239
+ * (\`<Foo>...</Foo>\`) emit; the closing tag is intentionally NOT captured —
1240
+ * each JSX element should emit exactly one CALLS edge per use site.
1241
+ */
1242
+ const TSX_JSX_QUERY_SUFFIX = `
1243
+ ;; <Foo />
1244
+ ((jsx_self_closing_element
1245
+ name: (identifier) @reference.name) @reference.call.free
1246
+ (#match? @reference.name "^[A-Z]"))
1247
+
1248
+ ;; <Foo> ... </Foo> (paired form — match the opening tag only)
1249
+ ((jsx_opening_element
1250
+ name: (identifier) @reference.name) @reference.call.free
1251
+ (#match? @reference.name "^[A-Z]"))
1252
+
1253
+ ;; <Foo.Bar /> / <Container.Section.Title /> — namespaced JSX
1254
+ (jsx_self_closing_element
1255
+ name: (member_expression
1256
+ object: (_) @reference.receiver
1257
+ property: (property_identifier) @reference.name)) @reference.call.member
1258
+
1259
+ (jsx_opening_element
1260
+ name: (member_expression
1261
+ object: (_) @reference.receiver
1262
+ property: (property_identifier) @reference.name)) @reference.call.member
1263
+ `;
1264
+ let _tsParser = null;
1265
+ let _tsxParser = null;
1266
+ let _tsQuery = null;
1267
+ let _tsxQuery = null;
1268
+ /**
1269
+ * Return the right tree-sitter parser for `filePath` (or the TS parser
1270
+ * when no path is given — the legacy callsite shape).
1271
+ */
1272
+ function getTsParser(filePath) {
1273
+ if (filePath !== undefined && isTsxFile(filePath)) {
1274
+ if (_tsxParser === null) {
1275
+ _tsxParser = new tree_sitter_1.default();
1276
+ _tsxParser.setLanguage(TSX_GRAMMAR);
1277
+ }
1278
+ return _tsxParser;
1279
+ }
1280
+ if (_tsParser === null) {
1281
+ _tsParser = new tree_sitter_1.default();
1282
+ _tsParser.setLanguage(TS_GRAMMAR);
1283
+ }
1284
+ return _tsParser;
1285
+ }
1286
+ /**
1287
+ * Return the right tree-sitter Query (compiled against the same grammar
1288
+ * as the parser). A Query bound to the `typescript` grammar can NOT be
1289
+ * executed against a Tree produced by the `tsx` grammar — tree-sitter
1290
+ * matches by node-type id, and the two grammars have separate id
1291
+ * spaces.
1292
+ *
1293
+ * The TSX query is compiled with the JSX-as-call patterns appended.
1294
+ * Those patterns reference `jsx_self_closing_element` /
1295
+ * `jsx_opening_element` which exist only in the TSX grammar — embedding
1296
+ * them in the plain TS query would throw `Query.InvalidNodeType` at
1297
+ * compile time (and even if it didn't, the patterns would never fire on
1298
+ * `.ts` source).
1299
+ */
1300
+ function getTsScopeQuery(filePath) {
1301
+ if (filePath !== undefined && isTsxFile(filePath)) {
1302
+ if (_tsxQuery === null) {
1303
+ _tsxQuery = new tree_sitter_1.default.Query(TSX_GRAMMAR, exports.TYPESCRIPT_SCOPE_QUERY + TSX_JSX_QUERY_SUFFIX);
1304
+ }
1305
+ return _tsxQuery;
1306
+ }
1307
+ if (_tsQuery === null) {
1308
+ _tsQuery = new tree_sitter_1.default.Query(TS_GRAMMAR, exports.TYPESCRIPT_SCOPE_QUERY);
1309
+ }
1310
+ return _tsQuery;
1311
+ }
1312
+ /**
1313
+ * Validate that a cached `Tree` was produced by the grammar matching
1314
+ * `filePath` (TSX vs TypeScript). The runtime tree-sitter `Tree` exposes
1315
+ * `getLanguage()` (returning the grammar object the parser was bound
1316
+ * to); the .d.ts is incomplete, so we reach via a cast. Identity
1317
+ * comparison against `TSX_GRAMMAR` / `TS_GRAMMAR` is exact: the same
1318
+ * module instance produces both. If `getLanguage` is unavailable for
1319
+ * any reason, return true to keep behavior backwards-compatible (the
1320
+ * original code never validated grammar at all).
1321
+ */
1322
+ function tsCachedTreeMatchesGrammar(tree, filePath) {
1323
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1324
+ const lang = tree?.getLanguage?.();
1325
+ if (lang === undefined || lang === null)
1326
+ return true;
1327
+ return isTsxFile(filePath) ? lang === TSX_GRAMMAR : lang === TS_GRAMMAR;
1328
+ }