cgraphx 2.0.2 → 2.0.6

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 (754) hide show
  1. package/dist/.claude-template/FLOW-MAP.md +13 -3
  2. package/dist/.claude-template/agents/task-history.md +186 -0
  3. package/dist/.claude-template/commands/end.md +1 -0
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
  6. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
  7. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
  8. package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
  9. package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
  10. package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
  11. package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
  12. package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
  13. package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
  14. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
  15. package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
  16. package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
  17. package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
  18. package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
  19. package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
  20. package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
  21. package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
  22. package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
  23. package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
  24. package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
  25. package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
  26. package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
  27. package/dist/core/code/engine/cli/analyze-config.js +320 -0
  28. package/dist/core/code/engine/cli/analyze.js +1086 -0
  29. package/dist/core/code/engine/cli/cli-message.js +83 -0
  30. package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
  31. package/dist/core/code/engine/cli/embedding-dims.js +43 -0
  32. package/dist/core/code/engine/cli/format-elapsed.js +12 -0
  33. package/dist/core/code/engine/cli/help-i18n.js +144 -0
  34. package/dist/core/code/engine/cli/i18n/en.js +110 -0
  35. package/dist/core/code/engine/cli/i18n/index.js +47 -0
  36. package/dist/core/code/engine/cli/i18n/resources.js +9 -0
  37. package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
  38. package/dist/core/code/engine/cli/lazy-action.js +67 -0
  39. package/dist/core/code/engine/cli/optional-grammars.js +136 -0
  40. package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
  41. package/dist/core/code/engine/cli/status.js +156 -0
  42. package/dist/core/code/engine/cli/tool.js +384 -0
  43. package/dist/core/code/engine/config/ignore-service.js +511 -0
  44. package/dist/core/code/engine/config/supported-languages.js +17 -0
  45. package/dist/core/code/engine/core/analysis-features.js +64 -0
  46. package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
  47. package/dist/core/code/engine/core/git-staleness.js +180 -0
  48. package/dist/core/code/engine/core/graph/graph.js +180 -0
  49. package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
  50. package/dist/core/code/engine/core/graph/types.js +2 -0
  51. package/dist/core/code/engine/core/index-freshness.js +12 -0
  52. package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
  53. package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
  54. package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
  55. package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
  56. package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
  57. package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
  58. package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
  59. package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
  60. package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
  61. package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
  62. package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
  63. package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
  64. package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
  65. package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
  66. package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
  67. package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
  68. package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
  69. package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
  70. package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
  71. package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
  72. package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
  73. package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
  74. package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
  75. package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
  76. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
  77. package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
  78. package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
  79. package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
  80. package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
  81. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
  82. package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
  83. package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
  84. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
  85. package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
  86. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
  87. package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
  88. package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
  89. package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
  90. package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
  91. package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
  92. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
  93. package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
  94. package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
  95. package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
  96. package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
  97. package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
  98. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
  99. package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
  100. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
  101. package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
  102. package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
  103. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
  104. package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
  105. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
  106. package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
  107. package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
  108. package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
  109. package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
  110. package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
  111. package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
  112. package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
  113. package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
  114. package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
  115. package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
  116. package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
  117. package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
  118. package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
  119. package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
  120. package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
  121. package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
  122. package/dist/core/code/engine/core/ingestion/constants.js +26 -0
  123. package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
  124. package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
  125. package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
  126. package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
  127. package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
  128. package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
  129. package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
  130. package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
  131. package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
  132. package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
  133. package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
  134. package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
  135. package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
  136. package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
  137. package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
  138. package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
  139. package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
  140. package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
  141. package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
  142. package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
  143. package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
  144. package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
  145. package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
  146. package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
  147. package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
  148. package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
  149. package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
  150. package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
  151. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
  152. package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
  153. package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
  154. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
  155. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
  156. package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
  157. package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
  158. package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
  159. package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
  160. package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
  161. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
  162. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
  163. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
  164. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
  165. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
  166. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
  167. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
  168. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
  169. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
  170. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
  171. package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
  172. package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
  173. package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
  174. package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
  175. package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
  176. package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
  177. package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
  178. package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
  179. package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
  180. package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
  181. package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
  182. package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
  183. package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
  184. package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
  185. package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
  186. package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
  187. package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
  188. package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
  189. package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
  190. package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
  191. package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
  192. package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
  193. package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
  194. package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
  195. package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
  196. package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
  197. package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
  198. package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
  199. package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
  200. package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
  201. package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
  202. package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
  203. package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
  204. package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
  205. package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
  206. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
  207. package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
  208. package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
  209. package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
  210. package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
  211. package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
  212. package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
  213. package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
  214. package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
  215. package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
  216. package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
  217. package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
  218. package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
  219. package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
  220. package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
  221. package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
  222. package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
  223. package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
  224. package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
  225. package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
  226. package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
  227. package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
  228. package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
  229. package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
  230. package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
  231. package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
  232. package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
  233. package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
  234. package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
  235. package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
  236. package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
  237. package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
  238. package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
  239. package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
  240. package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
  241. package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
  242. package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
  243. package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
  244. package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
  245. package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
  246. package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
  247. package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
  248. package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
  249. package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
  250. package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
  251. package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
  252. package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
  253. package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
  254. package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
  255. package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
  256. package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
  257. package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
  258. package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
  259. package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
  260. package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
  261. package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
  262. package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
  263. package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
  264. package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
  265. package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
  266. package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
  267. package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
  268. package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
  269. package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
  270. package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
  271. package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
  272. package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
  273. package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
  274. package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
  275. package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
  276. package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
  277. package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
  278. package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
  279. package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
  280. package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
  281. package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
  282. package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
  283. package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
  284. package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
  285. package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
  286. package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
  287. package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
  288. package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
  289. package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
  290. package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
  291. package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
  292. package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
  293. package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
  294. package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
  295. package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
  296. package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
  297. package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
  298. package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
  299. package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
  300. package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
  301. package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
  302. package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
  303. package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
  304. package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
  305. package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
  306. package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
  307. package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
  308. package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
  309. package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
  310. package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
  311. package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
  312. package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
  313. package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
  314. package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
  315. package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
  316. package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
  317. package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
  318. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
  319. package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
  320. package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
  321. package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
  322. package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
  323. package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
  324. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
  325. package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
  326. package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
  327. package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
  328. package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
  329. package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
  330. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
  331. package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
  332. package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
  333. package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
  334. package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
  335. package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
  336. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
  337. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
  338. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
  339. package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
  340. package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
  341. package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
  342. package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
  343. package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
  344. package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
  345. package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
  346. package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
  347. package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
  348. package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
  349. package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
  350. package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
  351. package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
  352. package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
  353. package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
  354. package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
  355. package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
  356. package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
  357. package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
  358. package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
  359. package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
  360. package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
  361. package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
  362. package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
  363. package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
  364. package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
  365. package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
  366. package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
  367. package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
  368. package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
  369. package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
  370. package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
  371. package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
  372. package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
  373. package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
  374. package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
  375. package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
  376. package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
  377. package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
  378. package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
  379. package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
  380. package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
  381. package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
  382. package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
  383. package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
  384. package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
  385. package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
  386. package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
  387. package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
  388. package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
  389. package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
  390. package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
  391. package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
  392. package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
  393. package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
  394. package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
  395. package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
  396. package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
  397. package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
  398. package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
  399. package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
  400. package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
  401. package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
  402. package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
  403. package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
  404. package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
  405. package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
  406. package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
  407. package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
  408. package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
  409. package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
  410. package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
  411. package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
  412. package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
  413. package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
  414. package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
  415. package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
  416. package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
  417. package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
  418. package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
  419. package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
  420. package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
  421. package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
  422. package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
  423. package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
  424. package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
  425. package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
  426. package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
  427. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
  428. package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
  429. package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
  430. package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
  431. package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
  432. package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
  433. package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
  434. package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
  435. package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
  436. package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
  437. package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
  438. package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
  439. package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
  440. package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
  441. package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
  442. package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
  443. package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
  444. package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
  445. package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
  446. package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  447. package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
  448. package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
  449. package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
  450. package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
  451. package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
  452. package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
  453. package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
  454. package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
  455. package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
  456. package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
  457. package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
  458. package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
  459. package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
  460. package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
  461. package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
  462. package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
  463. package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
  464. package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
  465. package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
  466. package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
  467. package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
  468. package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
  469. package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
  470. package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
  471. package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
  472. package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
  473. package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
  474. package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
  475. package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
  476. package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
  477. package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
  478. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
  479. package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
  480. package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
  481. package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
  482. package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
  483. package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
  484. package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
  485. package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
  486. package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
  487. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
  488. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
  489. package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
  490. package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
  491. package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
  492. package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
  493. package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
  494. package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
  495. package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
  496. package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
  497. package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
  498. package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
  499. package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
  500. package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
  501. package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
  502. package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
  503. package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
  504. package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
  505. package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
  506. package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
  507. package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
  508. package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
  509. package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
  510. package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
  511. package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
  512. package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
  513. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
  514. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
  515. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
  516. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
  517. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
  518. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
  519. package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
  520. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
  521. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
  522. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
  523. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
  524. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
  525. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
  526. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
  527. package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
  528. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
  529. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
  530. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
  531. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
  532. package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
  533. package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
  534. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
  535. package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
  536. package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
  537. package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
  538. package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
  539. package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
  540. package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
  541. package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
  542. package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
  543. package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
  544. package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
  545. package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
  546. package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
  547. package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
  548. package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
  549. package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
  550. package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
  551. package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
  552. package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
  553. package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
  554. package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
  555. package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
  556. package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
  557. package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
  558. package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
  559. package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
  560. package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
  561. package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
  562. package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
  563. package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
  564. package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
  565. package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
  566. package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
  567. package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
  568. package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
  569. package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
  570. package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
  571. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
  572. package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
  573. package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
  574. package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
  575. package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
  576. package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
  577. package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
  578. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
  579. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
  580. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
  581. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
  582. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
  583. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
  584. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
  585. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
  586. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
  587. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
  588. package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
  589. package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
  590. package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
  591. package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
  592. package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
  593. package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
  594. package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
  595. package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
  596. package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
  597. package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
  598. package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
  599. package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
  600. package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
  601. package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
  602. package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
  603. package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
  604. package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
  605. package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
  606. package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
  607. package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
  608. package/dist/core/code/engine/core/lbug/native-check.js +435 -0
  609. package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
  610. package/dist/core/code/engine/core/lbug/query-params.js +25 -0
  611. package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
  612. package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
  613. package/dist/core/code/engine/core/lbug/schema.js +771 -0
  614. package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
  615. package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
  616. package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
  617. package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
  618. package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
  619. package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
  620. package/dist/core/code/engine/core/logger.js +339 -0
  621. package/dist/core/code/engine/core/platform/capabilities.js +91 -0
  622. package/dist/core/code/engine/core/run-analyze.js +1098 -0
  623. package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
  624. package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
  625. package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
  626. package/dist/core/code/engine/lib/utils.js +121 -0
  627. package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
  628. package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
  629. package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
  630. package/dist/core/code/engine/mcp/local/limits.js +15 -0
  631. package/dist/core/code/engine/mcp/local/line-display.js +6 -0
  632. package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
  633. package/dist/core/code/engine/storage/branch-index.js +72 -0
  634. package/dist/core/code/engine/storage/file-hash.js +95 -0
  635. package/dist/core/code/engine/storage/fs-atomic.js +34 -0
  636. package/dist/core/code/engine/storage/git.js +555 -0
  637. package/dist/core/code/engine/storage/index-lock.js +664 -0
  638. package/dist/core/code/engine/storage/parse-cache.js +650 -0
  639. package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
  640. package/dist/core/code/engine/storage/repo-manager.js +1061 -0
  641. package/dist/core/code/engine/storage/scope-index-store.js +247 -0
  642. package/dist/core/code/engine/types/pipeline.js +2 -0
  643. package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
  644. package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
  645. package/dist/core/code/shared/graph/types.js +8 -0
  646. package/dist/core/code/shared/index.js +105 -0
  647. package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
  648. package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
  649. package/dist/core/code/shared/integrations/retry.js +70 -0
  650. package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
  651. package/dist/core/code/shared/language-detection.js +162 -0
  652. package/dist/core/code/shared/languages.js +27 -0
  653. package/dist/core/code/shared/lbug/schema-constants.js +98 -0
  654. package/dist/core/code/shared/mro-strategy.js +2 -0
  655. package/dist/core/code/shared/pipeline.js +5 -0
  656. package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
  657. package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
  658. package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
  659. package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
  660. package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
  661. package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
  662. package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
  663. package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
  664. package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
  665. package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
  666. package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
  667. package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
  668. package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
  669. package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
  670. package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
  671. package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
  672. package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
  673. package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
  674. package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
  675. package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
  676. package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
  677. package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
  678. package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
  679. package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
  680. package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
  681. package/dist/core/code/shared/scope-resolution/types.js +25 -0
  682. package/dist/core/code/shared/test-helpers.js +17 -0
  683. package/dist/core/code/vendor/leiden/index.cjs +355 -0
  684. package/dist/core/code/vendor/leiden/utils.cjs +419 -0
  685. package/dist/core/dbquery/cli.d.ts.map +1 -1
  686. package/dist/core/dbquery/cli.js +5 -4
  687. package/dist/core/dbquery/cli.js.map +1 -1
  688. package/dist/core/dbquery/config.d.ts.map +1 -1
  689. package/dist/core/dbquery/config.js +39 -3
  690. package/dist/core/dbquery/config.js.map +1 -1
  691. package/dist/core/dbquery/drivers/http.d.ts +23 -0
  692. package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
  693. package/dist/core/dbquery/drivers/http.js +125 -0
  694. package/dist/core/dbquery/drivers/http.js.map +1 -0
  695. package/dist/core/dbquery/drivers/mysql.js +1 -1
  696. package/dist/core/dbquery/drivers/mysql.js.map +1 -1
  697. package/dist/core/dbquery/drivers/postgres.js +1 -1
  698. package/dist/core/dbquery/drivers/postgres.js.map +1 -1
  699. package/dist/core/dbquery/executor.d.ts.map +1 -1
  700. package/dist/core/dbquery/executor.js +46 -12
  701. package/dist/core/dbquery/executor.js.map +1 -1
  702. package/dist/core/dbquery/format.d.ts.map +1 -1
  703. package/dist/core/dbquery/format.js +2 -1
  704. package/dist/core/dbquery/format.js.map +1 -1
  705. package/dist/core/dbquery/init.d.ts.map +1 -1
  706. package/dist/core/dbquery/init.js +7 -0
  707. package/dist/core/dbquery/init.js.map +1 -1
  708. package/dist/core/dbquery/types.d.ts +55 -7
  709. package/dist/core/dbquery/types.d.ts.map +1 -1
  710. package/dist/core/directory.d.ts +17 -0
  711. package/dist/core/directory.d.ts.map +1 -1
  712. package/dist/core/directory.js +37 -0
  713. package/dist/core/directory.js.map +1 -1
  714. package/dist/core/features/cli.d.ts.map +1 -1
  715. package/dist/core/features/cli.js +3 -2
  716. package/dist/core/features/cli.js.map +1 -1
  717. package/dist/core/features/scanner.d.ts +1 -1
  718. package/dist/core/features/scanner.d.ts.map +1 -1
  719. package/dist/core/features/scanner.js +20 -4
  720. package/dist/core/features/scanner.js.map +1 -1
  721. package/dist/core/markdown/cli.d.ts.map +1 -1
  722. package/dist/core/markdown/cli.js +9 -8
  723. package/dist/core/markdown/cli.js.map +1 -1
  724. package/dist/core/timeline/cli.d.ts.map +1 -1
  725. package/dist/core/timeline/cli.js +13 -6
  726. package/dist/core/timeline/cli.js.map +1 -1
  727. package/dist/core/timeline/debris.d.ts +20 -0
  728. package/dist/core/timeline/debris.d.ts.map +1 -0
  729. package/dist/core/timeline/debris.js +124 -0
  730. package/dist/core/timeline/debris.js.map +1 -0
  731. package/dist/core/timeline/hook-runner.d.ts.map +1 -1
  732. package/dist/core/timeline/hook-runner.js +3 -1
  733. package/dist/core/timeline/hook-runner.js.map +1 -1
  734. package/dist/core/timeline/hooks.d.ts.map +1 -1
  735. package/dist/core/timeline/hooks.js +13 -5
  736. package/dist/core/timeline/hooks.js.map +1 -1
  737. package/dist/core/timeline/installer.d.ts +2 -0
  738. package/dist/core/timeline/installer.d.ts.map +1 -1
  739. package/dist/core/timeline/installer.js +12 -0
  740. package/dist/core/timeline/installer.js.map +1 -1
  741. package/dist/core/timeline/project-root.d.ts +21 -0
  742. package/dist/core/timeline/project-root.d.ts.map +1 -0
  743. package/dist/core/timeline/project-root.js +83 -0
  744. package/dist/core/timeline/project-root.js.map +1 -0
  745. package/dist/web/register.d.ts.map +1 -1
  746. package/dist/web/register.js +2 -1
  747. package/dist/web/register.js.map +1 -1
  748. package/package.json +1 -1
  749. package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
  750. package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
  751. package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
  752. package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
  753. package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
  754. /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
