gitnexus 1.5.3 → 1.6.1

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 (304) hide show
  1. package/README.md +10 -0
  2. package/dist/_shared/graph/types.d.ts +1 -1
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +1 -0
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/language-detection.d.ts.map +1 -1
  7. package/dist/_shared/language-detection.js +2 -0
  8. package/dist/_shared/language-detection.js.map +1 -1
  9. package/dist/_shared/languages.d.ts +1 -0
  10. package/dist/_shared/languages.d.ts.map +1 -1
  11. package/dist/_shared/languages.js +1 -0
  12. package/dist/_shared/languages.js.map +1 -1
  13. package/dist/_shared/lbug/schema-constants.d.ts +1 -1
  14. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.js +3 -1
  16. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  17. package/dist/_shared/mro-strategy.d.ts +19 -0
  18. package/dist/_shared/mro-strategy.d.ts.map +1 -0
  19. package/dist/_shared/mro-strategy.js +2 -0
  20. package/dist/_shared/mro-strategy.js.map +1 -0
  21. package/dist/cli/ai-context.d.ts +1 -0
  22. package/dist/cli/ai-context.js +28 -4
  23. package/dist/cli/analyze.d.ts +2 -0
  24. package/dist/cli/analyze.js +30 -4
  25. package/dist/cli/group.d.ts +2 -0
  26. package/dist/cli/group.js +233 -0
  27. package/dist/cli/index.js +3 -0
  28. package/dist/cli/serve.js +4 -1
  29. package/dist/cli/setup.js +34 -3
  30. package/dist/config/ignore-service.js +8 -3
  31. package/dist/core/augmentation/engine.js +1 -1
  32. package/dist/core/git-staleness.d.ts +13 -0
  33. package/dist/core/git-staleness.js +29 -0
  34. package/dist/core/group/bridge-db.d.ts +82 -0
  35. package/dist/core/group/bridge-db.js +460 -0
  36. package/dist/core/group/bridge-schema.d.ts +27 -0
  37. package/dist/core/group/bridge-schema.js +55 -0
  38. package/dist/core/group/config-parser.d.ts +3 -0
  39. package/dist/core/group/config-parser.js +83 -0
  40. package/dist/core/group/contract-extractor.d.ts +7 -0
  41. package/dist/core/group/contract-extractor.js +1 -0
  42. package/dist/core/group/extractors/fs-utils.d.ts +10 -0
  43. package/dist/core/group/extractors/fs-utils.js +24 -0
  44. package/dist/core/group/extractors/grpc-extractor.d.ts +25 -0
  45. package/dist/core/group/extractors/grpc-extractor.js +386 -0
  46. package/dist/core/group/extractors/grpc-patterns/go.d.ts +2 -0
  47. package/dist/core/group/extractors/grpc-patterns/go.js +97 -0
  48. package/dist/core/group/extractors/grpc-patterns/index.d.ts +19 -0
  49. package/dist/core/group/extractors/grpc-patterns/index.js +46 -0
  50. package/dist/core/group/extractors/grpc-patterns/java.d.ts +2 -0
  51. package/dist/core/group/extractors/grpc-patterns/java.js +173 -0
  52. package/dist/core/group/extractors/grpc-patterns/node.d.ts +4 -0
  53. package/dist/core/group/extractors/grpc-patterns/node.js +290 -0
  54. package/dist/core/group/extractors/grpc-patterns/proto.d.ts +9 -0
  55. package/dist/core/group/extractors/grpc-patterns/proto.js +134 -0
  56. package/dist/core/group/extractors/grpc-patterns/python.d.ts +2 -0
  57. package/dist/core/group/extractors/grpc-patterns/python.js +67 -0
  58. package/dist/core/group/extractors/grpc-patterns/types.d.ts +50 -0
  59. package/dist/core/group/extractors/grpc-patterns/types.js +1 -0
  60. package/dist/core/group/extractors/http-patterns/go.d.ts +2 -0
  61. package/dist/core/group/extractors/http-patterns/go.js +215 -0
  62. package/dist/core/group/extractors/http-patterns/index.d.ts +17 -0
  63. package/dist/core/group/extractors/http-patterns/index.js +44 -0
  64. package/dist/core/group/extractors/http-patterns/java.d.ts +2 -0
  65. package/dist/core/group/extractors/http-patterns/java.js +253 -0
  66. package/dist/core/group/extractors/http-patterns/node.d.ts +4 -0
  67. package/dist/core/group/extractors/http-patterns/node.js +354 -0
  68. package/dist/core/group/extractors/http-patterns/php.d.ts +2 -0
  69. package/dist/core/group/extractors/http-patterns/php.js +70 -0
  70. package/dist/core/group/extractors/http-patterns/python.d.ts +2 -0
  71. package/dist/core/group/extractors/http-patterns/python.js +133 -0
  72. package/dist/core/group/extractors/http-patterns/types.d.ts +61 -0
  73. package/dist/core/group/extractors/http-patterns/types.js +1 -0
  74. package/dist/core/group/extractors/http-route-extractor.d.ts +21 -0
  75. package/dist/core/group/extractors/http-route-extractor.js +391 -0
  76. package/dist/core/group/extractors/manifest-extractor.d.ts +54 -0
  77. package/dist/core/group/extractors/manifest-extractor.js +235 -0
  78. package/dist/core/group/extractors/topic-extractor.d.ts +8 -0
  79. package/dist/core/group/extractors/topic-extractor.js +97 -0
  80. package/dist/core/group/extractors/topic-patterns/go.d.ts +2 -0
  81. package/dist/core/group/extractors/topic-patterns/go.js +120 -0
  82. package/dist/core/group/extractors/topic-patterns/index.d.ts +14 -0
  83. package/dist/core/group/extractors/topic-patterns/index.js +38 -0
  84. package/dist/core/group/extractors/topic-patterns/java.d.ts +2 -0
  85. package/dist/core/group/extractors/topic-patterns/java.js +80 -0
  86. package/dist/core/group/extractors/topic-patterns/node.d.ts +4 -0
  87. package/dist/core/group/extractors/topic-patterns/node.js +155 -0
  88. package/dist/core/group/extractors/topic-patterns/python.d.ts +2 -0
  89. package/dist/core/group/extractors/topic-patterns/python.js +116 -0
  90. package/dist/core/group/extractors/topic-patterns/types.d.ts +25 -0
  91. package/dist/core/group/extractors/topic-patterns/types.js +10 -0
  92. package/dist/core/group/extractors/tree-sitter-scanner.d.ts +113 -0
  93. package/dist/core/group/extractors/tree-sitter-scanner.js +94 -0
  94. package/dist/core/group/matching.d.ts +13 -0
  95. package/dist/core/group/matching.js +198 -0
  96. package/dist/core/group/normalization.d.ts +3 -0
  97. package/dist/core/group/normalization.js +115 -0
  98. package/dist/core/group/service-boundary-detector.d.ts +8 -0
  99. package/dist/core/group/service-boundary-detector.js +155 -0
  100. package/dist/core/group/service.d.ts +46 -0
  101. package/dist/core/group/service.js +160 -0
  102. package/dist/core/group/storage.d.ts +9 -0
  103. package/dist/core/group/storage.js +91 -0
  104. package/dist/core/group/sync.d.ts +21 -0
  105. package/dist/core/group/sync.js +148 -0
  106. package/dist/core/group/types.d.ts +130 -0
  107. package/dist/core/group/types.js +1 -0
  108. package/dist/core/ingestion/binding-accumulator.d.ts +212 -0
  109. package/dist/core/ingestion/binding-accumulator.js +336 -0
  110. package/dist/core/ingestion/call-processor.d.ts +155 -24
  111. package/dist/core/ingestion/call-processor.js +1129 -247
  112. package/dist/core/ingestion/class-extractors/generic.d.ts +2 -0
  113. package/dist/core/ingestion/class-extractors/generic.js +135 -0
  114. package/dist/core/ingestion/class-types.d.ts +34 -0
  115. package/dist/core/ingestion/class-types.js +1 -0
  116. package/dist/core/ingestion/cobol-processor.d.ts +1 -1
  117. package/dist/core/ingestion/entry-point-scoring.d.ts +1 -0
  118. package/dist/core/ingestion/entry-point-scoring.js +1 -0
  119. package/dist/core/ingestion/field-types.d.ts +2 -2
  120. package/dist/core/ingestion/filesystem-walker.js +8 -0
  121. package/dist/core/ingestion/framework-detection.d.ts +1 -0
  122. package/dist/core/ingestion/framework-detection.js +1 -0
  123. package/dist/core/ingestion/heritage-processor.d.ts +8 -15
  124. package/dist/core/ingestion/heritage-processor.js +15 -28
  125. package/dist/core/ingestion/import-processor.d.ts +1 -11
  126. package/dist/core/ingestion/import-processor.js +1 -13
  127. package/dist/core/ingestion/import-resolvers/utils.js +1 -0
  128. package/dist/core/ingestion/import-resolvers/vue.d.ts +8 -0
  129. package/dist/core/ingestion/import-resolvers/vue.js +9 -0
  130. package/dist/core/ingestion/language-config.js +1 -1
  131. package/dist/core/ingestion/language-provider.d.ts +14 -3
  132. package/dist/core/ingestion/languages/c-cpp.js +168 -1
  133. package/dist/core/ingestion/languages/csharp.js +20 -0
  134. package/dist/core/ingestion/languages/dart.js +26 -4
  135. package/dist/core/ingestion/languages/go.js +22 -0
  136. package/dist/core/ingestion/languages/index.d.ts +1 -0
  137. package/dist/core/ingestion/languages/index.js +2 -0
  138. package/dist/core/ingestion/languages/java.js +17 -0
  139. package/dist/core/ingestion/languages/kotlin.js +24 -1
  140. package/dist/core/ingestion/languages/php.js +23 -11
  141. package/dist/core/ingestion/languages/python.js +9 -0
  142. package/dist/core/ingestion/languages/ruby.js +43 -0
  143. package/dist/core/ingestion/languages/rust.js +38 -0
  144. package/dist/core/ingestion/languages/swift.js +31 -0
  145. package/dist/core/ingestion/languages/typescript.d.ts +1 -0
  146. package/dist/core/ingestion/languages/typescript.js +52 -3
  147. package/dist/core/ingestion/languages/vue.d.ts +13 -0
  148. package/dist/core/ingestion/languages/vue.js +81 -0
  149. package/dist/core/ingestion/markdown-processor.d.ts +1 -1
  150. package/dist/core/ingestion/method-extractors/configs/c-cpp.d.ts +3 -0
  151. package/dist/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
  152. package/dist/core/ingestion/method-extractors/configs/csharp.js +5 -1
  153. package/dist/core/ingestion/method-extractors/configs/dart.d.ts +2 -0
  154. package/dist/core/ingestion/method-extractors/configs/dart.js +376 -0
  155. package/dist/core/ingestion/method-extractors/configs/go.d.ts +2 -0
  156. package/dist/core/ingestion/method-extractors/configs/go.js +176 -0
  157. package/dist/core/ingestion/method-extractors/configs/jvm.js +14 -4
  158. package/dist/core/ingestion/method-extractors/configs/php.d.ts +2 -0
  159. package/dist/core/ingestion/method-extractors/configs/php.js +304 -0
  160. package/dist/core/ingestion/method-extractors/configs/python.d.ts +2 -0
  161. package/dist/core/ingestion/method-extractors/configs/python.js +309 -0
  162. package/dist/core/ingestion/method-extractors/configs/ruby.d.ts +2 -0
  163. package/dist/core/ingestion/method-extractors/configs/ruby.js +286 -0
  164. package/dist/core/ingestion/method-extractors/configs/rust.d.ts +2 -0
  165. package/dist/core/ingestion/method-extractors/configs/rust.js +195 -0
  166. package/dist/core/ingestion/method-extractors/configs/swift.d.ts +2 -0
  167. package/dist/core/ingestion/method-extractors/configs/swift.js +277 -0
  168. package/dist/core/ingestion/method-extractors/configs/typescript-javascript.js +85 -8
  169. package/dist/core/ingestion/method-extractors/generic.d.ts +6 -0
  170. package/dist/core/ingestion/method-extractors/generic.js +84 -17
  171. package/dist/core/ingestion/method-types.d.ts +29 -0
  172. package/dist/core/ingestion/model/field-registry.d.ts +18 -0
  173. package/dist/core/ingestion/model/field-registry.js +22 -0
  174. package/dist/core/ingestion/model/heritage-map.d.ts +70 -0
  175. package/dist/core/ingestion/model/heritage-map.js +159 -0
  176. package/dist/core/ingestion/model/index.d.ts +20 -0
  177. package/dist/core/ingestion/model/index.js +41 -0
  178. package/dist/core/ingestion/model/method-registry.d.ts +62 -0
  179. package/dist/core/ingestion/model/method-registry.js +130 -0
  180. package/dist/core/ingestion/model/registration-table.d.ts +139 -0
  181. package/dist/core/ingestion/model/registration-table.js +224 -0
  182. package/dist/core/ingestion/model/resolution-context.d.ts +93 -0
  183. package/dist/core/ingestion/model/resolution-context.js +337 -0
  184. package/dist/core/ingestion/model/resolve.d.ts +56 -0
  185. package/dist/core/ingestion/model/resolve.js +297 -0
  186. package/dist/core/ingestion/model/semantic-model.d.ts +86 -0
  187. package/dist/core/ingestion/model/semantic-model.js +120 -0
  188. package/dist/core/ingestion/model/symbol-table.d.ts +222 -0
  189. package/dist/core/ingestion/model/symbol-table.js +206 -0
  190. package/dist/core/ingestion/model/type-registry.d.ts +39 -0
  191. package/dist/core/ingestion/model/type-registry.js +62 -0
  192. package/dist/core/ingestion/mro-processor.d.ts +5 -4
  193. package/dist/core/ingestion/mro-processor.js +311 -107
  194. package/dist/core/ingestion/parsing-processor.d.ts +5 -4
  195. package/dist/core/ingestion/parsing-processor.js +224 -87
  196. package/dist/core/ingestion/pipeline-phases/cobol.d.ts +16 -0
  197. package/dist/core/ingestion/pipeline-phases/cobol.js +45 -0
  198. package/dist/core/ingestion/pipeline-phases/communities.d.ts +16 -0
  199. package/dist/core/ingestion/pipeline-phases/communities.js +62 -0
  200. package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +17 -0
  201. package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +156 -0
  202. package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +37 -0
  203. package/dist/core/ingestion/pipeline-phases/cross-file.js +63 -0
  204. package/dist/core/ingestion/pipeline-phases/index.d.ts +21 -0
  205. package/dist/core/ingestion/pipeline-phases/index.js +22 -0
  206. package/dist/core/ingestion/pipeline-phases/markdown.d.ts +17 -0
  207. package/dist/core/ingestion/pipeline-phases/markdown.js +33 -0
  208. package/dist/core/ingestion/pipeline-phases/mro.d.ts +18 -0
  209. package/dist/core/ingestion/pipeline-phases/mro.js +36 -0
  210. package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +22 -0
  211. package/dist/core/ingestion/pipeline-phases/orm-extraction.js +92 -0
  212. package/dist/core/ingestion/pipeline-phases/orm.d.ts +15 -0
  213. package/dist/core/ingestion/pipeline-phases/orm.js +74 -0
  214. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +47 -0
  215. package/dist/core/ingestion/pipeline-phases/parse-impl.js +437 -0
  216. package/dist/core/ingestion/pipeline-phases/parse.d.ts +49 -0
  217. package/dist/core/ingestion/pipeline-phases/parse.js +33 -0
  218. package/dist/core/ingestion/pipeline-phases/processes.d.ts +16 -0
  219. package/dist/core/ingestion/pipeline-phases/processes.js +143 -0
  220. package/dist/core/ingestion/pipeline-phases/routes.d.ts +21 -0
  221. package/dist/core/ingestion/pipeline-phases/routes.js +243 -0
  222. package/dist/core/ingestion/pipeline-phases/runner.d.ts +22 -0
  223. package/dist/core/ingestion/pipeline-phases/runner.js +203 -0
  224. package/dist/core/ingestion/pipeline-phases/scan.d.ts +21 -0
  225. package/dist/core/ingestion/pipeline-phases/scan.js +46 -0
  226. package/dist/core/ingestion/pipeline-phases/structure.d.ts +27 -0
  227. package/dist/core/ingestion/pipeline-phases/structure.js +35 -0
  228. package/dist/core/ingestion/pipeline-phases/tools.d.ts +20 -0
  229. package/dist/core/ingestion/pipeline-phases/tools.js +79 -0
  230. package/dist/core/ingestion/pipeline-phases/types.d.ts +79 -0
  231. package/dist/core/ingestion/pipeline-phases/types.js +37 -0
  232. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +35 -0
  233. package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +174 -0
  234. package/dist/core/ingestion/pipeline.d.ts +18 -10
  235. package/dist/core/ingestion/pipeline.js +66 -1410
  236. package/dist/core/ingestion/process-processor.js +1 -1
  237. package/dist/core/ingestion/tree-sitter-queries.d.ts +5 -5
  238. package/dist/core/ingestion/tree-sitter-queries.js +90 -0
  239. package/dist/core/ingestion/type-env.d.ts +15 -2
  240. package/dist/core/ingestion/type-env.js +163 -102
  241. package/dist/core/ingestion/type-extractors/csharp.js +17 -0
  242. package/dist/core/ingestion/type-extractors/jvm.js +11 -0
  243. package/dist/core/ingestion/type-extractors/php.js +0 -55
  244. package/dist/core/ingestion/type-extractors/ruby.js +0 -32
  245. package/dist/core/ingestion/type-extractors/swift.js +13 -0
  246. package/dist/core/ingestion/type-extractors/types.d.ts +8 -8
  247. package/dist/core/ingestion/type-extractors/typescript.js +66 -69
  248. package/dist/core/ingestion/utils/ast-helpers.d.ts +32 -44
  249. package/dist/core/ingestion/utils/ast-helpers.js +157 -573
  250. package/dist/core/ingestion/utils/env.d.ts +10 -0
  251. package/dist/core/ingestion/utils/env.js +10 -0
  252. package/dist/core/ingestion/utils/graph-sort.d.ts +58 -0
  253. package/dist/core/ingestion/utils/graph-sort.js +100 -0
  254. package/dist/core/ingestion/utils/method-props.d.ts +32 -0
  255. package/dist/core/ingestion/utils/method-props.js +147 -0
  256. package/dist/core/ingestion/vue-sfc-extractor.d.ts +44 -0
  257. package/dist/core/ingestion/vue-sfc-extractor.js +94 -0
  258. package/dist/core/ingestion/workers/parse-worker.d.ts +31 -19
  259. package/dist/core/ingestion/workers/parse-worker.js +469 -200
  260. package/dist/core/lbug/lbug-adapter.d.ts +6 -0
  261. package/dist/core/lbug/lbug-adapter.js +134 -27
  262. package/dist/core/lbug/pool-adapter.d.ts +76 -0
  263. package/dist/core/lbug/pool-adapter.js +522 -0
  264. package/dist/core/run-analyze.d.ts +2 -0
  265. package/dist/core/run-analyze.js +1 -1
  266. package/dist/core/search/bm25-index.js +1 -1
  267. package/dist/core/tree-sitter/parser-loader.js +1 -0
  268. package/dist/core/wiki/graph-queries.js +1 -1
  269. package/dist/mcp/core/embedder.js +6 -5
  270. package/dist/mcp/core/lbug-adapter.d.ts +3 -63
  271. package/dist/mcp/core/lbug-adapter.js +3 -484
  272. package/dist/mcp/local/local-backend.d.ts +31 -2
  273. package/dist/mcp/local/local-backend.js +255 -46
  274. package/dist/mcp/resources.js +5 -4
  275. package/dist/mcp/staleness.d.ts +3 -13
  276. package/dist/mcp/staleness.js +2 -31
  277. package/dist/mcp/tools.js +80 -4
  278. package/dist/server/analyze-job.d.ts +2 -0
  279. package/dist/server/analyze-job.js +4 -0
  280. package/dist/server/api.d.ts +20 -1
  281. package/dist/server/api.js +306 -71
  282. package/dist/server/git-clone.d.ts +2 -1
  283. package/dist/server/git-clone.js +98 -5
  284. package/dist/storage/git.d.ts +13 -0
  285. package/dist/storage/git.js +25 -0
  286. package/dist/storage/repo-manager.js +1 -1
  287. package/package.json +9 -3
  288. package/scripts/patch-tree-sitter-swift.cjs +78 -0
  289. package/vendor/tree-sitter-proto/binding.gyp +30 -0
  290. package/vendor/tree-sitter-proto/bindings/node/binding.cc +20 -0
  291. package/vendor/tree-sitter-proto/bindings/node/index.d.ts +28 -0
  292. package/vendor/tree-sitter-proto/bindings/node/index.js +7 -0
  293. package/vendor/tree-sitter-proto/package.json +18 -0
  294. package/vendor/tree-sitter-proto/src/node-types.json +1145 -0
  295. package/vendor/tree-sitter-proto/src/parser.c +10149 -0
  296. package/vendor/tree-sitter-proto/src/tree_sitter/alloc.h +54 -0
  297. package/vendor/tree-sitter-proto/src/tree_sitter/array.h +291 -0
  298. package/vendor/tree-sitter-proto/src/tree_sitter/parser.h +266 -0
  299. package/dist/core/ingestion/named-binding-processor.d.ts +0 -18
  300. package/dist/core/ingestion/named-binding-processor.js +0 -42
  301. package/dist/core/ingestion/resolution-context.d.ts +0 -58
  302. package/dist/core/ingestion/resolution-context.js +0 -135
  303. package/dist/core/ingestion/symbol-table.d.ts +0 -79
  304. package/dist/core/ingestion/symbol-table.js +0 -115
