cotx-engine 0.1.0

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 (501) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +103 -0
  3. package/dist/commands/compile.d.ts +3 -0
  4. package/dist/commands/compile.js +93 -0
  5. package/dist/commands/compile.js.map +1 -0
  6. package/dist/commands/context.d.ts +1 -0
  7. package/dist/commands/context.js +98 -0
  8. package/dist/commands/context.js.map +1 -0
  9. package/dist/commands/diff.d.ts +19 -0
  10. package/dist/commands/diff.js +127 -0
  11. package/dist/commands/diff.js.map +1 -0
  12. package/dist/commands/impact.d.ts +3 -0
  13. package/dist/commands/impact.js +91 -0
  14. package/dist/commands/impact.js.map +1 -0
  15. package/dist/commands/init.d.ts +1 -0
  16. package/dist/commands/init.js +13 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/lint.d.ts +13 -0
  19. package/dist/commands/lint.js +290 -0
  20. package/dist/commands/lint.js.map +1 -0
  21. package/dist/commands/map.d.ts +6 -0
  22. package/dist/commands/map.js +409 -0
  23. package/dist/commands/map.js.map +1 -0
  24. package/dist/commands/migrate.d.ts +16 -0
  25. package/dist/commands/migrate.js +150 -0
  26. package/dist/commands/migrate.js.map +1 -0
  27. package/dist/commands/query.d.ts +3 -0
  28. package/dist/commands/query.js +47 -0
  29. package/dist/commands/query.js.map +1 -0
  30. package/dist/commands/rename.d.ts +5 -0
  31. package/dist/commands/rename.js +163 -0
  32. package/dist/commands/rename.js.map +1 -0
  33. package/dist/commands/snapshot.d.ts +6 -0
  34. package/dist/commands/snapshot.js +48 -0
  35. package/dist/commands/snapshot.js.map +1 -0
  36. package/dist/commands/status.d.ts +1 -0
  37. package/dist/commands/status.js +72 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/update.d.ts +8 -0
  40. package/dist/commands/update.js +163 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/commands/write.d.ts +6 -0
  43. package/dist/commands/write.js +221 -0
  44. package/dist/commands/write.js.map +1 -0
  45. package/dist/compiler/auto-describe.d.ts +13 -0
  46. package/dist/compiler/auto-describe.js +91 -0
  47. package/dist/compiler/auto-describe.js.map +1 -0
  48. package/dist/compiler/concept-compiler.d.ts +21 -0
  49. package/dist/compiler/concept-compiler.js +125 -0
  50. package/dist/compiler/concept-compiler.js.map +1 -0
  51. package/dist/compiler/contract-compiler.d.ts +16 -0
  52. package/dist/compiler/contract-compiler.js +90 -0
  53. package/dist/compiler/contract-compiler.js.map +1 -0
  54. package/dist/compiler/delta-detector.d.ts +8 -0
  55. package/dist/compiler/delta-detector.js +34 -0
  56. package/dist/compiler/delta-detector.js.map +1 -0
  57. package/dist/compiler/flow-compiler.d.ts +18 -0
  58. package/dist/compiler/flow-compiler.js +69 -0
  59. package/dist/compiler/flow-compiler.js.map +1 -0
  60. package/dist/compiler/module-compiler.d.ts +18 -0
  61. package/dist/compiler/module-compiler.js +420 -0
  62. package/dist/compiler/module-compiler.js.map +1 -0
  63. package/dist/compiler/stale-detector.d.ts +22 -0
  64. package/dist/compiler/stale-detector.js +79 -0
  65. package/dist/compiler/stale-detector.js.map +1 -0
  66. package/dist/config/ignore-service.d.ts +26 -0
  67. package/dist/config/ignore-service.js +366 -0
  68. package/dist/config/ignore-service.js.map +1 -0
  69. package/dist/core/analysis/cluster-enricher.d.ts +38 -0
  70. package/dist/core/analysis/cluster-enricher.js +169 -0
  71. package/dist/core/analysis/cluster-enricher.js.map +1 -0
  72. package/dist/core/analysis/community-processor.d.ts +39 -0
  73. package/dist/core/analysis/community-processor.js +319 -0
  74. package/dist/core/analysis/community-processor.js.map +1 -0
  75. package/dist/core/analysis/process-processor.d.ts +51 -0
  76. package/dist/core/analysis/process-processor.js +318 -0
  77. package/dist/core/analysis/process-processor.js.map +1 -0
  78. package/dist/core/bridge.d.ts +15 -0
  79. package/dist/core/bridge.js +63 -0
  80. package/dist/core/bridge.js.map +1 -0
  81. package/dist/core/export/json-exporter.d.ts +43 -0
  82. package/dist/core/export/json-exporter.js +13 -0
  83. package/dist/core/export/json-exporter.js.map +1 -0
  84. package/dist/core/graph/graph.d.ts +2 -0
  85. package/dist/core/graph/graph.js +79 -0
  86. package/dist/core/graph/graph.js.map +1 -0
  87. package/dist/core/graph/types.d.ts +25 -0
  88. package/dist/core/graph/types.js +2 -0
  89. package/dist/core/graph/types.js.map +1 -0
  90. package/dist/core/parser/ast-cache.d.ts +11 -0
  91. package/dist/core/parser/ast-cache.js +36 -0
  92. package/dist/core/parser/ast-cache.js.map +1 -0
  93. package/dist/core/parser/call-processor.d.ts +105 -0
  94. package/dist/core/parser/call-processor.js +1807 -0
  95. package/dist/core/parser/call-processor.js.map +1 -0
  96. package/dist/core/parser/call-routing.d.ts +55 -0
  97. package/dist/core/parser/call-routing.js +113 -0
  98. package/dist/core/parser/call-routing.js.map +1 -0
  99. package/dist/core/parser/call-sites/extract-language-call-site.d.ts +10 -0
  100. package/dist/core/parser/call-sites/extract-language-call-site.js +23 -0
  101. package/dist/core/parser/call-sites/extract-language-call-site.js.map +1 -0
  102. package/dist/core/parser/call-sites/java.d.ts +9 -0
  103. package/dist/core/parser/call-sites/java.js +31 -0
  104. package/dist/core/parser/call-sites/java.js.map +1 -0
  105. package/dist/core/parser/cluster-enricher.d.ts +38 -0
  106. package/dist/core/parser/cluster-enricher.js +169 -0
  107. package/dist/core/parser/cluster-enricher.js.map +1 -0
  108. package/dist/core/parser/community-processor.d.ts +39 -0
  109. package/dist/core/parser/community-processor.js +321 -0
  110. package/dist/core/parser/community-processor.js.map +1 -0
  111. package/dist/core/parser/constants.d.ts +16 -0
  112. package/dist/core/parser/constants.js +17 -0
  113. package/dist/core/parser/constants.js.map +1 -0
  114. package/dist/core/parser/entry-point-scoring.d.ts +57 -0
  115. package/dist/core/parser/entry-point-scoring.js +377 -0
  116. package/dist/core/parser/entry-point-scoring.js.map +1 -0
  117. package/dist/core/parser/export-detection.d.ts +57 -0
  118. package/dist/core/parser/export-detection.js +234 -0
  119. package/dist/core/parser/export-detection.js.map +1 -0
  120. package/dist/core/parser/field-extractor.d.ts +34 -0
  121. package/dist/core/parser/field-extractor.js +33 -0
  122. package/dist/core/parser/field-extractor.js.map +1 -0
  123. package/dist/core/parser/field-extractors/configs/c-cpp.d.ts +16 -0
  124. package/dist/core/parser/field-extractors/configs/c-cpp.js +129 -0
  125. package/dist/core/parser/field-extractors/configs/c-cpp.js.map +1 -0
  126. package/dist/core/parser/field-extractors/configs/csharp.d.ts +15 -0
  127. package/dist/core/parser/field-extractors/configs/csharp.js +129 -0
  128. package/dist/core/parser/field-extractors/configs/csharp.js.map +1 -0
  129. package/dist/core/parser/field-extractors/configs/dart.d.ts +12 -0
  130. package/dist/core/parser/field-extractors/configs/dart.js +93 -0
  131. package/dist/core/parser/field-extractors/configs/dart.js.map +1 -0
  132. package/dist/core/parser/field-extractors/configs/go.d.ts +12 -0
  133. package/dist/core/parser/field-extractors/configs/go.js +66 -0
  134. package/dist/core/parser/field-extractors/configs/go.js.map +1 -0
  135. package/dist/core/parser/field-extractors/configs/helpers.d.ts +40 -0
  136. package/dist/core/parser/field-extractors/configs/helpers.js +118 -0
  137. package/dist/core/parser/field-extractors/configs/helpers.js.map +1 -0
  138. package/dist/core/parser/field-extractors/configs/jvm.d.ts +17 -0
  139. package/dist/core/parser/field-extractors/configs/jvm.js +139 -0
  140. package/dist/core/parser/field-extractors/configs/jvm.js.map +1 -0
  141. package/dist/core/parser/field-extractors/configs/php.d.ts +12 -0
  142. package/dist/core/parser/field-extractors/configs/php.js +69 -0
  143. package/dist/core/parser/field-extractors/configs/php.js.map +1 -0
  144. package/dist/core/parser/field-extractors/configs/python.d.ts +15 -0
  145. package/dist/core/parser/field-extractors/configs/python.js +92 -0
  146. package/dist/core/parser/field-extractors/configs/python.js.map +1 -0
  147. package/dist/core/parser/field-extractors/configs/ruby.d.ts +15 -0
  148. package/dist/core/parser/field-extractors/configs/ruby.js +68 -0
  149. package/dist/core/parser/field-extractors/configs/ruby.js.map +1 -0
  150. package/dist/core/parser/field-extractors/configs/rust.d.ts +12 -0
  151. package/dist/core/parser/field-extractors/configs/rust.js +58 -0
  152. package/dist/core/parser/field-extractors/configs/rust.js.map +1 -0
  153. package/dist/core/parser/field-extractors/configs/swift.d.ts +15 -0
  154. package/dist/core/parser/field-extractors/configs/swift.js +75 -0
  155. package/dist/core/parser/field-extractors/configs/swift.js.map +1 -0
  156. package/dist/core/parser/field-extractors/configs/typescript-javascript.d.ts +14 -0
  157. package/dist/core/parser/field-extractors/configs/typescript-javascript.js +72 -0
  158. package/dist/core/parser/field-extractors/configs/typescript-javascript.js.map +1 -0
  159. package/dist/core/parser/field-extractors/generic.d.ts +61 -0
  160. package/dist/core/parser/field-extractors/generic.js +170 -0
  161. package/dist/core/parser/field-extractors/generic.js.map +1 -0
  162. package/dist/core/parser/field-extractors/typescript.d.ts +16 -0
  163. package/dist/core/parser/field-extractors/typescript.js +167 -0
  164. package/dist/core/parser/field-extractors/typescript.js.map +1 -0
  165. package/dist/core/parser/field-types.d.ts +46 -0
  166. package/dist/core/parser/field-types.js +2 -0
  167. package/dist/core/parser/field-types.js.map +1 -0
  168. package/dist/core/parser/filesystem-walker.d.ts +28 -0
  169. package/dist/core/parser/filesystem-walker.js +82 -0
  170. package/dist/core/parser/filesystem-walker.js.map +1 -0
  171. package/dist/core/parser/framework-detection.d.ts +149 -0
  172. package/dist/core/parser/framework-detection.js +782 -0
  173. package/dist/core/parser/framework-detection.js.map +1 -0
  174. package/dist/core/parser/heritage-processor.d.ts +52 -0
  175. package/dist/core/parser/heritage-processor.js +339 -0
  176. package/dist/core/parser/heritage-processor.js.map +1 -0
  177. package/dist/core/parser/import-processor.d.ts +33 -0
  178. package/dist/core/parser/import-processor.js +382 -0
  179. package/dist/core/parser/import-processor.js.map +1 -0
  180. package/dist/core/parser/import-resolvers/csharp.d.ts +19 -0
  181. package/dist/core/parser/import-resolvers/csharp.js +132 -0
  182. package/dist/core/parser/import-resolvers/csharp.js.map +1 -0
  183. package/dist/core/parser/import-resolvers/dart.d.ts +7 -0
  184. package/dist/core/parser/import-resolvers/dart.js +45 -0
  185. package/dist/core/parser/import-resolvers/dart.js.map +1 -0
  186. package/dist/core/parser/import-resolvers/go.d.ts +18 -0
  187. package/dist/core/parser/import-resolvers/go.js +62 -0
  188. package/dist/core/parser/import-resolvers/go.js.map +1 -0
  189. package/dist/core/parser/import-resolvers/jvm.d.ts +32 -0
  190. package/dist/core/parser/import-resolvers/jvm.js +160 -0
  191. package/dist/core/parser/import-resolvers/jvm.js.map +1 -0
  192. package/dist/core/parser/import-resolvers/php.d.ts +25 -0
  193. package/dist/core/parser/import-resolvers/php.js +81 -0
  194. package/dist/core/parser/import-resolvers/php.js.map +1 -0
  195. package/dist/core/parser/import-resolvers/python.d.ts +25 -0
  196. package/dist/core/parser/import-resolvers/python.js +85 -0
  197. package/dist/core/parser/import-resolvers/python.js.map +1 -0
  198. package/dist/core/parser/import-resolvers/ruby.d.ts +15 -0
  199. package/dist/core/parser/import-resolvers/ruby.js +21 -0
  200. package/dist/core/parser/import-resolvers/ruby.js.map +1 -0
  201. package/dist/core/parser/import-resolvers/rust.d.ts +18 -0
  202. package/dist/core/parser/import-resolvers/rust.js +119 -0
  203. package/dist/core/parser/import-resolvers/rust.js.map +1 -0
  204. package/dist/core/parser/import-resolvers/standard.d.ts +36 -0
  205. package/dist/core/parser/import-resolvers/standard.js +144 -0
  206. package/dist/core/parser/import-resolvers/standard.js.map +1 -0
  207. package/dist/core/parser/import-resolvers/swift.d.ts +7 -0
  208. package/dist/core/parser/import-resolvers/swift.js +25 -0
  209. package/dist/core/parser/import-resolvers/swift.js.map +1 -0
  210. package/dist/core/parser/import-resolvers/types.d.ts +44 -0
  211. package/dist/core/parser/import-resolvers/types.js +7 -0
  212. package/dist/core/parser/import-resolvers/types.js.map +1 -0
  213. package/dist/core/parser/import-resolvers/utils.d.ts +35 -0
  214. package/dist/core/parser/import-resolvers/utils.js +150 -0
  215. package/dist/core/parser/import-resolvers/utils.js.map +1 -0
  216. package/dist/core/parser/import-resolvers/vue.d.ts +8 -0
  217. package/dist/core/parser/import-resolvers/vue.js +10 -0
  218. package/dist/core/parser/import-resolvers/vue.js.map +1 -0
  219. package/dist/core/parser/language-config.d.ts +52 -0
  220. package/dist/core/parser/language-config.js +182 -0
  221. package/dist/core/parser/language-config.js.map +1 -0
  222. package/dist/core/parser/language-provider.d.ts +126 -0
  223. package/dist/core/parser/language-provider.js +25 -0
  224. package/dist/core/parser/language-provider.js.map +1 -0
  225. package/dist/core/parser/languages/c-cpp.d.ts +12 -0
  226. package/dist/core/parser/languages/c-cpp.js +312 -0
  227. package/dist/core/parser/languages/c-cpp.js.map +1 -0
  228. package/dist/core/parser/languages/csharp.d.ts +8 -0
  229. package/dist/core/parser/languages/csharp.js +127 -0
  230. package/dist/core/parser/languages/csharp.js.map +1 -0
  231. package/dist/core/parser/languages/dart.d.ts +12 -0
  232. package/dist/core/parser/languages/dart.js +91 -0
  233. package/dist/core/parser/languages/dart.js.map +1 -0
  234. package/dist/core/parser/languages/go.d.ts +11 -0
  235. package/dist/core/parser/languages/go.js +32 -0
  236. package/dist/core/parser/languages/go.js.map +1 -0
  237. package/dist/core/parser/languages/index.d.ts +38 -0
  238. package/dist/core/parser/languages/index.js +63 -0
  239. package/dist/core/parser/languages/index.js.map +1 -0
  240. package/dist/core/parser/languages/java.d.ts +9 -0
  241. package/dist/core/parser/languages/java.js +33 -0
  242. package/dist/core/parser/languages/java.js.map +1 -0
  243. package/dist/core/parser/languages/kotlin.d.ts +9 -0
  244. package/dist/core/parser/languages/kotlin.js +112 -0
  245. package/dist/core/parser/languages/kotlin.js.map +1 -0
  246. package/dist/core/parser/languages/php.d.ts +8 -0
  247. package/dist/core/parser/languages/php.js +226 -0
  248. package/dist/core/parser/languages/php.js.map +1 -0
  249. package/dist/core/parser/languages/python.d.ts +12 -0
  250. package/dist/core/parser/languages/python.js +66 -0
  251. package/dist/core/parser/languages/python.js.map +1 -0
  252. package/dist/core/parser/languages/ruby.d.ts +9 -0
  253. package/dist/core/parser/languages/ruby.js +109 -0
  254. package/dist/core/parser/languages/ruby.js.map +1 -0
  255. package/dist/core/parser/languages/rust.d.ts +12 -0
  256. package/dist/core/parser/languages/rust.js +121 -0
  257. package/dist/core/parser/languages/rust.js.map +1 -0
  258. package/dist/core/parser/languages/swift.d.ts +12 -0
  259. package/dist/core/parser/languages/swift.js +233 -0
  260. package/dist/core/parser/languages/swift.js.map +1 -0
  261. package/dist/core/parser/languages/typescript.d.ts +11 -0
  262. package/dist/core/parser/languages/typescript.js +169 -0
  263. package/dist/core/parser/languages/typescript.js.map +1 -0
  264. package/dist/core/parser/languages/vue.d.ts +13 -0
  265. package/dist/core/parser/languages/vue.js +65 -0
  266. package/dist/core/parser/languages/vue.js.map +1 -0
  267. package/dist/core/parser/markdown-processor.d.ts +17 -0
  268. package/dist/core/parser/markdown-processor.js +125 -0
  269. package/dist/core/parser/markdown-processor.js.map +1 -0
  270. package/dist/core/parser/method-extractors/configs/c-cpp.d.ts +3 -0
  271. package/dist/core/parser/method-extractors/configs/c-cpp.js +276 -0
  272. package/dist/core/parser/method-extractors/configs/c-cpp.js.map +1 -0
  273. package/dist/core/parser/method-extractors/configs/csharp.d.ts +2 -0
  274. package/dist/core/parser/method-extractors/configs/csharp.js +243 -0
  275. package/dist/core/parser/method-extractors/configs/csharp.js.map +1 -0
  276. package/dist/core/parser/method-extractors/configs/dart.d.ts +2 -0
  277. package/dist/core/parser/method-extractors/configs/dart.js +263 -0
  278. package/dist/core/parser/method-extractors/configs/dart.js.map +1 -0
  279. package/dist/core/parser/method-extractors/configs/go.d.ts +2 -0
  280. package/dist/core/parser/method-extractors/configs/go.js +120 -0
  281. package/dist/core/parser/method-extractors/configs/go.js.map +1 -0
  282. package/dist/core/parser/method-extractors/configs/jvm.d.ts +3 -0
  283. package/dist/core/parser/method-extractors/configs/jvm.js +309 -0
  284. package/dist/core/parser/method-extractors/configs/jvm.js.map +1 -0
  285. package/dist/core/parser/method-extractors/configs/php.d.ts +2 -0
  286. package/dist/core/parser/method-extractors/configs/php.js +243 -0
  287. package/dist/core/parser/method-extractors/configs/php.js.map +1 -0
  288. package/dist/core/parser/method-extractors/configs/python.d.ts +2 -0
  289. package/dist/core/parser/method-extractors/configs/python.js +219 -0
  290. package/dist/core/parser/method-extractors/configs/python.js.map +1 -0
  291. package/dist/core/parser/method-extractors/configs/ruby.d.ts +2 -0
  292. package/dist/core/parser/method-extractors/configs/ruby.js +201 -0
  293. package/dist/core/parser/method-extractors/configs/ruby.js.map +1 -0
  294. package/dist/core/parser/method-extractors/configs/rust.d.ts +2 -0
  295. package/dist/core/parser/method-extractors/configs/rust.js +120 -0
  296. package/dist/core/parser/method-extractors/configs/rust.js.map +1 -0
  297. package/dist/core/parser/method-extractors/configs/swift.d.ts +2 -0
  298. package/dist/core/parser/method-extractors/configs/swift.js +191 -0
  299. package/dist/core/parser/method-extractors/configs/swift.js.map +1 -0
  300. package/dist/core/parser/method-extractors/configs/typescript-javascript.d.ts +3 -0
  301. package/dist/core/parser/method-extractors/configs/typescript-javascript.js +231 -0
  302. package/dist/core/parser/method-extractors/configs/typescript-javascript.js.map +1 -0
  303. package/dist/core/parser/method-extractors/generic.d.ts +11 -0
  304. package/dist/core/parser/method-extractors/generic.js +162 -0
  305. package/dist/core/parser/method-extractors/generic.js.map +1 -0
  306. package/dist/core/parser/method-types.d.ts +110 -0
  307. package/dist/core/parser/method-types.js +2 -0
  308. package/dist/core/parser/method-types.js.map +1 -0
  309. package/dist/core/parser/mro-processor.d.ts +46 -0
  310. package/dist/core/parser/mro-processor.js +677 -0
  311. package/dist/core/parser/mro-processor.js.map +1 -0
  312. package/dist/core/parser/named-binding-processor.d.ts +18 -0
  313. package/dist/core/parser/named-binding-processor.js +43 -0
  314. package/dist/core/parser/named-binding-processor.js.map +1 -0
  315. package/dist/core/parser/named-bindings/csharp.d.ts +3 -0
  316. package/dist/core/parser/named-bindings/csharp.js +38 -0
  317. package/dist/core/parser/named-bindings/csharp.js.map +1 -0
  318. package/dist/core/parser/named-bindings/java.d.ts +3 -0
  319. package/dist/core/parser/named-bindings/java.js +30 -0
  320. package/dist/core/parser/named-bindings/java.js.map +1 -0
  321. package/dist/core/parser/named-bindings/kotlin.d.ts +3 -0
  322. package/dist/core/parser/named-bindings/kotlin.js +37 -0
  323. package/dist/core/parser/named-bindings/kotlin.js.map +1 -0
  324. package/dist/core/parser/named-bindings/php.d.ts +3 -0
  325. package/dist/core/parser/named-bindings/php.js +62 -0
  326. package/dist/core/parser/named-bindings/php.js.map +1 -0
  327. package/dist/core/parser/named-bindings/python.d.ts +3 -0
  328. package/dist/core/parser/named-bindings/python.js +50 -0
  329. package/dist/core/parser/named-bindings/python.js.map +1 -0
  330. package/dist/core/parser/named-bindings/rust.d.ts +3 -0
  331. package/dist/core/parser/named-bindings/rust.js +67 -0
  332. package/dist/core/parser/named-bindings/rust.js.map +1 -0
  333. package/dist/core/parser/named-bindings/types.d.ts +16 -0
  334. package/dist/core/parser/named-bindings/types.js +7 -0
  335. package/dist/core/parser/named-bindings/types.js.map +1 -0
  336. package/dist/core/parser/named-bindings/typescript.d.ts +3 -0
  337. package/dist/core/parser/named-bindings/typescript.js +59 -0
  338. package/dist/core/parser/named-bindings/typescript.js.map +1 -0
  339. package/dist/core/parser/parsing-processor.d.ts +23 -0
  340. package/dist/core/parser/parsing-processor.js +464 -0
  341. package/dist/core/parser/parsing-processor.js.map +1 -0
  342. package/dist/core/parser/pipeline.d.ts +17 -0
  343. package/dist/core/parser/pipeline.js +1405 -0
  344. package/dist/core/parser/pipeline.js.map +1 -0
  345. package/dist/core/parser/process-processor.d.ts +51 -0
  346. package/dist/core/parser/process-processor.js +318 -0
  347. package/dist/core/parser/process-processor.js.map +1 -0
  348. package/dist/core/parser/resolution-context.d.ts +58 -0
  349. package/dist/core/parser/resolution-context.js +136 -0
  350. package/dist/core/parser/resolution-context.js.map +1 -0
  351. package/dist/core/parser/route-extractors/expo.d.ts +1 -0
  352. package/dist/core/parser/route-extractors/expo.js +37 -0
  353. package/dist/core/parser/route-extractors/expo.js.map +1 -0
  354. package/dist/core/parser/route-extractors/middleware.d.ts +47 -0
  355. package/dist/core/parser/route-extractors/middleware.js +168 -0
  356. package/dist/core/parser/route-extractors/middleware.js.map +1 -0
  357. package/dist/core/parser/route-extractors/nextjs.d.ts +3 -0
  358. package/dist/core/parser/route-extractors/nextjs.js +77 -0
  359. package/dist/core/parser/route-extractors/nextjs.js.map +1 -0
  360. package/dist/core/parser/route-extractors/php.d.ts +7 -0
  361. package/dist/core/parser/route-extractors/php.js +23 -0
  362. package/dist/core/parser/route-extractors/php.js.map +1 -0
  363. package/dist/core/parser/route-extractors/response-shapes.d.ts +20 -0
  364. package/dist/core/parser/route-extractors/response-shapes.js +295 -0
  365. package/dist/core/parser/route-extractors/response-shapes.js.map +1 -0
  366. package/dist/core/parser/structure-processor.d.ts +2 -0
  367. package/dist/core/parser/structure-processor.js +37 -0
  368. package/dist/core/parser/structure-processor.js.map +1 -0
  369. package/dist/core/parser/symbol-table.d.ts +79 -0
  370. package/dist/core/parser/symbol-table.js +116 -0
  371. package/dist/core/parser/symbol-table.js.map +1 -0
  372. package/dist/core/parser/tree-sitter-queries.d.ts +16 -0
  373. package/dist/core/parser/tree-sitter-queries.js +1180 -0
  374. package/dist/core/parser/tree-sitter-queries.js.map +1 -0
  375. package/dist/core/parser/type-env.d.ts +81 -0
  376. package/dist/core/parser/type-env.js +1048 -0
  377. package/dist/core/parser/type-env.js.map +1 -0
  378. package/dist/core/parser/type-extractors/c-cpp.d.ts +7 -0
  379. package/dist/core/parser/type-extractors/c-cpp.js +533 -0
  380. package/dist/core/parser/type-extractors/c-cpp.js.map +1 -0
  381. package/dist/core/parser/type-extractors/csharp.d.ts +2 -0
  382. package/dist/core/parser/type-extractors/csharp.js +584 -0
  383. package/dist/core/parser/type-extractors/csharp.js.map +1 -0
  384. package/dist/core/parser/type-extractors/dart.d.ts +15 -0
  385. package/dist/core/parser/type-extractors/dart.js +370 -0
  386. package/dist/core/parser/type-extractors/dart.js.map +1 -0
  387. package/dist/core/parser/type-extractors/go.d.ts +2 -0
  388. package/dist/core/parser/type-extractors/go.js +514 -0
  389. package/dist/core/parser/type-extractors/go.js.map +1 -0
  390. package/dist/core/parser/type-extractors/jvm.d.ts +3 -0
  391. package/dist/core/parser/type-extractors/jvm.js +857 -0
  392. package/dist/core/parser/type-extractors/jvm.js.map +1 -0
  393. package/dist/core/parser/type-extractors/php.d.ts +2 -0
  394. package/dist/core/parser/type-extractors/php.js +535 -0
  395. package/dist/core/parser/type-extractors/php.js.map +1 -0
  396. package/dist/core/parser/type-extractors/python.d.ts +2 -0
  397. package/dist/core/parser/type-extractors/python.js +475 -0
  398. package/dist/core/parser/type-extractors/python.js.map +1 -0
  399. package/dist/core/parser/type-extractors/ruby.d.ts +2 -0
  400. package/dist/core/parser/type-extractors/ruby.js +378 -0
  401. package/dist/core/parser/type-extractors/ruby.js.map +1 -0
  402. package/dist/core/parser/type-extractors/rust.d.ts +2 -0
  403. package/dist/core/parser/type-extractors/rust.js +516 -0
  404. package/dist/core/parser/type-extractors/rust.js.map +1 -0
  405. package/dist/core/parser/type-extractors/shared.d.ts +131 -0
  406. package/dist/core/parser/type-extractors/shared.js +797 -0
  407. package/dist/core/parser/type-extractors/shared.js.map +1 -0
  408. package/dist/core/parser/type-extractors/swift.d.ts +2 -0
  409. package/dist/core/parser/type-extractors/swift.js +485 -0
  410. package/dist/core/parser/type-extractors/swift.js.map +1 -0
  411. package/dist/core/parser/type-extractors/types.d.ts +172 -0
  412. package/dist/core/parser/type-extractors/types.js +2 -0
  413. package/dist/core/parser/type-extractors/types.js.map +1 -0
  414. package/dist/core/parser/type-extractors/typescript.d.ts +2 -0
  415. package/dist/core/parser/type-extractors/typescript.js +662 -0
  416. package/dist/core/parser/type-extractors/typescript.js.map +1 -0
  417. package/dist/core/parser/utils/ast-helpers.d.ts +73 -0
  418. package/dist/core/parser/utils/ast-helpers.js +415 -0
  419. package/dist/core/parser/utils/ast-helpers.js.map +1 -0
  420. package/dist/core/parser/utils/call-analysis.d.ts +75 -0
  421. package/dist/core/parser/utils/call-analysis.js +575 -0
  422. package/dist/core/parser/utils/call-analysis.js.map +1 -0
  423. package/dist/core/parser/utils/event-loop.d.ts +5 -0
  424. package/dist/core/parser/utils/event-loop.js +6 -0
  425. package/dist/core/parser/utils/event-loop.js.map +1 -0
  426. package/dist/core/parser/utils/method-props.d.ts +8 -0
  427. package/dist/core/parser/utils/method-props.js +39 -0
  428. package/dist/core/parser/utils/method-props.js.map +1 -0
  429. package/dist/core/parser/utils/verbose.d.ts +1 -0
  430. package/dist/core/parser/utils/verbose.js +8 -0
  431. package/dist/core/parser/utils/verbose.js.map +1 -0
  432. package/dist/core/parser/vue-sfc-extractor.d.ts +44 -0
  433. package/dist/core/parser/vue-sfc-extractor.js +95 -0
  434. package/dist/core/parser/vue-sfc-extractor.js.map +1 -0
  435. package/dist/core/parser/workers/parse-worker.d.ts +171 -0
  436. package/dist/core/parser/workers/parse-worker.js +1724 -0
  437. package/dist/core/parser/workers/parse-worker.js.map +1 -0
  438. package/dist/core/parser/workers/worker-pool.d.ts +16 -0
  439. package/dist/core/parser/workers/worker-pool.js +124 -0
  440. package/dist/core/parser/workers/worker-pool.js.map +1 -0
  441. package/dist/core/shared/graph-types.d.ts +61 -0
  442. package/dist/core/shared/graph-types.js +5 -0
  443. package/dist/core/shared/graph-types.js.map +1 -0
  444. package/dist/core/shared/index.d.ts +4 -0
  445. package/dist/core/shared/index.js +4 -0
  446. package/dist/core/shared/index.js.map +1 -0
  447. package/dist/core/shared/language-detection.d.ts +22 -0
  448. package/dist/core/shared/language-detection.js +137 -0
  449. package/dist/core/shared/language-detection.js.map +1 -0
  450. package/dist/core/shared/languages.d.ts +23 -0
  451. package/dist/core/shared/languages.js +25 -0
  452. package/dist/core/shared/languages.js.map +1 -0
  453. package/dist/core/shared/pipeline.d.ts +15 -0
  454. package/dist/core/shared/pipeline.js +5 -0
  455. package/dist/core/shared/pipeline.js.map +1 -0
  456. package/dist/core/tree-sitter/parser-loader.d.ts +5 -0
  457. package/dist/core/tree-sitter/parser-loader.js +71 -0
  458. package/dist/core/tree-sitter/parser-loader.js.map +1 -0
  459. package/dist/index.d.ts +2 -0
  460. package/dist/index.js +132 -0
  461. package/dist/index.js.map +1 -0
  462. package/dist/lib/hash.d.ts +1 -0
  463. package/dist/lib/hash.js +6 -0
  464. package/dist/lib/hash.js.map +1 -0
  465. package/dist/lib/naming.d.ts +12 -0
  466. package/dist/lib/naming.js +28 -0
  467. package/dist/lib/naming.js.map +1 -0
  468. package/dist/lib/utils.d.ts +1 -0
  469. package/dist/lib/utils.js +4 -0
  470. package/dist/lib/utils.js.map +1 -0
  471. package/dist/mcp/server.d.ts +26 -0
  472. package/dist/mcp/server.js +282 -0
  473. package/dist/mcp/server.js.map +1 -0
  474. package/dist/mcp/tools.d.ts +37 -0
  475. package/dist/mcp/tools.js +650 -0
  476. package/dist/mcp/tools.js.map +1 -0
  477. package/dist/query/bm25.d.ts +19 -0
  478. package/dist/query/bm25.js +60 -0
  479. package/dist/query/bm25.js.map +1 -0
  480. package/dist/query/graph-index.d.ts +40 -0
  481. package/dist/query/graph-index.js +178 -0
  482. package/dist/query/graph-index.js.map +1 -0
  483. package/dist/store/derived-index.d.ts +4 -0
  484. package/dist/store/derived-index.js +68 -0
  485. package/dist/store/derived-index.js.map +1 -0
  486. package/dist/store/meta.d.ts +1 -0
  487. package/dist/store/meta.js +3 -0
  488. package/dist/store/meta.js.map +1 -0
  489. package/dist/store/schema.d.ts +135 -0
  490. package/dist/store/schema.js +2 -0
  491. package/dist/store/schema.js.map +1 -0
  492. package/dist/store/store.d.ts +49 -0
  493. package/dist/store/store.js +254 -0
  494. package/dist/store/store.js.map +1 -0
  495. package/dist/types/pipeline.d.ts +12 -0
  496. package/dist/types/pipeline.js +2 -0
  497. package/dist/types/pipeline.js.map +1 -0
  498. package/package.json +69 -0
  499. package/skills/cotx-enrich/SKILL.md +59 -0
  500. package/vendor/leiden/index.cjs +355 -0
  501. package/vendor/leiden/utils.cjs +392 -0