@@ -0,0 +1,708 @@
1
+ "use strict";
2
+ /**
3
+ * C# same-namespace cross-file visibility.
4
+ *
5
+ * C# makes every type declared in `namespace X` visible to every other
6
+ * file that also declares `namespace X`, without any explicit `using`
7
+ * directive. Python has no equivalent — every cross-file reference
8
+ * needs an explicit import — so this is a C#-specific pass.
9
+ *
10
+ * Without this: `Service.cs` (namespace `FieldTypes`) can't see
11
+ * `User` declared in `Models.cs` (same namespace), so `user.Address`
12
+ * field-chain resolution fails at `findClassBindingInScope('User')`
13
+ * in the Service.cs scope chain.
14
+ *
15
+ * Implementation: after the finalize pass populates immutable
16
+ * `indexes.bindings` (from explicit `using` directives), walk each
17
+ * file's tree-sitter AST for `namespace_declaration` /
18
+ * `file_scoped_namespace_declaration` and `using_directive` nodes.
19
+ * The orchestrator hands us its `treeCache` so files already parsed
20
+ * by `extractParsedFile` are re-used instead of re-parsed —
21
+ * `ParsedFile`'s underlying tree is the single source of truth.
22
+ * Group classes by namespace, then route cross-file sibling classes
23
+ * (and method return-type bindings) through SHARED, per-namespace
24
+ * channels — `namespaceFqnBindings` / `namespaceTypeBindings`, keyed by
25
+ * namespace name — populated ONCE per bucket with `origin: 'namespace'`,
26
+ * rather than copied into every sibling's per-scope `bindingAugmentations`
27
+ * / `Scope.typeBindings`. That per-file copy was O(files²) for a
28
+ * concentrated namespace and OOM'd large solutions (#1871; the global
29
+ * twin was fixed in #1905/#1954). The walkers consult these channels
30
+ * gated by `accessibleNamespacesByScope` (a file's own namespace +
31
+ * `using` targets), so visibility is unchanged — only the storage is
32
+ * shared. Finalized bindings remain first in `lookupBindingsAt`, and
33
+ * local lexical `Scope.bindings` remains the first-tier shadowing
34
+ * channel. (`using static` member exposure still uses the per-scope
35
+ * augmentation channel — it is per-import and not part of the blow-up.)
36
+ *
37
+ * The tree-sitter walk is authoritative: it sees `global using static`,
38
+ * aliased `using static X = Y.Z;`, attributed namespace declarations,
39
+ * and preprocessor-guarded declarations correctly because the
40
+ * tree-sitter grammar parses them as real nodes (not textual
41
+ * coincidences). When the orchestrator's `treeCache` has no Tree for a
42
+ * file — the worker path, where native Trees can't cross MessageChannels
43
+ * — `extractFileStructure` falls back to a line scanner rather than
44
+ * re-parsing every file from scratch (that re-parse dominated worker-mode
45
+ * scope-resolution time). See `extractCsharpStructureViaScanner`.
46
+ */
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.createCsharpStructureScanner = createCsharpStructureScanner;
49
+ exports.extractCsharpStructureViaScanner = extractCsharpStructureViaScanner;
50
+ exports.populateCsharpNamespaceSiblings = populateCsharpNamespaceSiblings;
51
+ // A dotted C# namespace identifier: each segment is an optional verbatim `@`
52
+ // followed by a Unicode letter/`_` and Unicode letters/digits/`_`. The `u` flag
53
+ // makes the classes Unicode-aware so `namespace Café.Models;` is captured (the
54
+ // old ASCII `[A-Za-z…]` truncated it). The `@` markers are stripped from the
55
+ // capture so it matches the tree-sitter AST's `name` text.
56
+ const CS_NS_IDENT = String.raw `@?[\p{L}_][\p{L}\p{N}_]*(?:\.@?[\p{L}_][\p{L}\p{N}_]*)*`;
57
+ // Line-anchored matchers for the worker-path fallback (see
58
+ // `extractCsharpStructureViaScanner`). Anchored at line start (after
59
+ // indentation); the scanner additionally tracks block-comment / string
60
+ // state across lines so a keyword at the start of a line inside one of
61
+ // those regions is skipped.
62
+ const CS_NAMESPACE_RE = new RegExp(String.raw `^[ \t]*namespace[ \t]+(${CS_NS_IDENT})`, 'u');
63
+ // `global using static`, plain `using static`, and the aliased
64
+ // `using static Alias = NS.Type;` form (the AST keeps the RHS path, so
65
+ // the optional `Alias =` is skipped and only the dotted path captured).
66
+ const CS_USING_STATIC_RE = new RegExp(String.raw `^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]+(?:@?[\p{L}_][\p{L}\p{N}_]*[ \t]*=[ \t]*)?(${CS_NS_IDENT})`, 'u');
67
+ // Incompleteness detectors — used ONLY when the precise matchers above failed,
68
+ // to flag a declaration the scanner could not capture (so the file fails the
69
+ // #1881 gate OPEN instead of silently dropping the namespace). Kept
70
+ // high-precision so ordinary files never trip them (which would wrongly disable
71
+ // the gate repo-wide):
72
+ // - `…_BARE`: the keyword alone on a line (the name is on the next line).
73
+ // - `…_AT_START`: a line-start declaration the precise matcher couldn't parse.
74
+ // - `CS_NAMESPACE_AFTER_CODE`: a `namespace` keyword right after a `}`/`;`/`{`/`]`
75
+ // (real code, NOT a `//` comment), i.e. not at line start.
76
+ const CS_NAMESPACE_BARE = /^[ \t]*namespace[ \t]*\r?$/;
77
+ const CS_USING_STATIC_BARE = /^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]*\r?$/;
78
+ const CS_NAMESPACE_AT_START = /^[ \t]*namespace[ \t]+\S/;
79
+ const CS_USING_STATIC_AT_START = /^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]+\S/;
80
+ const CS_NAMESPACE_AFTER_CODE = /[}\];{][ \t]*namespace[ \t]+@?[\p{L}_]/u;
81
+ /** Whether a `code`-state line declares a namespace / using-static the precise
82
+ * matchers could not capture — see the detectors above. */
83
+ function looksLikeUncapturedDeclaration(line) {
84
+ return (CS_NAMESPACE_BARE.test(line) ||
85
+ CS_USING_STATIC_BARE.test(line) ||
86
+ CS_NAMESPACE_AT_START.test(line) ||
87
+ CS_USING_STATIC_AT_START.test(line) ||
88
+ CS_NAMESPACE_AFTER_CODE.test(line));
89
+ }
90
+ /** Advance the scanner's lexical state across one line, consuming block
91
+ * comments (slash-star), line comments (`//`), single-line regular /
92
+ * interpolated strings, verbatim strings (`@"…"`), and raw string literals
93
+ * (`"""…"""`, fence length tracked in `rawFence`). Returns the state and
94
+ * raw-fence length in effect at the START of the next line. Single-line
95
+ * strings and `//` comments resolve back to `code` before end of line; only
96
+ * block comments and multi-line strings carry state forward. */
97
+ function advanceCsScanState(line, state, rawFence) {
98
+ const n = line.length;
99
+ let i = 0;
100
+ while (i < n) {
101
+ if (state === 'block') {
102
+ const end = line.indexOf('*/', i);
103
+ if (end === -1)
104
+ return ['block', rawFence];
105
+ i = end + 2;
106
+ state = 'code';
107
+ }
108
+ else if (state === 'verbatim') {
109
+ // Ends at a `"` that is not doubled (`""` is an escaped quote).
110
+ while (i < n) {
111
+ if (line[i] === '"') {
112
+ if (line[i + 1] === '"') {
113
+ i += 2;
114
+ continue;
115
+ }
116
+ break;
117
+ }
118
+ i++;
119
+ }
120
+ if (i >= n)
121
+ return ['verbatim', rawFence];
122
+ i += 1;
123
+ state = 'code';
124
+ }
125
+ else if (state === 'raw') {
126
+ // Ends at a run of `"` at least `rawFence` long.
127
+ let closed = false;
128
+ while (i < n) {
129
+ if (line[i] === '"') {
130
+ let k = i;
131
+ while (k < n && line[k] === '"')
132
+ k++;
133
+ if (k - i >= rawFence) {
134
+ i = k;
135
+ state = 'code';
136
+ rawFence = 0;
137
+ closed = true;
138
+ break;
139
+ }
140
+ i = k;
141
+ }
142
+ else {
143
+ i++;
144
+ }
145
+ }
146
+ if (!closed)
147
+ return ['raw', rawFence];
148
+ }
149
+ else {
150
+ const c = line[i];
151
+ const next = line[i + 1];
152
+ if (c === '/' && next === '/')
153
+ return ['code', rawFence]; // line comment to EOL
154
+ if (c === '/' && next === '*') {
155
+ state = 'block';
156
+ i += 2;
157
+ }
158
+ else if (c === '@' && next === '"') {
159
+ state = 'verbatim';
160
+ i += 2;
161
+ }
162
+ else if ((c === '$' && next === '@') || (c === '@' && next === '$')) {
163
+ if (line[i + 2] === '"') {
164
+ state = 'verbatim'; // interpolated verbatim ($@"…" / @$"…")
165
+ i += 3;
166
+ }
167
+ else {
168
+ i++;
169
+ }
170
+ }
171
+ else if (c === '"') {
172
+ let k = i;
173
+ while (k < n && line[k] === '"')
174
+ k++;
175
+ const run = k - i;
176
+ if (run >= 3) {
177
+ state = 'raw';
178
+ rawFence = run;
179
+ i = k;
180
+ }
181
+ else if (run === 2) {
182
+ i = k; // "" — empty string
183
+ }
184
+ else {
185
+ // single-line regular / interpolated string; consume to closer
186
+ let j = i + 1;
187
+ while (j < n) {
188
+ if (line[j] === '\\') {
189
+ j += 2;
190
+ continue;
191
+ }
192
+ if (line[j] === '"')
193
+ break;
194
+ j++;
195
+ }
196
+ i = j >= n ? n : j + 1;
197
+ }
198
+ }
199
+ else {
200
+ i++;
201
+ }
202
+ }
203
+ }
204
+ return [state, rawFence];
205
+ }
206
+ /** Create a fresh stateful line scanner — see {@link CsharpStructureLineScanner}. */
207
+ function createCsharpStructureScanner() {
208
+ const namespaces = [];
209
+ const usingStaticPaths = [];
210
+ let incomplete = false;
211
+ let state = 'code';
212
+ let rawFence = 0;
213
+ return {
214
+ pushLine(line) {
215
+ // Only match when the line START is real code — keywords reached while
216
+ // inside a block comment / multi-line string are skipped.
217
+ if (state === 'code') {
218
+ const ns = CS_NAMESPACE_RE.exec(line);
219
+ if (ns !== null) {
220
+ namespaces.push(ns[1].replace(/@/g, ''));
221
+ }
222
+ else {
223
+ const us = CS_USING_STATIC_RE.exec(line);
224
+ if (us !== null) {
225
+ usingStaticPaths.push(us[1].replace(/@/g, ''));
226
+ }
227
+ else if (looksLikeUncapturedDeclaration(line)) {
228
+ // A declaration the precise matchers couldn't capture → mark the
229
+ // file incomplete so the #1881 gate fails OPEN (Codex F3).
230
+ incomplete = true;
231
+ }
232
+ }
233
+ }
234
+ [state, rawFence] = advanceCsScanState(line, state, rawFence);
235
+ },
236
+ result() {
237
+ return incomplete
238
+ ? { namespaces, usingStaticPaths, incomplete }
239
+ : { namespaces, usingStaticPaths };
240
+ },
241
+ };
242
+ }
243
+ function extractCsharpStructureViaScanner(content) {
244
+ const scanner = createCsharpStructureScanner();
245
+ for (const line of content.split('\n'))
246
+ scanner.pushLine(line);
247
+ return scanner.result();
248
+ }
249
+ /** Build a structural view of a C# file. Prefers `cachedTree` (handed in
250
+ * via `treeCache`) and walks the tree-sitter AST — the authoritative
251
+ * path that sees `global using static`, aliased `using static X = Y.Z;`,
252
+ * attributed namespace declarations, and preprocessor-guarded nodes
253
+ * correctly. On cache miss (worker-parsed files, whose native Trees
254
+ * can't cross MessageChannels) it falls back to the line scanner instead
255
+ * of a fresh tree-sitter parse — the parse here dominated worker-mode
256
+ * scope-resolution time. Parser singleton is shared across calls. */
257
+ function extractFileStructure(content, cachedTree) {
258
+ if (!cachedTree) {
259
+ return extractCsharpStructureViaScanner(content);
260
+ }
261
+ const tree = cachedTree;
262
+ const namespaces = [];
263
+ const usingStaticPaths = [];
264
+ const visit = (node) => {
265
+ if (node.type === 'namespace_declaration' ||
266
+ node.type === 'file_scoped_namespace_declaration') {
267
+ const nameNode = node.childForFieldName('name');
268
+ if (nameNode !== null)
269
+ namespaces.push(nameNode.text);
270
+ }
271
+ else if (node.type === 'using_directive') {
272
+ // Inspect the directive's own text for the `static` keyword
273
+ // (tree-sitter-c-sharp does not expose it as a named child).
274
+ // This is a single-node-scoped text inspection, not a whole-file
275
+ // regex, so it stays well within AST semantics.
276
+ if (/^\s*(?:global\s+)?using\s+static\s/.test(node.text)) {
277
+ // Path lives on the `name:` field when the using-directive is
278
+ // aliased (`using static A = X.Y.Z;`); otherwise it's the
279
+ // first named child.
280
+ const aliasField = node.childForFieldName('name');
281
+ let pathNode = null;
282
+ if (aliasField !== null) {
283
+ for (const c of node.namedChildren) {
284
+ if (c !== null && c.startIndex !== aliasField.startIndex) {
285
+ pathNode = c;
286
+ break;
287
+ }
288
+ }
289
+ }
290
+ else {
291
+ pathNode = node.namedChildren[0] ?? null;
292
+ }
293
+ if (pathNode !== null)
294
+ usingStaticPaths.push(pathNode.text);
295
+ }
296
+ }
297
+ for (const child of node.namedChildren) {
298
+ if (child !== null)
299
+ visit(child);
300
+ }
301
+ };
302
+ visit(tree.rootNode);
303
+ return { namespaces, usingStaticPaths };
304
+ }
305
+ /**
306
+ * Append cross-file sibling class defs to each Namespace scope's
307
+ * `bindingAugmentations` bucket. Class-like defs (Class / Interface /
308
+ * Struct / Record / Enum) are visible cross-file; method / field
309
+ * members are not.
310
+ */
311
+ function populateCsharpNamespaceSiblings(parsedFiles, indexes, inputs) {
312
+ // Build a structural view (namespaces + using-static paths) per
313
+ // file once up-front. Reuses the orchestrator's `treeCache` so
314
+ // files already parsed by `extractParsedFile` don't get re-parsed
315
+ // here — single-source-of-truth for the AST.
316
+ const structureByFile = new Map();
317
+ for (const parsed of parsedFiles) {
318
+ const content = inputs.fileContents.get(parsed.filePath);
319
+ if (content === undefined)
320
+ continue;
321
+ const cachedTree = inputs.treeCache?.get(parsed.filePath);
322
+ structureByFile.set(parsed.filePath, extractFileStructure(content, cachedTree));
323
+ }
324
+ const buckets = new Map();
325
+ const getBucket = (name) => {
326
+ let b = buckets.get(name);
327
+ if (b === undefined) {
328
+ b = { scopes: [], classDefs: [] };
329
+ buckets.set(name, b);
330
+ }
331
+ return b;
332
+ };
333
+ for (const parsed of parsedFiles) {
334
+ const struct = structureByFile.get(parsed.filePath);
335
+ if (struct === undefined)
336
+ continue;
337
+ // Declared namespace names, source order (AST walk visits children
338
+ // left-to-right, matching the scope-extractor's ordering).
339
+ const names = struct.namespaces.length > 0 ? [...struct.namespaces] : [''];
340
+ const namespaceScopes = parsed.scopes.filter((s) => s.kind === 'Namespace');
341
+ // With file-scoped namespaces (`namespace X;`), the Namespace
342
+ // scope's range covers only the declaration line, not the rest of
343
+ // the file — so classes below it land under the Module scope, not
344
+ // the Namespace scope. Group top-level classes by "any class whose
345
+ // parent scope is Module or Namespace" and attribute them to the
346
+ // first declared namespace in the file. Multiple-namespace files
347
+ // are rare enough that first-wins is the right first pass; fix
348
+ // when the parity suite surfaces a case.
349
+ const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
350
+ const topLevelParentIds = new Set();
351
+ if (moduleScope !== undefined)
352
+ topLevelParentIds.add(moduleScope.id);
353
+ for (const ns of namespaceScopes)
354
+ topLevelParentIds.add(ns.id);
355
+ // Attribute all top-level classes to the first-declared namespace
356
+ // in this file. Multiple-namespace files are rare and can be
357
+ // addressed if the parity suite surfaces a case. Inject into BOTH
358
+ // the Module and the Namespace scopes — the Module scope is on
359
+ // the ancestor chain of every function body (the Namespace scope
360
+ // is not, because file-scoped `namespace X;` has a 1-line range).
361
+ const firstName = names[0];
362
+ const bucket = getBucket(firstName);
363
+ if (moduleScope !== undefined) {
364
+ bucket.scopes.push({
365
+ filePath: parsed.filePath,
366
+ scopeId: moduleScope.id,
367
+ scope: moduleScope,
368
+ });
369
+ }
370
+ for (const ns of namespaceScopes) {
371
+ bucket.scopes.push({ filePath: parsed.filePath, scopeId: ns.id, scope: ns });
372
+ }
373
+ for (const s of parsed.scopes) {
374
+ if (s.kind !== 'Class')
375
+ continue;
376
+ if (s.parent === null || !topLevelParentIds.has(s.parent))
377
+ continue;
378
+ for (const def of s.ownedDefs) {
379
+ if (isTypeDef(def)) {
380
+ bucket.classDefs.push(def);
381
+ break;
382
+ }
383
+ }
384
+ }
385
+ }
386
+ // Inject cross-file siblings into each namespace scope's
387
+ // post-finalize augmentation channel (per I8). The
388
+ // `indexes.bindingAugmentations` map is the dedicated mutable
389
+ // append-only buffer for post-finalize hooks: inner `BindingRef[]`
390
+ // arrays here are NEVER frozen (unlike `indexes.bindings`, which
391
+ // `materializeBindings` freezes). Walkers consult both channels
392
+ // via `lookupBindingsAt`; we never need to consult or mutate
393
+ // `indexes.bindings`.
394
+ const augmentations = indexes.bindingAugmentations;
395
+ // Global ('') namespace type-binding propagation (#1871). Types in the C#
396
+ // unnamed/global namespace form a single declaration space that is
397
+ // type-visible from EVERY file — including files inside named namespaces
398
+ // (C# spec: "any identifier in the global namespace is available for use in
399
+ // a named namespace"). Route their module-scope return-type bindings through
400
+ // the scope-independent `workspaceTypeBindings` channel ONCE, rather than
401
+ // copying every global file's bindings into every other file's
402
+ // `Scope.typeBindings`. That per-file copy was O(files × distinct-names) in
403
+ // both time and memory and OOM'd large no-namespace solutions (tens of
404
+ // thousands of files in the global bucket → billions of Map entries). This
405
+ // mirrors how Roslyn resolves against a single `Compilation.GlobalNamespace`
406
+ // symbol instead of per-file copies, and is the typeBindings analogue of the
407
+ // `workspaceFqnBindings` fast-path (#1905). `findReceiverTypeBinding` /
408
+ // `followChainPostFinalize` consult this channel as a final fallback.
409
+ const workspaceTypeBindings = indexes.workspaceTypeBindings;
410
+ const globalBucket = buckets.get('');
411
+ if (globalBucket !== undefined) {
412
+ for (const scopeInfo of globalBucket.scopes) {
413
+ if (scopeInfo.scope.kind !== 'Module')
414
+ continue;
415
+ for (const [boundName, typeRef] of scopeInfo.scope.typeBindings) {
416
+ // First-wins, matching the old per-importer `has(boundName)` skip:
417
+ // same-name collisions across global files are inherently ambiguous.
418
+ if (!workspaceTypeBindings.has(boundName)) {
419
+ workspaceTypeBindings.set(boundName, typeRef);
420
+ }
421
+ }
422
+ }
423
+ }
424
+ // Named-namespace type-binding propagation (#1871). Method return-type
425
+ // bindings are routed through the per-namespace `namespaceTypeBindings`
426
+ // channel — populated ONCE per named bucket — instead of copied into every
427
+ // sibling/importer file's Module `Scope.typeBindings`. That per-file copy was
428
+ // O(files²) for a concentrated named namespace (the global twin of which #1954
429
+ // already moved to `workspaceTypeBindings`); a solution with all files under
430
+ // one `namespace App;` reproduced the same OOM. The chain-walkers
431
+ // (`findReceiverTypeBinding`, `followChainPostFinalize`) consult this channel
432
+ // gated by `accessibleNamespacesByScope`, so a file sees exactly the
433
+ // namespaces it could before (its own + `using`d), just shared not copied.
434
+ const namespaceTypeBindings = indexes.namespaceTypeBindings;
435
+ for (const [nsName, bucket] of buckets) {
436
+ if (nsName === '')
437
+ continue; // global → workspaceTypeBindings (above)
438
+ let nsMap = namespaceTypeBindings.get(nsName);
439
+ for (const scopeInfo of bucket.scopes) {
440
+ if (scopeInfo.scope.kind !== 'Module')
441
+ continue;
442
+ for (const [boundName, typeRef] of scopeInfo.scope.typeBindings) {
443
+ if (nsMap === undefined) {
444
+ nsMap = new Map();
445
+ namespaceTypeBindings.set(nsName, nsMap);
446
+ }
447
+ // First-wins, matching the old per-importer `has(boundName)` skip.
448
+ if (!nsMap.has(boundName))
449
+ nsMap.set(boundName, typeRef);
450
+ }
451
+ }
452
+ }
453
+ // Materialize each file's accessible namespaces (its own declared namespaces +
454
+ // every `using namespace X;` target, plus dotted-path prefixes), keyed by the
455
+ // file's Module scope id. This is the SAME accessibility set the per-file copy
456
+ // above used to derive — now stored so the language-neutral walkers can gate
457
+ // their `namespaceFqnBindings` / `namespaceTypeBindings` lookups to exactly the
458
+ // namespaces a file can see. The global ('') namespace is excluded: it is
459
+ // type-visible everywhere and handled by the flat workspace channels.
460
+ const accessibleNamespacesByScope = indexes.accessibleNamespacesByScope;
461
+ for (const parsed of parsedFiles) {
462
+ const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
463
+ if (moduleScope === undefined)
464
+ continue;
465
+ const accessibleNamespaces = new Set();
466
+ const struct = structureByFile.get(parsed.filePath);
467
+ if (struct !== undefined) {
468
+ for (const n of struct.namespaces)
469
+ accessibleNamespaces.add(n);
470
+ }
471
+ for (const imp of parsed.parsedImports) {
472
+ if (imp.kind === 'namespace' && imp.targetRaw !== null) {
473
+ accessibleNamespaces.add(imp.targetRaw);
474
+ }
475
+ }
476
+ const expandedNamespaces = new Set(accessibleNamespaces);
477
+ for (const ns of accessibleNamespaces) {
478
+ const segments = ns.split('.');
479
+ for (let i = segments.length - 1; i > 0; i--) {
480
+ expandedNamespaces.add(segments.slice(0, i).join('.'));
481
+ }
482
+ }
483
+ expandedNamespaces.delete(''); // global handled by the flat workspace channels
484
+ if (expandedNamespaces.size > 0) {
485
+ accessibleNamespacesByScope.set(moduleScope.id, [...expandedNamespaces]);
486
+ }
487
+ }
488
+ // `using static X.Y.Z;` — expose every public static method of
489
+ // class Z as a free-callable binding in the importer's module
490
+ // scope, so `Record(...)` (without `Logger.` qualifier) resolves
491
+ // to `Logger.Record`. AST walk above captured these (including
492
+ // `global using static` and aliased forms).
493
+ // Pre-index files by path once: the member-injection lookup below would
494
+ // otherwise be an O(files) scan per `using static` import.
495
+ const fileByPath = new Map(parsedFiles.map((p) => [p.filePath, p]));
496
+ for (const parsed of parsedFiles) {
497
+ const struct = structureByFile.get(parsed.filePath);
498
+ if (struct === undefined)
499
+ continue;
500
+ const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
501
+ if (moduleScope === undefined)
502
+ continue;
503
+ // Per-file de-dup sets keyed by simple name, seeded lazily from the
504
+ // augmentation bucket — replaces the per-member O(A) `.some` scan below.
505
+ const seenByName = new Map();
506
+ for (const fullPath of struct.usingStaticPaths) {
507
+ const lastDot = fullPath.lastIndexOf('.');
508
+ if (lastDot === -1)
509
+ continue;
510
+ const className = fullPath.slice(lastDot + 1);
511
+ const enclosingNs = fullPath.slice(0, lastDot);
512
+ // Find the target class in the named namespace bucket.
513
+ const bucket = buckets.get(enclosingNs);
514
+ if (bucket === undefined)
515
+ continue;
516
+ const targetDef = bucket.classDefs.find((d) => {
517
+ const q = d.qualifiedName ?? '';
518
+ const simple = q.includes('.') ? q.slice(q.lastIndexOf('.') + 1) : q;
519
+ return simple === className;
520
+ });
521
+ if (targetDef === undefined)
522
+ continue;
523
+ // Inject the class's member methods into the importer's module
524
+ // scope. `memberByOwner` wasn't built yet here, so we walk the
525
+ // file's localDefs to find members with `ownerId === targetDef.nodeId`.
526
+ const targetFile = fileByPath.get(targetDef.filePath);
527
+ if (targetFile === undefined)
528
+ continue;
529
+ for (const memberDef of targetFile.localDefs) {
530
+ if (memberDef.ownerId !== targetDef.nodeId)
531
+ continue;
532
+ if (memberDef.type !== 'Method' && memberDef.type !== 'Function')
533
+ continue;
534
+ const mq = memberDef.qualifiedName ?? '';
535
+ const simpleName = mq.includes('.') ? mq.slice(mq.lastIndexOf('.') + 1) : mq;
536
+ if (simpleName === '')
537
+ continue;
538
+ // Append to the augmentation bucket for the importer's module
539
+ // scope. `findCallableBindingInScope` reads via
540
+ // `lookupBindingsAt`, which fans out across `bindings` +
541
+ // `bindingAugmentations`.
542
+ const bucketArr = getAugmentationBucket(augmentations, moduleScope.id, simpleName);
543
+ let seen = seenByName.get(simpleName);
544
+ if (seen === undefined) {
545
+ seen = new Set();
546
+ for (const b of bucketArr)
547
+ seen.add(b.def.nodeId);
548
+ seenByName.set(simpleName, seen);
549
+ }
550
+ if (seen.has(memberDef.nodeId))
551
+ continue;
552
+ seen.add(memberDef.nodeId);
553
+ bucketArr.push({
554
+ def: memberDef,
555
+ origin: 'import',
556
+ visibility: 'static-member-import',
557
+ });
558
+ }
559
+ }
560
+ }
561
+ // Cross-namespace `using X;` class visibility is no longer injected per-file
562
+ // here (#1871). It is now subsumed by the per-namespace `namespaceFqnBindings`
563
+ // channel populated below: a file's `using` targets are already in its
564
+ // `accessibleNamespacesByScope` entry (materialized above), so `lookupBindingsAt`
565
+ // consults `namespaceFqnBindings[targetNs]` for it. Routing through the shared
566
+ // channel instead of copying each target bucket's classes into every importer's
567
+ // augmentation removes an O(importers × bucket-size) fanout on popular
568
+ // namespaces — the cross-namespace twin of the same-namespace blow-up.
569
+ // Workspace-level binding channel for global-namespace types (see the
570
+ // global fast-path below). `lookupBindingsAt` consults this as a third
571
+ // source after finalized + per-scope augmented bindings. Its inner arrays
572
+ // are mutable by contract (append-only, like `bindingAugmentations` — see
573
+ // the ScopeResolutionIndexes doc + validateBindingsImmutability), so the
574
+ // ReadonlyMap→Map cast is localized to this one line and all writes go
575
+ // through `getWorkspaceBucket`.
576
+ const workspace = indexes.workspaceFqnBindings;
577
+ // Per-namespace binding channel for NAMED-namespace class visibility — the
578
+ // namespace-scoped analogue of `workspace`, populated once per named bucket
579
+ // (#1871). Replaces the per-scope `bindingAugmentations` fanout (O(scopes ×
580
+ // defs)) for same-namespace siblings AND the per-file cross-namespace-`using`
581
+ // injection above. `lookupBindingsAt` consults it gated by
582
+ // `accessibleNamespacesByScope`.
583
+ const namespaceFqn = indexes.namespaceFqnBindings;
584
+ for (const [nsName, bucket] of buckets) {
585
+ // Group sibling defs by simple name. Append in place — the previous
586
+ // `[...prev, def]` copy made this O(D²) per bucket, which on the
587
+ // global (`''`) namespace bucket of a large Unity solution (tens of
588
+ // thousands of type defs) was a primary slowness/OOM source. We keep
589
+ // every declaration (e.g. partial classes across files) and leave
590
+ // de-dup to downstream consumers.
591
+ const defsByName = new Map();
592
+ for (const def of bucket.classDefs) {
593
+ // Simple name = last segment of qualifiedName (e.g. `App.User` → `User`).
594
+ const q = def.qualifiedName ?? '';
595
+ const key = q.includes('.') ? q.slice(q.lastIndexOf('.') + 1) : q;
596
+ if (key === '')
597
+ continue;
598
+ let arr = defsByName.get(key);
599
+ if (arr === undefined) {
600
+ arr = [];
601
+ defsByName.set(key, arr);
602
+ }
603
+ arr.push(def);
604
+ }
605
+ // Global-namespace fast path (Unity OOM guard). Types declared in the
606
+ // default (global) namespace are visible from EVERY file in C# — the
607
+ // global namespace is always implicitly in scope — so one workspace-
608
+ // level entry per simple name is both semantically correct and O(D)
609
+ // instead of the O(S·D) per-scope augmentation that materialized
610
+ // billions of BindingRefs on large Unity solutions (tens of thousands
611
+ // of global types × tens of thousands of scopes). `walkScopeChain`
612
+ // checks local `scope.bindings` first, so local declarations still
613
+ // shadow these workspace entries; a file resolving its own global type
614
+ // hits the local binding before this map. Dedup by `def.nodeId` keeps
615
+ // partial-class / duplicate declarations from double-emitting.
616
+ if (nsName === '') {
617
+ for (const [name, defs] of defsByName) {
618
+ const bucket = getWorkspaceBucket(workspace, name);
619
+ const seen = new Set();
620
+ for (const b of bucket)
621
+ seen.add(b.def.nodeId);
622
+ for (const def of defs) {
623
+ if (seen.has(def.nodeId))
624
+ continue; // dedup by nodeId (keeps partials, drops re-emits)
625
+ seen.add(def.nodeId);
626
+ bucket.push({ def, origin: 'namespace' });
627
+ }
628
+ }
629
+ continue;
630
+ }
631
+ // Named-namespace fast path (#1871) — the namespace-scoped mirror of the
632
+ // global path above. One `namespaceFqnBindings[nsName]` entry per simple
633
+ // name, O(D) per bucket, instead of the prior O(scopes × defs) per-scope
634
+ // augmentation that materialized O(files²) BindingRefs for a concentrated
635
+ // named namespace. `lookupBindingsAt` consults this gated by
636
+ // `accessibleNamespacesByScope` and ranks finalized `scope.bindings`
637
+ // (local declarations) ABOVE it, so local types still shadow — exactly as
638
+ // `walkScopeChain` shadows the global workspace entries. Dedup by
639
+ // `def.nodeId` keeps partial-class / duplicate declarations from
640
+ // double-emitting. (The prior local-shadow and self-reference skips are now
641
+ // handled by lookup precedence, identical to the global path.)
642
+ let nsMap = namespaceFqn.get(nsName);
643
+ for (const [name, defs] of defsByName) {
644
+ let bucketArr = nsMap?.get(name);
645
+ let seen = null;
646
+ for (const def of defs) {
647
+ if (bucketArr === undefined) {
648
+ if (nsMap === undefined) {
649
+ nsMap = new Map();
650
+ namespaceFqn.set(nsName, nsMap);
651
+ }
652
+ bucketArr = [];
653
+ nsMap.set(name, bucketArr);
654
+ }
655
+ if (seen === null) {
656
+ seen = new Set();
657
+ for (const b of bucketArr)
658
+ seen.add(b.def.nodeId);
659
+ }
660
+ if (seen.has(def.nodeId))
661
+ continue;
662
+ seen.add(def.nodeId);
663
+ bucketArr.push({ def, origin: 'namespace' });
664
+ }
665
+ }
666
+ }
667
+ }
668
+ /** Get-or-create a mutable inner bucket inside the `bindingAugmentations`
669
+ * channel. The inner arrays here are mutable by contract (see
670
+ * `ScopeResolutionIndexes.bindingAugmentations` doc + scope-resolver I8);
671
+ * callers may `push` directly. Allocating the outer/inner Maps lazily
672
+ * keeps the augmentation footprint zero for files with no cross-file
673
+ * fanout. */
674
+ function getAugmentationBucket(augmentations, scopeId, name) {
675
+ let scopeBindings = augmentations.get(scopeId);
676
+ if (scopeBindings === undefined) {
677
+ scopeBindings = new Map();
678
+ augmentations.set(scopeId, scopeBindings);
679
+ }
680
+ let bucketArr = scopeBindings.get(name);
681
+ if (bucketArr === undefined) {
682
+ bucketArr = [];
683
+ scopeBindings.set(name, bucketArr);
684
+ }
685
+ return bucketArr;
686
+ }
687
+ /** Get-or-create a mutable inner bucket inside the `workspaceFqnBindings`
688
+ * channel (the scope-independent third channel; see
689
+ * `ScopeResolutionIndexes.workspaceFqnBindings`). Like
690
+ * `getAugmentationBucket`, the inner arrays are mutable by contract —
691
+ * callers `push` directly. Keeping the get-or-create here means the one
692
+ * ReadonlyMap→Map cast at the call site is the only place the mutable
693
+ * view is taken. */
694
+ function getWorkspaceBucket(workspace, name) {
695
+ let bucketArr = workspace.get(name);
696
+ if (bucketArr === undefined) {
697
+ bucketArr = [];
698
+ workspace.set(name, bucketArr);
699
+ }
700
+ return bucketArr;
701
+ }
702
+ function isTypeDef(def) {
703
+ return (def.type === 'Class' ||
704
+ def.type === 'Interface' ||
705
+ def.type === 'Struct' ||
706
+ def.type === 'Record' ||
707
+ def.type === 'Enum');
708
+ }