@@ -1,58 +0,0 @@
1
- /**
2
- * Resolution Context
3
- *
4
- * Single implementation of tiered name resolution. Replaces the duplicated
5
- * tier-selection logic previously split between symbol-resolver.ts and
6
- * call-processor.ts.
7
- *
8
- * Resolution tiers (highest confidence first):
9
- * 1. Same file (lookupExactFull — authoritative)
10
- * 2a-named. Named binding chain (walkBindingChain via NamedImportMap)
11
- * 2a. Import-scoped (lookupFuzzy filtered by ImportMap)
12
- * 2b. Package-scoped (lookupFuzzy filtered by PackageMap)
13
- * 3. Global (all candidates — consumers must check candidate count)
14
- */
15
- import type { SymbolTable, SymbolDefinition } from './symbol-table.js';
16
- import type { NamedImportBinding } from './import-processor.js';
17
- /** Resolution tier for tracking, logging, and test assertions. */
18
- export type ResolutionTier = 'same-file' | 'import-scoped' | 'global';
19
- /** Tier-selected candidates with metadata. */
20
- export interface TieredCandidates {
21
- readonly candidates: readonly SymbolDefinition[];
22
- readonly tier: ResolutionTier;
23
- }
24
- /** Confidence scores per resolution tier. */
25
- export declare const TIER_CONFIDENCE: Record<ResolutionTier, number>;
26
- export type ImportMap = Map<string, Set<string>>;
27
- export type PackageMap = Map<string, Set<string>>;
28
- export type NamedImportMap = Map<string, Map<string, NamedImportBinding>>;
29
- /** Maps callerFile → (moduleAlias → sourceFilePath) for Python namespace imports.
30
- * e.g. `import models` in app.py → moduleAliasMap.get('app.py')?.get('models') === 'models.py' */
31
- export type ModuleAliasMap = Map<string, Map<string, string>>;
32
- export interface ResolutionContext {
33
- /**
34
- * The only resolution API. Returns all candidates at the winning tier.
35
- *
36
- * Tier 3 ('global') returns ALL candidates regardless of count —
37
- * consumers must check candidates.length and refuse ambiguous matches.
38
- */
39
- resolve(name: string, fromFile: string): TieredCandidates | null;
40
- /** Symbol table — used by parsing-processor to populate symbols. */
41
- readonly symbols: SymbolTable;
42
- /** Raw maps — used by import-processor to populate import data. */
43
- readonly importMap: ImportMap;
44
- readonly packageMap: PackageMap;
45
- readonly namedImportMap: NamedImportMap;
46
- /** Module-alias map for Python namespace imports: callerFile → (alias → sourceFile). */
47
- readonly moduleAliasMap: ModuleAliasMap;
48
- enableCache(filePath: string): void;
49
- clearCache(): void;
50
- getStats(): {
51
- fileCount: number;
52
- globalSymbolCount: number;
53
- cacheHits: number;
54
- cacheMisses: number;
55
- };
56
- clear(): void;
57
- }
58
- export declare const createResolutionContext: () => ResolutionContext;
@@ -1,135 +0,0 @@
1
- /**
2
- * Resolution Context
3
- *
4
- * Single implementation of tiered name resolution. Replaces the duplicated
5
- * tier-selection logic previously split between symbol-resolver.ts and
6
- * call-processor.ts.
7
- *
8
- * Resolution tiers (highest confidence first):
9
- * 1. Same file (lookupExactFull — authoritative)
10
- * 2a-named. Named binding chain (walkBindingChain via NamedImportMap)
11
- * 2a. Import-scoped (lookupFuzzy filtered by ImportMap)
12
- * 2b. Package-scoped (lookupFuzzy filtered by PackageMap)
13
- * 3. Global (all candidates — consumers must check candidate count)
14
- */
15
- import { createSymbolTable } from './symbol-table.js';
16
- import { isFileInPackageDir } from './import-processor.js';
17
- import { walkBindingChain } from './named-binding-processor.js';
18
- /** Confidence scores per resolution tier. */
19
- export const TIER_CONFIDENCE = {
20
- 'same-file': 0.95,
21
- 'import-scoped': 0.9,
22
- global: 0.5,
23
- };
24
- export const createResolutionContext = () => {
25
- const symbols = createSymbolTable();
26
- const importMap = new Map();
27
- const packageMap = new Map();
28
- const namedImportMap = new Map();
29
- const moduleAliasMap = new Map();
30
- // Per-file cache state
31
- let cacheFile = null;
32
- let cache = null;
33
- let cacheHits = 0;
34
- let cacheMisses = 0;
35
- // --- Core resolution (single implementation of tier logic) ---
36
- const resolveUncached = (name, fromFile) => {
37
- // Tier 1: Same file — authoritative match (returns all overloads)
38
- const localDefs = symbols.lookupExactAll(fromFile, name);
39
- if (localDefs.length > 0) {
40
- return { candidates: localDefs, tier: 'same-file' };
41
- }
42
- // Get all global definitions for subsequent tiers
43
- const allDefs = symbols.lookupFuzzy(name);
44
- // Tier 2a-named: Check named bindings BEFORE empty-allDefs early return
45
- // because aliased imports mean lookupFuzzy('U') returns empty but we
46
- // can resolve via the exported name.
47
- const chainResult = walkBindingChain(name, fromFile, symbols, namedImportMap, allDefs);
48
- if (chainResult && chainResult.length > 0) {
49
- return { candidates: chainResult, tier: 'import-scoped' };
50
- }
51
- if (allDefs.length === 0)
52
- return null;
53
- // Tier 2a: Import-scoped — definition in a file imported by fromFile
54
- const importedFiles = importMap.get(fromFile);
55
- if (importedFiles) {
56
- const importedDefs = allDefs.filter((def) => importedFiles.has(def.filePath));
57
- if (importedDefs.length > 0) {
58
- return { candidates: importedDefs, tier: 'import-scoped' };
59
- }
60
- }
61
- // Tier 2b: Package-scoped — definition in a package dir imported by fromFile
62
- const importedPackages = packageMap.get(fromFile);
63
- if (importedPackages) {
64
- const packageDefs = allDefs.filter((def) => {
65
- for (const dirSuffix of importedPackages) {
66
- if (isFileInPackageDir(def.filePath, dirSuffix))
67
- return true;
68
- }
69
- return false;
70
- });
71
- if (packageDefs.length > 0) {
72
- return { candidates: packageDefs, tier: 'import-scoped' };
73
- }
74
- }
75
- // Tier 3: Global — pass all candidates through.
76
- // Consumers must check candidate count and refuse ambiguous matches.
77
- return { candidates: allDefs, tier: 'global' };
78
- };
79
- const resolve = (name, fromFile) => {
80
- // Check cache (only when enabled AND fromFile matches cached file)
81
- if (cache && cacheFile === fromFile) {
82
- if (cache.has(name)) {
83
- cacheHits++;
84
- return cache.get(name);
85
- }
86
- cacheMisses++;
87
- }
88
- const result = resolveUncached(name, fromFile);
89
- // Store in cache if active and file matches
90
- if (cache && cacheFile === fromFile) {
91
- cache.set(name, result);
92
- }
93
- return result;
94
- };
95
- // --- Cache lifecycle ---
96
- const enableCache = (filePath) => {
97
- cacheFile = filePath;
98
- if (!cache)
99
- cache = new Map();
100
- else
101
- cache.clear();
102
- };
103
- const clearCache = () => {
104
- cacheFile = null;
105
- // Reuse the Map instance — just clear entries to reduce GC pressure at scale.
106
- cache?.clear();
107
- };
108
- const getStats = () => ({
109
- ...symbols.getStats(),
110
- cacheHits,
111
- cacheMisses,
112
- });
113
- const clear = () => {
114
- symbols.clear();
115
- importMap.clear();
116
- packageMap.clear();
117
- namedImportMap.clear();
118
- moduleAliasMap.clear();
119
- clearCache();
120
- cacheHits = 0;
121
- cacheMisses = 0;
122
- };
123
- return {
124
- resolve,
125
- symbols,
126
- importMap,
127
- packageMap,
128
- namedImportMap,
129
- moduleAliasMap,
130
- enableCache,
131
- clearCache,
132
- getStats,
133
- clear,
134
- };
135
- };
@@ -1,79 +0,0 @@
1
- import type { NodeLabel } from '../../_shared/index.js';
2
- export interface SymbolDefinition {
3
- nodeId: string;
4
- filePath: string;
5
- type: NodeLabel;
6
- parameterCount?: number;
7
- /** Number of required (non-optional, non-default) parameters.
8
- * Enables range-based arity filtering: argCount >= requiredParameterCount && argCount <= parameterCount. */
9
- requiredParameterCount?: number;
10
- /** Per-parameter type names for overload disambiguation (e.g. ['int', 'String']).
11
- * Populated when parameter types are resolvable from AST (any typed language).
12
- * Used for disambiguation in overloading languages (Java, Kotlin, C#, C++). */
13
- parameterTypes?: string[];
14
- /** Raw return type text extracted from AST (e.g. 'User', 'Promise<User>') */
15
- returnType?: string;
16
- /** Declared type for non-callable symbols — fields/properties (e.g. 'Address', 'List<User>') */
17
- declaredType?: string;
18
- /** Links Method/Constructor/Property to owning Class/Struct/Trait nodeId */
19
- ownerId?: string;
20
- }
21
- export interface SymbolTable {
22
- /**
23
- * Register a new symbol definition
24
- */
25
- add: (filePath: string, name: string, nodeId: string, type: NodeLabel, metadata?: {
26
- parameterCount?: number;
27
- requiredParameterCount?: number;
28
- parameterTypes?: string[];
29
- returnType?: string;
30
- declaredType?: string;
31
- ownerId?: string;
32
- }) => void;
33
- /**
34
- * High Confidence: Look for a symbol specifically inside a file
35
- * Returns the Node ID if found
36
- */
37
- lookupExact: (filePath: string, name: string) => string | undefined;
38
- /**
39
- * High Confidence: Look for a symbol in a specific file, returning full definition.
40
- * Includes type information needed for heritage resolution (Class vs Interface).
41
- * Returns first matching definition — use lookupExactAll for overloaded methods.
42
- */
43
- lookupExactFull: (filePath: string, name: string) => SymbolDefinition | undefined;
44
- /**
45
- * High Confidence: Look for ALL symbols with this name in a specific file.
46
- * Returns all definitions, including overloaded methods with the same name.
47
- * Used by resolution-context to pass all same-file overloads to candidate filtering.
48
- */
49
- lookupExactAll: (filePath: string, name: string) => SymbolDefinition[];
50
- /**
51
- * Low Confidence: Look for a symbol anywhere in the project
52
- * Used when imports are missing or for framework magic
53
- */
54
- lookupFuzzy: (name: string) => SymbolDefinition[];
55
- /**
56
- * Low Confidence: Look for callable symbols (Function/Method/Constructor) by name.
57
- * Faster than `lookupFuzzy` + filter — backed by a lazy callable-only index.
58
- * Used by ReturnTypeLookup to resolve callee → return type.
59
- */
60
- lookupFuzzyCallable: (name: string) => SymbolDefinition[];
61
- /**
62
- * Look up a field/property by its owning class nodeId and field name.
63
- * O(1) via dedicated eagerly-populated index keyed by `ownerNodeId\0fieldName`.
64
- * Returns undefined when no matching property exists or the owner is ambiguous.
65
- */
66
- lookupFieldByOwner: (ownerNodeId: string, fieldName: string) => SymbolDefinition | undefined;
67
- /**
68
- * Debugging: See how many symbols are tracked
69
- */
70
- getStats: () => {
71
- fileCount: number;
72
- globalSymbolCount: number;
73
- };
74
- /**
75
- * Cleanup memory
76
- */
77
- clear: () => void;
78
- }
79
- export declare const createSymbolTable: () => SymbolTable;
@@ -1,115 +0,0 @@
1
- export const createSymbolTable = () => {
2
- // 1. File-Specific Index — stores full SymbolDefinition(s) for O(1) lookup.
3
- // Structure: FilePath -> (SymbolName -> SymbolDefinition[])
4
- // Array allows overloaded methods (same name, different signatures) to coexist.
5
- const fileIndex = new Map();
6
- // 2. Global Reverse Index (The "Backup")
7
- // Structure: SymbolName -> [List of Definitions]
8
- const globalIndex = new Map();
9
- // 3. Lazy Callable Index — populated on first lookupFuzzyCallable call.
10
- // Structure: SymbolName -> [Callable Definitions]
11
- // Only Function, Method, Constructor symbols are indexed.
12
- let callableIndex = null;
13
- // 4. Eagerly-populated Field/Property Index — keyed by "ownerNodeId\0fieldName".
14
- // Only Property symbols with ownerId and declaredType are indexed.
15
- const fieldByOwner = new Map();
16
- const CALLABLE_TYPES = new Set(['Function', 'Method', 'Constructor']);
17
- const add = (filePath, name, nodeId, type, metadata) => {
18
- const def = {
19
- nodeId,
20
- filePath,
21
- type,
22
- ...(metadata?.parameterCount !== undefined
23
- ? { parameterCount: metadata.parameterCount }
24
- : {}),
25
- ...(metadata?.requiredParameterCount !== undefined
26
- ? { requiredParameterCount: metadata.requiredParameterCount }
27
- : {}),
28
- ...(metadata?.parameterTypes !== undefined
29
- ? { parameterTypes: metadata.parameterTypes }
30
- : {}),
31
- ...(metadata?.returnType !== undefined ? { returnType: metadata.returnType } : {}),
32
- ...(metadata?.declaredType !== undefined ? { declaredType: metadata.declaredType } : {}),
33
- ...(metadata?.ownerId !== undefined ? { ownerId: metadata.ownerId } : {}),
34
- };
35
- // A. Add to File Index (shared reference — zero additional memory)
36
- if (!fileIndex.has(filePath)) {
37
- fileIndex.set(filePath, new Map());
38
- }
39
- const fileMap = fileIndex.get(filePath);
40
- if (!fileMap.has(name)) {
41
- fileMap.set(name, [def]);
42
- }
43
- else {
44
- fileMap.get(name).push(def);
45
- }
46
- // B. Properties go to fieldByOwner index only — skip globalIndex to prevent
47
- // namespace pollution for common names like 'id', 'name', 'type'.
48
- // Index ALL properties (even without declaredType) so write-access tracking
49
- // can resolve field ownership for dynamically-typed languages (Ruby, JS).
50
- if (type === 'Property' && metadata?.ownerId) {
51
- fieldByOwner.set(`${metadata.ownerId}\0${name}`, def);
52
- // Still add to fileIndex above (for lookupExact), but skip globalIndex
53
- return;
54
- }
55
- // C. Add to Global Index (same object reference)
56
- if (!globalIndex.has(name)) {
57
- globalIndex.set(name, []);
58
- }
59
- globalIndex.get(name).push(def);
60
- // D. Invalidate the lazy callable index only when adding callable types
61
- if (CALLABLE_TYPES.has(type)) {
62
- callableIndex = null;
63
- }
64
- };
65
- const lookupExact = (filePath, name) => {
66
- const defs = fileIndex.get(filePath)?.get(name);
67
- return defs?.[0]?.nodeId;
68
- };
69
- const lookupExactFull = (filePath, name) => {
70
- const defs = fileIndex.get(filePath)?.get(name);
71
- return defs?.[0];
72
- };
73
- const lookupExactAll = (filePath, name) => {
74
- return fileIndex.get(filePath)?.get(name) ?? [];
75
- };
76
- const lookupFuzzy = (name) => {
77
- return globalIndex.get(name) || [];
78
- };
79
- const lookupFuzzyCallable = (name) => {
80
- if (!callableIndex) {
81
- // Build the callable index lazily on first use
82
- callableIndex = new Map();
83
- for (const [symName, defs] of globalIndex) {
84
- const callables = defs.filter((d) => CALLABLE_TYPES.has(d.type));
85
- if (callables.length > 0)
86
- callableIndex.set(symName, callables);
87
- }
88
- }
89
- return callableIndex.get(name) ?? [];
90
- };
91
- const lookupFieldByOwner = (ownerNodeId, fieldName) => {
92
- return fieldByOwner.get(`${ownerNodeId}\0${fieldName}`);
93
- };
94
- const getStats = () => ({
95
- fileCount: fileIndex.size,
96
- globalSymbolCount: globalIndex.size,
97
- });
98
- const clear = () => {
99
- fileIndex.clear();
100
- globalIndex.clear();
101
- callableIndex = null;
102
- fieldByOwner.clear();
103
- };
104
- return {
105
- add,
106
- lookupExact,
107
- lookupExactFull,
108
- lookupExactAll,
109
- lookupFuzzy,
110
- lookupFuzzyCallable,
111
- lookupFieldByOwner,
112
- getStats,
113
- clear,
114
- };
115
- };