@@ -0,0 +1,857 @@
1
+ import { findChild } from '../utils/ast-helpers.js';
2
+ import { extractSimpleTypeName, extractVarName, extractGenericTypeArgs, resolveIterableElementType, methodToTypeArgPosition, extractElementTypeFromString, } from './shared.js';
3
+ // ── Java ──────────────────────────────────────────────────────────────────
4
+ const JAVA_DECLARATION_NODE_TYPES = new Set([
5
+ 'local_variable_declaration',
6
+ 'field_declaration',
7
+ ]);
8
+ /** Java: Type x = ...; Type x; */
9
+ const extractJavaDeclaration = (node, env) => {
10
+ const typeNode = node.childForFieldName('type');
11
+ if (!typeNode)
12
+ return;
13
+ const typeName = extractSimpleTypeName(typeNode);
14
+ if (!typeName || typeName === 'var')
15
+ return; // skip Java 10 var — handled by extractInitializer
16
+ // Find variable_declarator children
17
+ for (let i = 0; i < node.namedChildCount; i++) {
18
+ const child = node.namedChild(i);
19
+ if (child?.type !== 'variable_declarator')
20
+ continue;
21
+ const nameNode = child.childForFieldName('name');
22
+ if (nameNode) {
23
+ const varName = extractVarName(nameNode);
24
+ if (varName)
25
+ env.set(varName, typeName);
26
+ }
27
+ }
28
+ };
29
+ /** Java 10+: var x = new User() — infer type from object_creation_expression */
30
+ const extractJavaInitializer = (node, env, _classNames) => {
31
+ for (let i = 0; i < node.namedChildCount; i++) {
32
+ const child = node.namedChild(i);
33
+ if (child?.type !== 'variable_declarator')
34
+ continue;
35
+ const nameNode = child.childForFieldName('name');
36
+ const valueNode = child.childForFieldName('value');
37
+ if (!nameNode || !valueNode)
38
+ continue;
39
+ // Skip declarators that already have a binding from extractDeclaration
40
+ const varName = extractVarName(nameNode);
41
+ if (!varName || env.has(varName))
42
+ continue;
43
+ if (valueNode.type !== 'object_creation_expression')
44
+ continue;
45
+ const ctorType = valueNode.childForFieldName('type');
46
+ if (!ctorType)
47
+ continue;
48
+ const typeName = extractSimpleTypeName(ctorType);
49
+ if (typeName)
50
+ env.set(varName, typeName);
51
+ }
52
+ };
53
+ /** Java: formal_parameter → type name */
54
+ const extractJavaParameter = (node, env) => {
55
+ let nameNode = null;
56
+ let typeNode = null;
57
+ if (node.type === 'formal_parameter') {
58
+ typeNode = node.childForFieldName('type');
59
+ nameNode = node.childForFieldName('name');
60
+ }
61
+ else {
62
+ // Generic fallback
63
+ nameNode = node.childForFieldName('name') ?? node.childForFieldName('pattern');
64
+ typeNode = node.childForFieldName('type');
65
+ }
66
+ if (!nameNode || !typeNode)
67
+ return;
68
+ const varName = extractVarName(nameNode);
69
+ const typeName = extractSimpleTypeName(typeNode);
70
+ if (varName && typeName)
71
+ env.set(varName, typeName);
72
+ };
73
+ /** Java: var x = SomeFactory.create() — constructor binding for `var` with method_invocation */
74
+ const scanJavaConstructorBinding = (node) => {
75
+ if (node.type !== 'local_variable_declaration')
76
+ return undefined;
77
+ const typeNode = node.childForFieldName('type');
78
+ if (!typeNode)
79
+ return undefined;
80
+ if (typeNode.text !== 'var')
81
+ return undefined;
82
+ const declarator = findChild(node, 'variable_declarator');
83
+ if (!declarator)
84
+ return undefined;
85
+ const nameNode = declarator.childForFieldName('name');
86
+ const value = declarator.childForFieldName('value');
87
+ if (!nameNode || !value)
88
+ return undefined;
89
+ if (value.type === 'object_creation_expression')
90
+ return undefined;
91
+ if (value.type !== 'method_invocation')
92
+ return undefined;
93
+ const methodName = value.childForFieldName('name');
94
+ if (!methodName)
95
+ return undefined;
96
+ return { varName: nameNode.text, calleeName: methodName.text };
97
+ };
98
+ const JAVA_FOR_LOOP_NODE_TYPES = new Set(['enhanced_for_statement']);
99
+ /** Extract element type from a Java type annotation AST node.
100
+ * Handles generic_type (List<User>), array_type (User[]). */
101
+ const extractJavaElementTypeFromTypeNode = (typeNode, pos = 'last') => {
102
+ if (typeNode.type === 'generic_type') {
103
+ const args = extractGenericTypeArgs(typeNode);
104
+ if (args.length >= 1)
105
+ return pos === 'first' ? args[0] : args[args.length - 1];
106
+ }
107
+ if (typeNode.type === 'array_type') {
108
+ const elemNode = typeNode.firstNamedChild;
109
+ if (elemNode)
110
+ return extractSimpleTypeName(elemNode);
111
+ }
112
+ return undefined;
113
+ };
114
+ /** Walk up from a for-each to the enclosing method_declaration and search parameters. */
115
+ const findJavaParamElementType = (iterableName, startNode, pos = 'last') => {
116
+ let current = startNode.parent;
117
+ while (current) {
118
+ if (current.type === 'method_declaration' || current.type === 'constructor_declaration') {
119
+ const paramsNode = current.childForFieldName('parameters');
120
+ if (paramsNode) {
121
+ for (let i = 0; i < paramsNode.namedChildCount; i++) {
122
+ const param = paramsNode.namedChild(i);
123
+ if (!param || param.type !== 'formal_parameter')
124
+ continue;
125
+ const nameNode = param.childForFieldName('name');
126
+ if (nameNode?.text !== iterableName)
127
+ continue;
128
+ const typeNode = param.childForFieldName('type');
129
+ if (typeNode)
130
+ return extractJavaElementTypeFromTypeNode(typeNode, pos);
131
+ }
132
+ }
133
+ break;
134
+ }
135
+ current = current.parent;
136
+ }
137
+ return undefined;
138
+ };
139
+ /** Java: for (User user : users) — extract loop variable binding.
140
+ * Tier 1c: for `for (var user : users)`, resolves element type from iterable. */
141
+ const extractJavaForLoopBinding = (node, { scopeEnv, declarationTypeNodes, scope, returnTypeLookup }) => {
142
+ const typeNode = node.childForFieldName('type');
143
+ const nameNode = node.childForFieldName('name');
144
+ if (!typeNode || !nameNode)
145
+ return;
146
+ const varName = extractVarName(nameNode);
147
+ if (!varName)
148
+ return;
149
+ // Explicit type (existing behavior): for (User user : users)
150
+ const typeName = extractSimpleTypeName(typeNode);
151
+ if (typeName && typeName !== 'var') {
152
+ scopeEnv.set(varName, typeName);
153
+ return;
154
+ }
155
+ // Tier 1c: var — resolve from iterable's container type
156
+ const iterableNode = node.childForFieldName('value');
157
+ if (!iterableNode)
158
+ return;
159
+ let iterableName;
160
+ let methodName;
161
+ let callExprElementType;
162
+ if (iterableNode.type === 'identifier') {
163
+ iterableName = iterableNode.text;
164
+ }
165
+ else if (iterableNode.type === 'field_access') {
166
+ const field = iterableNode.childForFieldName('field');
167
+ if (field)
168
+ iterableName = field.text;
169
+ }
170
+ else if (iterableNode.type === 'method_invocation') {
171
+ // data.keySet() → method_invocation > object: identifier + name: identifier
172
+ // Also handles this.data.values() → object is field_access, extract inner field name
173
+ const obj = iterableNode.childForFieldName('object');
174
+ const name = iterableNode.childForFieldName('name');
175
+ if (obj?.type === 'identifier') {
176
+ iterableName = obj.text;
177
+ }
178
+ else if (obj?.type === 'field_access') {
179
+ const innerField = obj.childForFieldName('field');
180
+ if (innerField)
181
+ iterableName = innerField.text;
182
+ }
183
+ else if (!obj && name) {
184
+ // Direct function call: for (var u : getUsers()) — no receiver object
185
+ const rawReturn = returnTypeLookup.lookupRawReturnType(name.text);
186
+ if (rawReturn)
187
+ callExprElementType = extractElementTypeFromString(rawReturn);
188
+ }
189
+ if (name)
190
+ methodName = name.text;
191
+ }
192
+ if (!iterableName && !callExprElementType)
193
+ return;
194
+ let elementType;
195
+ if (callExprElementType) {
196
+ elementType = callExprElementType;
197
+ }
198
+ else {
199
+ const containerTypeName = scopeEnv.get(iterableName);
200
+ const typeArgPos = methodToTypeArgPosition(methodName, containerTypeName);
201
+ elementType = resolveIterableElementType(iterableName, node, scopeEnv, declarationTypeNodes, scope, extractJavaElementTypeFromTypeNode, findJavaParamElementType, typeArgPos);
202
+ }
203
+ if (elementType)
204
+ scopeEnv.set(varName, elementType);
205
+ };
206
+ /** Java: var alias = u → local_variable_declaration > variable_declarator with name/value */
207
+ const extractJavaPendingAssignment = (node, scopeEnv) => {
208
+ for (let i = 0; i < node.namedChildCount; i++) {
209
+ const child = node.namedChild(i);
210
+ if (!child || child.type !== 'variable_declarator')
211
+ continue;
212
+ const nameNode = child.childForFieldName('name');
213
+ const valueNode = child.childForFieldName('value');
214
+ if (!nameNode || !valueNode)
215
+ continue;
216
+ const lhs = nameNode.text;
217
+ if (scopeEnv.has(lhs))
218
+ continue;
219
+ if (valueNode.type === 'identifier' || valueNode.type === 'simple_identifier')
220
+ return { kind: 'copy', lhs, rhs: valueNode.text };
221
+ // field_access RHS → fieldAccess (a.field)
222
+ if (valueNode.type === 'field_access') {
223
+ const obj = valueNode.childForFieldName('object');
224
+ const field = valueNode.childForFieldName('field');
225
+ if (obj?.type === 'identifier' && field) {
226
+ return { kind: 'fieldAccess', lhs, receiver: obj.text, field: field.text };
227
+ }
228
+ }
229
+ // method_invocation RHS
230
+ if (valueNode.type === 'method_invocation') {
231
+ const objField = valueNode.childForFieldName('object');
232
+ if (!objField) {
233
+ // No receiver → callResult
234
+ const nameField = valueNode.childForFieldName('name');
235
+ if (nameField?.type === 'identifier') {
236
+ return { kind: 'callResult', lhs, callee: nameField.text };
237
+ }
238
+ }
239
+ else if (objField.type === 'identifier') {
240
+ // With receiver → methodCallResult
241
+ const nameField = valueNode.childForFieldName('name');
242
+ if (nameField?.type === 'identifier') {
243
+ return { kind: 'methodCallResult', lhs, receiver: objField.text, method: nameField.text };
244
+ }
245
+ }
246
+ }
247
+ }
248
+ return undefined;
249
+ };
250
+ /**
251
+ * Java 16+ `instanceof` pattern variable: `x instanceof User user`
252
+ *
253
+ * AST structure:
254
+ * instanceof_expression
255
+ * left: expression (the variable being tested)
256
+ * instanceof keyword
257
+ * right: type (the type to test against)
258
+ * name: identifier (the pattern variable — optional, Java 16+)
259
+ *
260
+ * Conservative: returns undefined when the `name` field is absent (plain instanceof
261
+ * without pattern variable, e.g. `x instanceof User`) or when the type cannot be
262
+ * extracted. The source variable's existing type is NOT used — the pattern explicitly
263
+ * declares the new type, so no scopeEnv lookup is needed.
264
+ */
265
+ const extractJavaPatternBinding = (node) => {
266
+ if (node.type === 'type_pattern') {
267
+ // Java 17+ switch pattern: case User u -> ...
268
+ // type_pattern has positional children (NO named fields):
269
+ // namedChild(0) = type (type_identifier, e.g., User)
270
+ // namedChild(1) = identifier (e.g., u)
271
+ const typeNode = node.namedChild(0);
272
+ const nameNode = node.namedChild(1);
273
+ if (!typeNode || !nameNode)
274
+ return undefined;
275
+ const typeName = extractSimpleTypeName(typeNode);
276
+ const varName = extractVarName(nameNode);
277
+ if (!typeName || !varName)
278
+ return undefined;
279
+ return { varName, typeName };
280
+ }
281
+ if (node.type !== 'instanceof_expression')
282
+ return undefined;
283
+ const nameNode = node.childForFieldName('name');
284
+ if (!nameNode)
285
+ return undefined;
286
+ const typeNode = node.childForFieldName('right');
287
+ if (!typeNode)
288
+ return undefined;
289
+ const typeName = extractSimpleTypeName(typeNode);
290
+ const varName = extractVarName(nameNode);
291
+ if (!typeName || !varName)
292
+ return undefined;
293
+ return { varName, typeName };
294
+ };
295
+ /** Infer the type of a literal AST node for Java/Kotlin overload disambiguation. */
296
+ const inferJvmLiteralType = (node) => {
297
+ switch (node.type) {
298
+ case 'decimal_integer_literal':
299
+ case 'integer_literal':
300
+ case 'hex_integer_literal':
301
+ case 'octal_integer_literal':
302
+ case 'binary_integer_literal':
303
+ // Check for long suffix
304
+ if (node.text.endsWith('L') || node.text.endsWith('l'))
305
+ return 'long';
306
+ return 'int';
307
+ case 'decimal_floating_point_literal':
308
+ case 'real_literal':
309
+ if (node.text.endsWith('f') || node.text.endsWith('F'))
310
+ return 'float';
311
+ return 'double';
312
+ case 'string_literal':
313
+ case 'line_string_literal':
314
+ case 'multi_line_string_literal':
315
+ return 'String';
316
+ case 'character_literal':
317
+ return 'char';
318
+ case 'true':
319
+ case 'false':
320
+ case 'boolean_literal':
321
+ return 'boolean';
322
+ case 'null_literal':
323
+ return 'null';
324
+ default:
325
+ return undefined;
326
+ }
327
+ };
328
+ export const javaTypeConfig = {
329
+ declarationNodeTypes: JAVA_DECLARATION_NODE_TYPES,
330
+ forLoopNodeTypes: JAVA_FOR_LOOP_NODE_TYPES,
331
+ patternBindingNodeTypes: new Set(['instanceof_expression', 'type_pattern']),
332
+ extractDeclaration: extractJavaDeclaration,
333
+ extractParameter: extractJavaParameter,
334
+ extractInitializer: extractJavaInitializer,
335
+ scanConstructorBinding: scanJavaConstructorBinding,
336
+ extractForLoopBinding: extractJavaForLoopBinding,
337
+ extractPendingAssignment: extractJavaPendingAssignment,
338
+ extractPatternBinding: extractJavaPatternBinding,
339
+ inferLiteralType: inferJvmLiteralType,
340
+ };
341
+ // ── Kotlin ────────────────────────────────────────────────────────────────
342
+ const KOTLIN_DECLARATION_NODE_TYPES = new Set([
343
+ 'property_declaration',
344
+ 'variable_declaration',
345
+ ]);
346
+ /** Kotlin: val x: Foo = ... */
347
+ const extractKotlinDeclaration = (node, env) => {
348
+ if (node.type === 'property_declaration') {
349
+ // Kotlin property_declaration: name/type are inside a variable_declaration child
350
+ const varDecl = findChild(node, 'variable_declaration');
351
+ if (varDecl) {
352
+ const nameNode = findChild(varDecl, 'simple_identifier');
353
+ const typeNode = findChild(varDecl, 'user_type') ?? findChild(varDecl, 'nullable_type');
354
+ if (!nameNode || !typeNode)
355
+ return;
356
+ const varName = extractVarName(nameNode);
357
+ const typeName = extractSimpleTypeName(typeNode);
358
+ if (varName && typeName)
359
+ env.set(varName, typeName);
360
+ return;
361
+ }
362
+ // Fallback: try direct fields
363
+ const nameNode = node.childForFieldName('name') ?? findChild(node, 'simple_identifier');
364
+ const typeNode = node.childForFieldName('type') ?? findChild(node, 'user_type');
365
+ if (!nameNode || !typeNode)
366
+ return;
367
+ const varName = extractVarName(nameNode);
368
+ const typeName = extractSimpleTypeName(typeNode);
369
+ if (varName && typeName)
370
+ env.set(varName, typeName);
371
+ }
372
+ else if (node.type === 'variable_declaration') {
373
+ // variable_declaration directly inside functions
374
+ const nameNode = findChild(node, 'simple_identifier');
375
+ const typeNode = findChild(node, 'user_type');
376
+ if (nameNode && typeNode) {
377
+ const varName = extractVarName(nameNode);
378
+ const typeName = extractSimpleTypeName(typeNode);
379
+ if (varName && typeName)
380
+ env.set(varName, typeName);
381
+ }
382
+ }
383
+ };
384
+ /** Kotlin: parameter / formal_parameter → type name.
385
+ * Kotlin's tree-sitter grammar uses positional children (simple_identifier, user_type)
386
+ * rather than named fields (name, type) on `parameter` nodes, so we fall back to
387
+ * findChild when childForFieldName returns null. */
388
+ const extractKotlinParameter = (node, env) => {
389
+ let nameNode = null;
390
+ let typeNode = null;
391
+ if (node.type === 'formal_parameter') {
392
+ typeNode = node.childForFieldName('type');
393
+ nameNode = node.childForFieldName('name');
394
+ }
395
+ else {
396
+ nameNode = node.childForFieldName('name') ?? node.childForFieldName('pattern');
397
+ typeNode = node.childForFieldName('type');
398
+ }
399
+ // Fallback: Kotlin `parameter` nodes use positional children, not named fields
400
+ if (!nameNode)
401
+ nameNode = findChild(node, 'simple_identifier');
402
+ if (!typeNode)
403
+ typeNode = findChild(node, 'user_type') ?? findChild(node, 'nullable_type');
404
+ if (!nameNode || !typeNode)
405
+ return;
406
+ const varName = extractVarName(nameNode);
407
+ const typeName = extractSimpleTypeName(typeNode);
408
+ if (varName && typeName)
409
+ env.set(varName, typeName);
410
+ };
411
+ /** Find the constructor callee name in a Kotlin property_declaration's initializer.
412
+ * Returns the class name if the callee is a verified class constructor, undefined otherwise. */
413
+ const findKotlinConstructorCallee = (node, classNames) => {
414
+ if (node.type !== 'property_declaration')
415
+ return undefined;
416
+ const value = node.childForFieldName('value') ?? findChild(node, 'call_expression');
417
+ if (!value || value.type !== 'call_expression')
418
+ return undefined;
419
+ const callee = value.firstNamedChild;
420
+ if (!callee || callee.type !== 'simple_identifier')
421
+ return undefined;
422
+ const calleeName = callee.text;
423
+ if (!calleeName || !classNames.has(calleeName))
424
+ return undefined;
425
+ return calleeName;
426
+ };
427
+ /** Kotlin: val user = User() — infer type from call_expression when callee is a known class.
428
+ * Kotlin constructors are syntactically identical to function calls, so we verify
429
+ * against classNames (which may include cross-file SymbolTable lookups). */
430
+ const extractKotlinInitializer = (node, env, classNames) => {
431
+ // Skip if there's an explicit type annotation — Tier 0 already handled it
432
+ const varDecl = findChild(node, 'variable_declaration');
433
+ if (varDecl && findChild(varDecl, 'user_type'))
434
+ return;
435
+ const calleeName = findKotlinConstructorCallee(node, classNames);
436
+ if (!calleeName)
437
+ return;
438
+ // Extract the variable name from the variable_declaration inside property_declaration
439
+ const nameNode = varDecl
440
+ ? findChild(varDecl, 'simple_identifier')
441
+ : findChild(node, 'simple_identifier');
442
+ if (!nameNode)
443
+ return;
444
+ const varName = extractVarName(nameNode);
445
+ if (varName)
446
+ env.set(varName, calleeName);
447
+ };
448
+ /** Kotlin: detect constructor type from call_expression in typed declarations.
449
+ * Unlike extractKotlinInitializer (which SKIPS typed declarations), this detects
450
+ * the constructor type EVEN when a type annotation exists, enabling virtual dispatch
451
+ * for patterns like `val a: Animal = Dog()`. */
452
+ const detectKotlinConstructorType = (node, classNames) => {
453
+ return findKotlinConstructorCallee(node, classNames);
454
+ };
455
+ /** Kotlin: val x = User(...) — constructor binding for property_declaration with call_expression */
456
+ const scanKotlinConstructorBinding = (node) => {
457
+ if (node.type !== 'property_declaration')
458
+ return undefined;
459
+ const varDecl = findChild(node, 'variable_declaration');
460
+ if (!varDecl)
461
+ return undefined;
462
+ if (findChild(varDecl, 'user_type'))
463
+ return undefined;
464
+ const callExpr = findChild(node, 'call_expression');
465
+ if (!callExpr)
466
+ return undefined;
467
+ const callee = callExpr.firstNamedChild;
468
+ if (!callee)
469
+ return undefined;
470
+ let calleeName;
471
+ if (callee.type === 'simple_identifier') {
472
+ calleeName = callee.text;
473
+ }
474
+ else if (callee.type === 'navigation_expression') {
475
+ // Extract method name from qualified call: service.getUser() → getUser
476
+ const suffix = callee.lastNamedChild;
477
+ if (suffix?.type === 'navigation_suffix') {
478
+ const methodName = suffix.lastNamedChild;
479
+ if (methodName?.type === 'simple_identifier') {
480
+ calleeName = methodName.text;
481
+ }
482
+ }
483
+ }
484
+ if (!calleeName)
485
+ return undefined;
486
+ const nameNode = findChild(varDecl, 'simple_identifier');
487
+ if (!nameNode)
488
+ return undefined;
489
+ return { varName: nameNode.text, calleeName };
490
+ };
491
+ const KOTLIN_FOR_LOOP_NODE_TYPES = new Set(['for_statement']);
492
+ /** Extract element type from a Kotlin type annotation AST node (user_type wrapping generic).
493
+ * Kotlin: user_type → [type_identifier, type_arguments → [type_projection → user_type]]
494
+ * Handles the type_projection wrapper that Kotlin uses for generic type arguments. */
495
+ const extractKotlinElementTypeFromTypeNode = (typeNode, pos = 'last') => {
496
+ if (typeNode.type === 'user_type') {
497
+ const argsNode = findChild(typeNode, 'type_arguments');
498
+ if (argsNode && argsNode.namedChildCount >= 1) {
499
+ const targetArg = pos === 'first'
500
+ ? argsNode.namedChild(0)
501
+ : argsNode.namedChild(argsNode.namedChildCount - 1);
502
+ if (!targetArg)
503
+ return undefined;
504
+ // Kotlin wraps type args in type_projection — unwrap to get the inner type
505
+ const inner = targetArg.type === 'type_projection' ? targetArg.firstNamedChild : targetArg;
506
+ if (inner)
507
+ return extractSimpleTypeName(inner);
508
+ }
509
+ }
510
+ return undefined;
511
+ };
512
+ /** Walk up from a for-loop to the enclosing function_declaration and search parameters.
513
+ * Kotlin parameters use positional children (simple_identifier, user_type), not named fields. */
514
+ const findKotlinParamElementType = (iterableName, startNode, pos = 'last') => {
515
+ let current = startNode.parent;
516
+ while (current) {
517
+ if (current.type === 'function_declaration') {
518
+ const paramsNode = findChild(current, 'function_value_parameters');
519
+ if (paramsNode) {
520
+ for (let i = 0; i < paramsNode.namedChildCount; i++) {
521
+ const param = paramsNode.namedChild(i);
522
+ if (!param || param.type !== 'parameter')
523
+ continue;
524
+ const nameNode = findChild(param, 'simple_identifier');
525
+ if (nameNode?.text !== iterableName)
526
+ continue;
527
+ const typeNode = findChild(param, 'user_type');
528
+ if (typeNode)
529
+ return extractKotlinElementTypeFromTypeNode(typeNode, pos);
530
+ }
531
+ }
532
+ break;
533
+ }
534
+ current = current.parent;
535
+ }
536
+ return undefined;
537
+ };
538
+ /** Kotlin: for (user: User in users) — extract loop variable binding.
539
+ * Tier 1c: for `for (user in users)` without annotation, resolves from iterable. */
540
+ const extractKotlinForLoopBinding = (node, ctx) => {
541
+ const { scopeEnv, declarationTypeNodes, scope, returnTypeLookup } = ctx;
542
+ const varDecl = findChild(node, 'variable_declaration');
543
+ if (!varDecl)
544
+ return;
545
+ const nameNode = findChild(varDecl, 'simple_identifier');
546
+ if (!nameNode)
547
+ return;
548
+ const varName = extractVarName(nameNode);
549
+ if (!varName)
550
+ return;
551
+ // Explicit type annotation (existing behavior): for (user: User in users)
552
+ const typeNode = findChild(varDecl, 'user_type');
553
+ if (typeNode) {
554
+ const typeName = extractSimpleTypeName(typeNode);
555
+ if (typeName)
556
+ scopeEnv.set(varName, typeName);
557
+ return;
558
+ }
559
+ // Tier 1c: no annotation — resolve from iterable's container type
560
+ // Kotlin for-loop children: [variable_declaration, iterable_expr, control_structure_body]
561
+ // The iterable is the second named child of the for_statement (after variable_declaration)
562
+ let iterableName;
563
+ let methodName;
564
+ let fallbackIterableName;
565
+ let callExprElementType;
566
+ let foundVarDecl = false;
567
+ for (let i = 0; i < node.namedChildCount; i++) {
568
+ const child = node.namedChild(i);
569
+ if (child === varDecl) {
570
+ foundVarDecl = true;
571
+ continue;
572
+ }
573
+ if (!foundVarDecl || !child)
574
+ continue;
575
+ if (child.type === 'simple_identifier') {
576
+ iterableName = child.text;
577
+ break;
578
+ }
579
+ if (child.type === 'navigation_expression') {
580
+ // data.keys → navigation_expression > simple_identifier(data) + navigation_suffix > simple_identifier(keys)
581
+ const obj = child.firstNamedChild;
582
+ const suffix = findChild(child, 'navigation_suffix');
583
+ const prop = suffix ? findChild(suffix, 'simple_identifier') : null;
584
+ const hasCallSuffix = suffix ? findChild(suffix, 'call_suffix') !== null : false;
585
+ // Always try object as iterable + property as method first (handles data.values, data.keys).
586
+ // For bare property access without call_suffix, also save property as fallback
587
+ // (handles this.users, repo.items where the property IS the iterable).
588
+ if (obj?.type === 'simple_identifier')
589
+ iterableName = obj.text;
590
+ if (prop)
591
+ methodName = prop.text;
592
+ if (!hasCallSuffix && prop) {
593
+ fallbackIterableName = prop.text;
594
+ }
595
+ break;
596
+ }
597
+ if (child.type === 'call_expression') {
598
+ // data.values() → call_expression > navigation_expression > simple_identifier + navigation_suffix
599
+ const callee = child.firstNamedChild;
600
+ if (callee?.type === 'navigation_expression') {
601
+ const obj = callee.firstNamedChild;
602
+ if (obj?.type === 'simple_identifier')
603
+ iterableName = obj.text;
604
+ const suffix = findChild(callee, 'navigation_suffix');
605
+ if (suffix) {
606
+ const prop = findChild(suffix, 'simple_identifier');
607
+ if (prop)
608
+ methodName = prop.text;
609
+ }
610
+ }
611
+ else if (callee?.type === 'simple_identifier') {
612
+ // Direct function call: for (u in getUsers())
613
+ const rawReturn = returnTypeLookup.lookupRawReturnType(callee.text);
614
+ if (rawReturn)
615
+ callExprElementType = extractElementTypeFromString(rawReturn);
616
+ }
617
+ break;
618
+ }
619
+ }
620
+ if (!iterableName && !callExprElementType)
621
+ return;
622
+ let elementType;
623
+ if (callExprElementType) {
624
+ elementType = callExprElementType;
625
+ }
626
+ else {
627
+ let containerTypeName = scopeEnv.get(iterableName);
628
+ // Fallback: if object has no type in scope, try the property as the iterable name.
629
+ // Handles patterns like this.users where the property itself is the iterable variable.
630
+ if (!containerTypeName && fallbackIterableName) {
631
+ iterableName = fallbackIterableName;
632
+ methodName = undefined;
633
+ containerTypeName = scopeEnv.get(iterableName);
634
+ }
635
+ const typeArgPos = methodToTypeArgPosition(methodName, containerTypeName);
636
+ elementType = resolveIterableElementType(iterableName, node, scopeEnv, declarationTypeNodes, scope, extractKotlinElementTypeFromTypeNode, findKotlinParamElementType, typeArgPos);
637
+ }
638
+ if (elementType)
639
+ scopeEnv.set(varName, elementType);
640
+ };
641
+ /** Kotlin: val alias = u → property_declaration or variable_declaration.
642
+ * property_declaration has: binding_pattern_kind("val"), variable_declaration("alias"),
643
+ * "=", and the RHS value (simple_identifier "u").
644
+ * variable_declaration appears directly inside functions and has simple_identifier children. */
645
+ const extractKotlinPendingAssignment = (node, scopeEnv) => {
646
+ if (node.type === 'property_declaration') {
647
+ // Find the variable name from variable_declaration child
648
+ const varDecl = findChild(node, 'variable_declaration');
649
+ if (!varDecl)
650
+ return undefined;
651
+ const nameNode = varDecl.firstNamedChild;
652
+ if (!nameNode || nameNode.type !== 'simple_identifier')
653
+ return undefined;
654
+ const lhs = nameNode.text;
655
+ if (scopeEnv.has(lhs))
656
+ return undefined;
657
+ // Find the RHS after the "=" token
658
+ let foundEq = false;
659
+ for (let i = 0; i < node.childCount; i++) {
660
+ const child = node.child(i);
661
+ if (!child)
662
+ continue;
663
+ if (child.type === '=') {
664
+ foundEq = true;
665
+ continue;
666
+ }
667
+ if (foundEq && child.type === 'simple_identifier') {
668
+ return { kind: 'copy', lhs, rhs: child.text };
669
+ }
670
+ // navigation_expression RHS → fieldAccess (a.field)
671
+ if (foundEq && child.type === 'navigation_expression') {
672
+ const recv = child.firstNamedChild;
673
+ const suffix = child.lastNamedChild;
674
+ const fieldNode = suffix?.type === 'navigation_suffix' ? suffix.lastNamedChild : suffix;
675
+ if (recv?.type === 'simple_identifier' && fieldNode?.type === 'simple_identifier') {
676
+ return { kind: 'fieldAccess', lhs, receiver: recv.text, field: fieldNode.text };
677
+ }
678
+ }
679
+ // call_expression RHS
680
+ if (foundEq && child.type === 'call_expression') {
681
+ const calleeNode = child.firstNamedChild;
682
+ if (calleeNode?.type === 'simple_identifier') {
683
+ return { kind: 'callResult', lhs, callee: calleeNode.text };
684
+ }
685
+ // navigation_expression callee → methodCallResult (a.method())
686
+ if (calleeNode?.type === 'navigation_expression') {
687
+ const recv = calleeNode.firstNamedChild;
688
+ const suffix = calleeNode.lastNamedChild;
689
+ const methodNode = suffix?.type === 'navigation_suffix' ? suffix.lastNamedChild : suffix;
690
+ if (recv?.type === 'simple_identifier' && methodNode?.type === 'simple_identifier') {
691
+ return { kind: 'methodCallResult', lhs, receiver: recv.text, method: methodNode.text };
692
+ }
693
+ }
694
+ }
695
+ }
696
+ return undefined;
697
+ }
698
+ if (node.type === 'variable_declaration') {
699
+ // variable_declaration directly inside functions: simple_identifier children
700
+ const nameNode = findChild(node, 'simple_identifier');
701
+ if (!nameNode)
702
+ return undefined;
703
+ const lhs = nameNode.text;
704
+ if (scopeEnv.has(lhs))
705
+ return undefined;
706
+ // Look for RHS after "=" in the parent (property_declaration)
707
+ const parent = node.parent;
708
+ if (!parent)
709
+ return undefined;
710
+ let foundEq = false;
711
+ for (let i = 0; i < parent.childCount; i++) {
712
+ const child = parent.child(i);
713
+ if (!child)
714
+ continue;
715
+ if (child.type === '=') {
716
+ foundEq = true;
717
+ continue;
718
+ }
719
+ if (foundEq && child.type === 'simple_identifier') {
720
+ return { kind: 'copy', lhs, rhs: child.text };
721
+ }
722
+ if (foundEq && child.type === 'navigation_expression') {
723
+ const recv = child.firstNamedChild;
724
+ const suffix = child.lastNamedChild;
725
+ const fieldNode = suffix?.type === 'navigation_suffix' ? suffix.lastNamedChild : suffix;
726
+ if (recv?.type === 'simple_identifier' && fieldNode?.type === 'simple_identifier') {
727
+ return { kind: 'fieldAccess', lhs, receiver: recv.text, field: fieldNode.text };
728
+ }
729
+ }
730
+ if (foundEq && child.type === 'call_expression') {
731
+ const calleeNode = child.firstNamedChild;
732
+ if (calleeNode?.type === 'simple_identifier') {
733
+ return { kind: 'callResult', lhs, callee: calleeNode.text };
734
+ }
735
+ if (calleeNode?.type === 'navigation_expression') {
736
+ const recv = calleeNode.firstNamedChild;
737
+ const suffix = calleeNode.lastNamedChild;
738
+ const methodNode = suffix?.type === 'navigation_suffix' ? suffix.lastNamedChild : suffix;
739
+ if (recv?.type === 'simple_identifier' && methodNode?.type === 'simple_identifier') {
740
+ return { kind: 'methodCallResult', lhs, receiver: recv.text, method: methodNode.text };
741
+ }
742
+ }
743
+ }
744
+ }
745
+ return undefined;
746
+ }
747
+ return undefined;
748
+ };
749
+ /** Walk up from a node to find an ancestor of a given type. */
750
+ const findAncestorByType = (node, type) => {
751
+ let current = node.parent;
752
+ while (current) {
753
+ if (current.type === type)
754
+ return current;
755
+ current = current.parent;
756
+ }
757
+ return undefined;
758
+ };
759
+ const extractKotlinPatternBinding = (node, scopeEnv, declarationTypeNodes, scope) => {
760
+ // Kotlin when/is smart casts (existing behavior)
761
+ if (node.type === 'type_test') {
762
+ const typeNode = node.lastNamedChild;
763
+ if (!typeNode)
764
+ return undefined;
765
+ const typeName = extractSimpleTypeName(typeNode);
766
+ if (!typeName)
767
+ return undefined;
768
+ const whenExpr = findAncestorByType(node, 'when_expression');
769
+ if (!whenExpr)
770
+ return undefined;
771
+ const whenSubject = whenExpr.namedChild(0);
772
+ const subject = whenSubject?.firstNamedChild ?? whenSubject;
773
+ if (!subject)
774
+ return undefined;
775
+ const varName = extractVarName(subject);
776
+ if (!varName)
777
+ return undefined;
778
+ return { varName, typeName };
779
+ }
780
+ // Null-check narrowing: if (x != null) { ... }
781
+ // Kotlin AST: equality_expression > simple_identifier, "!=" [anon], "null" [anon]
782
+ // Note: `null` is an anonymous node in tree-sitter-kotlin, not `null_literal`.
783
+ if (node.type === 'equality_expression') {
784
+ const op = node.children.find((c) => !c.isNamed && c.text === '!=');
785
+ if (!op)
786
+ return undefined;
787
+ // `null` is anonymous in Kotlin grammar — use positional child scan
788
+ let varNode;
789
+ let hasNull = false;
790
+ for (let i = 0; i < node.childCount; i++) {
791
+ const c = node.child(i);
792
+ if (!c)
793
+ continue;
794
+ if (c.type === 'simple_identifier')
795
+ varNode = c;
796
+ if (!c.isNamed && c.text === 'null')
797
+ hasNull = true;
798
+ }
799
+ if (!varNode || !hasNull)
800
+ return undefined;
801
+ const varName = varNode.text;
802
+ const resolvedType = scopeEnv.get(varName);
803
+ if (!resolvedType)
804
+ return undefined;
805
+ // Check if the original declaration type was nullable (ends with ?)
806
+ const declTypeNode = declarationTypeNodes.get(`${scope}\0${varName}`);
807
+ if (!declTypeNode)
808
+ return undefined;
809
+ const declText = declTypeNode.text;
810
+ if (!declText.includes('?') && !declText.includes('null'))
811
+ return undefined;
812
+ // Find the if-body: walk up to if_expression, then find control_structure_body
813
+ const ifExpr = findAncestorByType(node, 'if_expression');
814
+ if (!ifExpr)
815
+ return undefined;
816
+ // The consequence is the first control_structure_body child
817
+ for (let i = 0; i < ifExpr.childCount; i++) {
818
+ const child = ifExpr.child(i);
819
+ if (child?.type === 'control_structure_body') {
820
+ return {
821
+ varName,
822
+ typeName: resolvedType,
823
+ narrowingRange: { startIndex: child.startIndex, endIndex: child.endIndex },
824
+ };
825
+ }
826
+ }
827
+ return undefined;
828
+ }
829
+ return undefined;
830
+ };
831
+ export const kotlinTypeConfig = {
832
+ allowPatternBindingOverwrite: true,
833
+ declarationNodeTypes: KOTLIN_DECLARATION_NODE_TYPES,
834
+ getDeclarationTypeNode: (node) => {
835
+ // Kotlin property_declaration wraps the actual declaration in variable_declaration.
836
+ // The type is commonly a user_type / nullable_type child (positional, not 'type' field).
837
+ const varDecl = node.type === 'property_declaration' ? findChild(node, 'variable_declaration') : node;
838
+ if (varDecl) {
839
+ return (varDecl.childForFieldName('type') ??
840
+ findChild(varDecl, 'user_type') ??
841
+ findChild(varDecl, 'nullable_type'));
842
+ }
843
+ return node.childForFieldName('type') ?? findChild(node, 'user_type') ?? null;
844
+ },
845
+ forLoopNodeTypes: KOTLIN_FOR_LOOP_NODE_TYPES,
846
+ patternBindingNodeTypes: new Set(['type_test', 'equality_expression']),
847
+ extractDeclaration: extractKotlinDeclaration,
848
+ extractParameter: extractKotlinParameter,
849
+ extractInitializer: extractKotlinInitializer,
850
+ scanConstructorBinding: scanKotlinConstructorBinding,
851
+ extractForLoopBinding: extractKotlinForLoopBinding,
852
+ extractPendingAssignment: extractKotlinPendingAssignment,
853
+ extractPatternBinding: extractKotlinPatternBinding,
854
+ inferLiteralType: inferJvmLiteralType,
855
+ detectConstructorType: detectKotlinConstructorType,
856
+ };
857
+ //# sourceMappingURL=jvm.js.map