@lzehrung/codegraph-core 2.1.0 → 2.1.2

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 (430) hide show
  1. package/dist/agent/artifact.d.ts.map +1 -1
  2. package/dist/agent/artifact.js +105 -14
  3. package/dist/agent/artifact.js.map +1 -1
  4. package/dist/agent/candidateTests.d.ts +12 -0
  5. package/dist/agent/candidateTests.d.ts.map +1 -0
  6. package/dist/agent/candidateTests.js +17 -0
  7. package/dist/agent/candidateTests.js.map +1 -0
  8. package/dist/agent/explain.d.ts +3 -0
  9. package/dist/agent/explain.d.ts.map +1 -1
  10. package/dist/agent/explain.js +8 -0
  11. package/dist/agent/explain.js.map +1 -1
  12. package/dist/agent/explore.d.ts.map +1 -1
  13. package/dist/agent/explore.js +11 -6
  14. package/dist/agent/explore.js.map +1 -1
  15. package/dist/agent/fileView.d.ts.map +1 -1
  16. package/dist/agent/fileView.js +113 -120
  17. package/dist/agent/fileView.js.map +1 -1
  18. package/dist/agent/orient.d.ts.map +1 -1
  19. package/dist/agent/orient.js +7 -4
  20. package/dist/agent/orient.js.map +1 -1
  21. package/dist/agent/packet.d.ts.map +1 -1
  22. package/dist/agent/packet.js +5 -12
  23. package/dist/agent/packet.js.map +1 -1
  24. package/dist/agent/query-index/candidates.d.ts +13 -2
  25. package/dist/agent/query-index/candidates.d.ts.map +1 -1
  26. package/dist/agent/query-index/candidates.js +28 -39
  27. package/dist/agent/query-index/candidates.js.map +1 -1
  28. package/dist/agent/query-index/content.d.ts +1 -1
  29. package/dist/agent/query-index/content.js +4 -4
  30. package/dist/agent/query-index/content.js.map +1 -1
  31. package/dist/agent/query-index/schema.d.ts.map +1 -1
  32. package/dist/agent/query-index/schema.js.map +1 -1
  33. package/dist/agent/query-index/sessionStore.d.ts.map +1 -1
  34. package/dist/agent/query-index/sessionStore.js +42 -26
  35. package/dist/agent/query-index/sessionStore.js.map +1 -1
  36. package/dist/agent/query-index/store.d.ts +10 -4
  37. package/dist/agent/query-index/store.d.ts.map +1 -1
  38. package/dist/agent/query-index/store.js +115 -10
  39. package/dist/agent/query-index/store.js.map +1 -1
  40. package/dist/agent/query-index/update.d.ts.map +1 -1
  41. package/dist/agent/query-index/update.js +24 -9
  42. package/dist/agent/query-index/update.js.map +1 -1
  43. package/dist/agent/refactorPlan.d.ts.map +1 -1
  44. package/dist/agent/refactorPlan.js +6 -14
  45. package/dist/agent/refactorPlan.js.map +1 -1
  46. package/dist/agent/renamePreview.d.ts +2 -5
  47. package/dist/agent/renamePreview.d.ts.map +1 -1
  48. package/dist/agent/renamePreview.js +133 -80
  49. package/dist/agent/renamePreview.js.map +1 -1
  50. package/dist/agent/search.d.ts +3 -1
  51. package/dist/agent/search.d.ts.map +1 -1
  52. package/dist/agent/search.js +103 -35
  53. package/dist/agent/search.js.map +1 -1
  54. package/dist/agent/semanticSymbols.d.ts.map +1 -1
  55. package/dist/agent/semanticSymbols.js +2 -1
  56. package/dist/agent/semanticSymbols.js.map +1 -1
  57. package/dist/agent/session.d.ts +4 -0
  58. package/dist/agent/session.d.ts.map +1 -1
  59. package/dist/agent/session.js +20 -7
  60. package/dist/agent/session.js.map +1 -1
  61. package/dist/agent-tools.d.ts +1 -1
  62. package/dist/agent-tools.d.ts.map +1 -1
  63. package/dist/agent-tools.js +12 -21
  64. package/dist/agent-tools.js.map +1 -1
  65. package/dist/chunking/chunkFile.d.ts +5 -0
  66. package/dist/chunking/chunkFile.d.ts.map +1 -1
  67. package/dist/chunking/chunkFile.js +14 -15
  68. package/dist/chunking/chunkFile.js.map +1 -1
  69. package/dist/config.d.ts +3 -0
  70. package/dist/config.d.ts.map +1 -1
  71. package/dist/config.js +35 -3
  72. package/dist/config.js.map +1 -1
  73. package/dist/documentLinks/check.d.ts +2 -1
  74. package/dist/documentLinks/check.d.ts.map +1 -1
  75. package/dist/documentLinks/check.js +22 -11
  76. package/dist/documentLinks/check.js.map +1 -1
  77. package/dist/duplicate-token-normalization.d.ts.map +1 -1
  78. package/dist/duplicate-token-normalization.js +10 -2
  79. package/dist/duplicate-token-normalization.js.map +1 -1
  80. package/dist/duplicates/scoring.d.ts +0 -10
  81. package/dist/duplicates/scoring.d.ts.map +1 -1
  82. package/dist/duplicates/scoring.js +9 -9
  83. package/dist/duplicates/scoring.js.map +1 -1
  84. package/dist/duplicates/types.d.ts +2 -0
  85. package/dist/duplicates/types.d.ts.map +1 -1
  86. package/dist/duplicates/unitCache.d.ts +15 -9
  87. package/dist/duplicates/unitCache.d.ts.map +1 -1
  88. package/dist/duplicates/unitCache.js +184 -33
  89. package/dist/duplicates/unitCache.js.map +1 -1
  90. package/dist/duplicates/units.d.ts +6 -15
  91. package/dist/duplicates/units.d.ts.map +1 -1
  92. package/dist/duplicates/units.js +42 -20
  93. package/dist/duplicates/units.js.map +1 -1
  94. package/dist/duplicates.d.ts.map +1 -1
  95. package/dist/duplicates.js +59 -0
  96. package/dist/duplicates.js.map +1 -1
  97. package/dist/frameworks/angularjs.d.ts.map +1 -1
  98. package/dist/frameworks/angularjs.js +18 -12
  99. package/dist/frameworks/angularjs.js.map +1 -1
  100. package/dist/graph-builder.d.ts.map +1 -1
  101. package/dist/graph-builder.js +12 -9
  102. package/dist/graph-builder.js.map +1 -1
  103. package/dist/graph-edge-collector.d.ts +1 -0
  104. package/dist/graph-edge-collector.d.ts.map +1 -1
  105. package/dist/graph-edge-collector.js +1 -1
  106. package/dist/graph-edge-collector.js.map +1 -1
  107. package/dist/graphs/grep.d.ts.map +1 -1
  108. package/dist/graphs/grep.js +7 -2
  109. package/dist/graphs/grep.js.map +1 -1
  110. package/dist/graphs/specifiers.d.ts.map +1 -1
  111. package/dist/graphs/specifiers.js +8 -2
  112. package/dist/graphs/specifiers.js.map +1 -1
  113. package/dist/graphs/symbol-graph-detailed.d.ts +10 -1
  114. package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
  115. package/dist/graphs/symbol-graph-detailed.js +21 -5
  116. package/dist/graphs/symbol-graph-detailed.js.map +1 -1
  117. package/dist/impact/analyzer.d.ts.map +1 -1
  118. package/dist/impact/analyzer.js +19 -2
  119. package/dist/impact/analyzer.js.map +1 -1
  120. package/dist/impact/budgets.d.ts.map +1 -1
  121. package/dist/impact/budgets.js +5 -3
  122. package/dist/impact/budgets.js.map +1 -1
  123. package/dist/impact/call-compatibility/textScanner.d.ts +23 -0
  124. package/dist/impact/call-compatibility/textScanner.d.ts.map +1 -0
  125. package/dist/impact/call-compatibility/textScanner.js +615 -0
  126. package/dist/impact/call-compatibility/textScanner.js.map +1 -0
  127. package/dist/impact/callCompatibility.d.ts +8 -1
  128. package/dist/impact/callCompatibility.d.ts.map +1 -1
  129. package/dist/impact/callCompatibility.js +64 -587
  130. package/dist/impact/callCompatibility.js.map +1 -1
  131. package/dist/impact/context.d.ts.map +1 -1
  132. package/dist/impact/context.js +4 -1
  133. package/dist/impact/context.js.map +1 -1
  134. package/dist/impact/direct.d.ts +1 -1
  135. package/dist/impact/direct.d.ts.map +1 -1
  136. package/dist/impact/direct.js +7 -6
  137. package/dist/impact/direct.js.map +1 -1
  138. package/dist/impact/index.d.ts +6 -0
  139. package/dist/impact/index.d.ts.map +1 -1
  140. package/dist/impact/index.js +0 -8
  141. package/dist/impact/index.js.map +1 -1
  142. package/dist/impact/map.js +2 -2
  143. package/dist/impact/map.js.map +1 -1
  144. package/dist/impact/memberResolutionCoverage.d.ts.map +1 -1
  145. package/dist/impact/memberResolutionCoverage.js +5 -1
  146. package/dist/impact/memberResolutionCoverage.js.map +1 -1
  147. package/dist/impact/parse.d.ts.map +1 -1
  148. package/dist/impact/parse.js +108 -37
  149. package/dist/impact/parse.js.map +1 -1
  150. package/dist/impact/referenceCache.js +1 -1
  151. package/dist/impact/referenceCache.js.map +1 -1
  152. package/dist/impact/report-suggestions.d.ts.map +1 -1
  153. package/dist/impact/report-suggestions.js +347 -72
  154. package/dist/impact/report-suggestions.js.map +1 -1
  155. package/dist/impact/report.d.ts.map +1 -1
  156. package/dist/impact/report.js +13 -2
  157. package/dist/impact/report.js.map +1 -1
  158. package/dist/impact/reportCompact.d.ts.map +1 -1
  159. package/dist/impact/reportCompact.js +8 -0
  160. package/dist/impact/reportCompact.js.map +1 -1
  161. package/dist/impact/reportFull.d.ts.map +1 -1
  162. package/dist/impact/reportFull.js +1 -0
  163. package/dist/impact/reportFull.js.map +1 -1
  164. package/dist/impact/reportParts.d.ts +9 -0
  165. package/dist/impact/reportParts.d.ts.map +1 -1
  166. package/dist/impact/severity.d.ts +3 -2
  167. package/dist/impact/severity.d.ts.map +1 -1
  168. package/dist/impact/severity.js +16 -5
  169. package/dist/impact/severity.js.map +1 -1
  170. package/dist/impact/streaming.d.ts +32 -2
  171. package/dist/impact/streaming.d.ts.map +1 -1
  172. package/dist/impact/streaming.js +62 -3
  173. package/dist/impact/streaming.js.map +1 -1
  174. package/dist/impact/suggestions.d.ts.map +1 -1
  175. package/dist/impact/suggestions.js +1 -1
  176. package/dist/impact/suggestions.js.map +1 -1
  177. package/dist/impact/transitive.d.ts.map +1 -1
  178. package/dist/impact/transitive.js +13 -5
  179. package/dist/impact/transitive.js.map +1 -1
  180. package/dist/impact/types.d.ts +21 -20
  181. package/dist/impact/types.d.ts.map +1 -1
  182. package/dist/impact/types.js.map +1 -1
  183. package/dist/index.d.ts +2 -2
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +1 -1
  186. package/dist/index.js.map +1 -1
  187. package/dist/indexer/build-cache/location.d.ts +19 -0
  188. package/dist/indexer/build-cache/location.d.ts.map +1 -0
  189. package/dist/indexer/build-cache/location.js +132 -0
  190. package/dist/indexer/build-cache/location.js.map +1 -0
  191. package/dist/indexer/build-cache/manifest.d.ts +14 -6
  192. package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
  193. package/dist/indexer/build-cache/manifest.js +194 -30
  194. package/dist/indexer/build-cache/manifest.js.map +1 -1
  195. package/dist/indexer/build-cache/module-cache.d.ts +24 -2
  196. package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
  197. package/dist/indexer/build-cache/module-cache.js +98 -32
  198. package/dist/indexer/build-cache/module-cache.js.map +1 -1
  199. package/dist/indexer/build-cache/options.d.ts +3 -1
  200. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  201. package/dist/indexer/build-cache/options.js +10 -2
  202. package/dist/indexer/build-cache/options.js.map +1 -1
  203. package/dist/indexer/build-cache/project-snapshot.d.ts +33 -13
  204. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  205. package/dist/indexer/build-cache/project-snapshot.js +472 -91
  206. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  207. package/dist/indexer/build-cache/reports.d.ts.map +1 -1
  208. package/dist/indexer/build-cache/reports.js +10 -1
  209. package/dist/indexer/build-cache/reports.js.map +1 -1
  210. package/dist/indexer/build-cache/resolver-environment.d.ts +9 -0
  211. package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -0
  212. package/dist/indexer/build-cache/resolver-environment.js +160 -0
  213. package/dist/indexer/build-cache/resolver-environment.js.map +1 -0
  214. package/dist/indexer/build-cache.d.ts +4 -3
  215. package/dist/indexer/build-cache.d.ts.map +1 -1
  216. package/dist/indexer/build-cache.js +4 -3
  217. package/dist/indexer/build-cache.js.map +1 -1
  218. package/dist/indexer/build-index.d.ts.map +1 -1
  219. package/dist/indexer/build-index.js +268 -96
  220. package/dist/indexer/build-index.js.map +1 -1
  221. package/dist/indexer/build-manifest.d.ts +1 -0
  222. package/dist/indexer/build-manifest.d.ts.map +1 -1
  223. package/dist/indexer/build-manifest.js +15 -5
  224. package/dist/indexer/build-manifest.js.map +1 -1
  225. package/dist/indexer/build-workers.d.ts +1 -1
  226. package/dist/indexer/build-workers.d.ts.map +1 -1
  227. package/dist/indexer/build-workers.js +57 -42
  228. package/dist/indexer/build-workers.js.map +1 -1
  229. package/dist/indexer/call-hierarchy.d.ts.map +1 -1
  230. package/dist/indexer/call-hierarchy.js.map +1 -1
  231. package/dist/indexer/finalize.d.ts.map +1 -1
  232. package/dist/indexer/finalize.js +7 -4
  233. package/dist/indexer/finalize.js.map +1 -1
  234. package/dist/indexer/import-types.d.ts +8 -0
  235. package/dist/indexer/import-types.d.ts.map +1 -1
  236. package/dist/indexer/imports/jsTextImports.d.ts.map +1 -1
  237. package/dist/indexer/imports/jsTextImports.js +14 -6
  238. package/dist/indexer/imports/jsTextImports.js.map +1 -1
  239. package/dist/indexer/imports/languageSpecific.d.ts.map +1 -1
  240. package/dist/indexer/imports/languageSpecific.js +10 -5
  241. package/dist/indexer/imports/languageSpecific.js.map +1 -1
  242. package/dist/indexer/imports/nativeCaptures.d.ts.map +1 -1
  243. package/dist/indexer/imports/nativeCaptures.js +4 -1
  244. package/dist/indexer/imports/nativeCaptures.js.map +1 -1
  245. package/dist/indexer/imports/python.d.ts.map +1 -1
  246. package/dist/indexer/imports/python.js +19 -9
  247. package/dist/indexer/imports/python.js.map +1 -1
  248. package/dist/indexer/incremental-plan.d.ts +2 -1
  249. package/dist/indexer/incremental-plan.d.ts.map +1 -1
  250. package/dist/indexer/incremental-plan.js +7 -4
  251. package/dist/indexer/incremental-plan.js.map +1 -1
  252. package/dist/indexer/load-current-index.d.ts.map +1 -1
  253. package/dist/indexer/load-current-index.js.map +1 -1
  254. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  255. package/dist/indexer/locals-and-exports.js +77 -22
  256. package/dist/indexer/locals-and-exports.js.map +1 -1
  257. package/dist/indexer/navigation-goto.d.ts.map +1 -1
  258. package/dist/indexer/navigation-goto.js +26 -16
  259. package/dist/indexer/navigation-goto.js.map +1 -1
  260. package/dist/indexer/navigation-local.d.ts.map +1 -1
  261. package/dist/indexer/navigation-local.js +7 -4
  262. package/dist/indexer/navigation-local.js.map +1 -1
  263. package/dist/indexer/navigation-references.d.ts +1 -1
  264. package/dist/indexer/navigation-references.d.ts.map +1 -1
  265. package/dist/indexer/navigation-references.js +34 -17
  266. package/dist/indexer/navigation-references.js.map +1 -1
  267. package/dist/indexer/navigation-resolve.d.ts.map +1 -1
  268. package/dist/indexer/navigation-resolve.js +116 -53
  269. package/dist/indexer/navigation-resolve.js.map +1 -1
  270. package/dist/indexer/navigation.d.ts +2 -1
  271. package/dist/indexer/navigation.d.ts.map +1 -1
  272. package/dist/indexer/navigation.js +34 -20
  273. package/dist/indexer/navigation.js.map +1 -1
  274. package/dist/indexer/parse-context.d.ts +2 -2
  275. package/dist/indexer/parse-context.d.ts.map +1 -1
  276. package/dist/indexer/parse-context.js +25 -4
  277. package/dist/indexer/parse-context.js.map +1 -1
  278. package/dist/indexer/reference-context.d.ts +2 -2
  279. package/dist/indexer/reference-context.d.ts.map +1 -1
  280. package/dist/indexer/reference-context.js +4 -2
  281. package/dist/indexer/reference-context.js.map +1 -1
  282. package/dist/indexer/scope-types.d.ts +3 -0
  283. package/dist/indexer/scope-types.d.ts.map +1 -1
  284. package/dist/indexer/scope.js +37 -38
  285. package/dist/indexer/scope.js.map +1 -1
  286. package/dist/indexer/shared.d.ts.map +1 -1
  287. package/dist/indexer/shared.js +3 -1
  288. package/dist/indexer/shared.js.map +1 -1
  289. package/dist/indexer/type-hierarchy.d.ts.map +1 -1
  290. package/dist/indexer/type-hierarchy.js +12 -8
  291. package/dist/indexer/type-hierarchy.js.map +1 -1
  292. package/dist/indexer/types.d.ts +27 -1
  293. package/dist/indexer/types.d.ts.map +1 -1
  294. package/dist/indexer/workspace-symbols.d.ts.map +1 -1
  295. package/dist/indexer/workspace-symbols.js +5 -3
  296. package/dist/indexer/workspace-symbols.js.map +1 -1
  297. package/dist/languages/definitions/csharp.d.ts.map +1 -1
  298. package/dist/languages/definitions/csharp.js +8 -0
  299. package/dist/languages/definitions/csharp.js.map +1 -1
  300. package/dist/languages/definitions/java.d.ts.map +1 -1
  301. package/dist/languages/definitions/java.js +3 -0
  302. package/dist/languages/definitions/java.js.map +1 -1
  303. package/dist/languages/definitions/python.d.ts.map +1 -1
  304. package/dist/languages/definitions/python.js +2 -0
  305. package/dist/languages/definitions/python.js.map +1 -1
  306. package/dist/languages/definitions/rust.d.ts.map +1 -1
  307. package/dist/languages/definitions/rust.js +2 -0
  308. package/dist/languages/definitions/rust.js.map +1 -1
  309. package/dist/languages/importStatementParsers.d.ts +2 -0
  310. package/dist/languages/importStatementParsers.d.ts.map +1 -1
  311. package/dist/languages/importStatementParsers.js +24 -10
  312. package/dist/languages/importStatementParsers.js.map +1 -1
  313. package/dist/native/byteIndex.d.ts +26 -0
  314. package/dist/native/byteIndex.d.ts.map +1 -0
  315. package/dist/native/byteIndex.js +70 -0
  316. package/dist/native/byteIndex.js.map +1 -0
  317. package/dist/native/projectedTree.d.ts +3 -2
  318. package/dist/native/projectedTree.d.ts.map +1 -1
  319. package/dist/native/projectedTree.js +6 -50
  320. package/dist/native/projectedTree.js.map +1 -1
  321. package/dist/native/queryResults.d.ts +7 -1
  322. package/dist/native/queryResults.d.ts.map +1 -1
  323. package/dist/native/queryResults.js +13 -5
  324. package/dist/native/queryResults.js.map +1 -1
  325. package/dist/review/candidates.d.ts.map +1 -1
  326. package/dist/review/candidates.js +4 -1
  327. package/dist/review/candidates.js.map +1 -1
  328. package/dist/review/changes.d.ts +2 -0
  329. package/dist/review/changes.d.ts.map +1 -1
  330. package/dist/review/changes.js +10 -0
  331. package/dist/review/changes.js.map +1 -1
  332. package/dist/review/deleted.d.ts.map +1 -1
  333. package/dist/review/deleted.js +20 -2
  334. package/dist/review/deleted.js.map +1 -1
  335. package/dist/review/summaries.d.ts +5 -0
  336. package/dist/review/summaries.d.ts.map +1 -1
  337. package/dist/review/summaries.js +32 -21
  338. package/dist/review/summaries.js.map +1 -1
  339. package/dist/review/types.d.ts +3 -1
  340. package/dist/review/types.d.ts.map +1 -1
  341. package/dist/review/types.js +8 -1
  342. package/dist/review/types.js.map +1 -1
  343. package/dist/review.d.ts.map +1 -1
  344. package/dist/review.js +14 -5
  345. package/dist/review.js.map +1 -1
  346. package/dist/session.d.ts +20 -4
  347. package/dist/session.d.ts.map +1 -1
  348. package/dist/session.js +76 -16
  349. package/dist/session.js.map +1 -1
  350. package/dist/sql/types.d.ts.map +1 -1
  351. package/dist/sqlite/query.d.ts +29 -0
  352. package/dist/sqlite/query.d.ts.map +1 -1
  353. package/dist/sqlite/query.js +98 -11
  354. package/dist/sqlite/query.js.map +1 -1
  355. package/dist/sqlite/rawQueryWorker.d.ts +22 -0
  356. package/dist/sqlite/rawQueryWorker.d.ts.map +1 -0
  357. package/dist/sqlite/rawQueryWorker.js +31 -0
  358. package/dist/sqlite/rawQueryWorker.js.map +1 -0
  359. package/dist/sqlite/rawQueryWorkerPool.d.ts +66 -0
  360. package/dist/sqlite/rawQueryWorkerPool.d.ts.map +1 -0
  361. package/dist/sqlite/rawQueryWorkerPool.js +142 -0
  362. package/dist/sqlite/rawQueryWorkerPool.js.map +1 -0
  363. package/dist/sqlite/schema.d.ts +2 -1
  364. package/dist/sqlite/schema.d.ts.map +1 -1
  365. package/dist/sqlite/schema.js +15 -1
  366. package/dist/sqlite/schema.js.map +1 -1
  367. package/dist/sqlite/write.d.ts.map +1 -1
  368. package/dist/sqlite/write.js +15 -0
  369. package/dist/sqlite/write.js.map +1 -1
  370. package/dist/sqlite-driver.d.ts +11 -0
  371. package/dist/sqlite-driver.d.ts.map +1 -1
  372. package/dist/sqlite-driver.js +28 -2
  373. package/dist/sqlite-driver.js.map +1 -1
  374. package/dist/sqlite.d.ts +1 -1
  375. package/dist/sqlite.d.ts.map +1 -1
  376. package/dist/sqlite.js +1 -1
  377. package/dist/sqlite.js.map +1 -1
  378. package/dist/util/bloomFilter.d.ts +3 -2
  379. package/dist/util/bloomFilter.d.ts.map +1 -1
  380. package/dist/util/bloomFilter.js +8 -8
  381. package/dist/util/bloomFilter.js.map +1 -1
  382. package/dist/util/concurrency.d.ts +1 -0
  383. package/dist/util/concurrency.d.ts.map +1 -1
  384. package/dist/util/concurrency.js +9 -2
  385. package/dist/util/concurrency.js.map +1 -1
  386. package/dist/util/confinedFile.d.ts +42 -2
  387. package/dist/util/confinedFile.d.ts.map +1 -1
  388. package/dist/util/confinedFile.js +114 -3
  389. package/dist/util/confinedFile.js.map +1 -1
  390. package/dist/util/errors.d.ts +2 -0
  391. package/dist/util/errors.d.ts.map +1 -1
  392. package/dist/util/errors.js +18 -0
  393. package/dist/util/errors.js.map +1 -1
  394. package/dist/util/git.d.ts +2 -0
  395. package/dist/util/git.d.ts.map +1 -1
  396. package/dist/util/git.js +174 -26
  397. package/dist/util/git.js.map +1 -1
  398. package/dist/util/identifiers.d.ts +75 -0
  399. package/dist/util/identifiers.d.ts.map +1 -0
  400. package/dist/util/identifiers.js +82 -0
  401. package/dist/util/identifiers.js.map +1 -0
  402. package/dist/util/paths.d.ts.map +1 -1
  403. package/dist/util/paths.js +45 -9
  404. package/dist/util/paths.js.map +1 -1
  405. package/dist/util/projectFiles.d.ts.map +1 -1
  406. package/dist/util/projectFiles.js +43 -14
  407. package/dist/util/projectFiles.js.map +1 -1
  408. package/dist/util/resolution/jvm.d.ts.map +1 -1
  409. package/dist/util/resolution/jvm.js +20 -9
  410. package/dist/util/resolution/jvm.js.map +1 -1
  411. package/dist/util/resolution/php.d.ts.map +1 -1
  412. package/dist/util/resolution/php.js +6 -5
  413. package/dist/util/resolution/php.js.map +1 -1
  414. package/dist/util/resolution/tsconfig.d.ts.map +1 -1
  415. package/dist/util/resolution/tsconfig.js +26 -12
  416. package/dist/util/resolution/tsconfig.js.map +1 -1
  417. package/dist/util/rustTestModules.d.ts.map +1 -1
  418. package/dist/util/rustTestModules.js +4 -2
  419. package/dist/util/rustTestModules.js.map +1 -1
  420. package/dist/util/specifiers.d.ts.map +1 -1
  421. package/dist/util/specifiers.js +10 -3
  422. package/dist/util/specifiers.js.map +1 -1
  423. package/dist/util/sqliteSchema.d.ts.map +1 -1
  424. package/dist/util/sqliteSchema.js +10 -1
  425. package/dist/util/sqliteSchema.js.map +1 -1
  426. package/dist/worker/nativeExtractWorker.d.ts +4 -2
  427. package/dist/worker/nativeExtractWorker.d.ts.map +1 -1
  428. package/dist/worker/nativeExtractWorker.js +12 -11
  429. package/dist/worker/nativeExtractWorker.js.map +1 -1
  430. package/package.json +2 -2
@@ -5,11 +5,15 @@ import { findReferences } from "../indexer/navigation.js";
5
5
  import { fileIdentityKey, resolveFilePathFromRoot, toProjectDisplayPath } from "../util/paths.js";
6
6
  import { mapLimit } from "../util/concurrency.js";
7
7
  import { maskJsLikeCommentsAndStrings } from "../util/comments.js";
8
+ import { findBalancedAngleBrackets, findBalancedBraces, findBalancedParentheses, } from "./call-compatibility/textScanner.js";
8
9
  import { listCandidateTestFiles } from "./context.js";
9
10
  import { collectHunkLineText, collectRemovedLines } from "./hunks.js";
10
11
  import { normalizeImpactFilePath } from "./path.js";
11
12
  import { collectImpactSuggestions } from "./suggestions.js";
12
13
  import { compileTestPatterns, createIndexTestFileMatcher } from "./testPatterns.js";
14
+ import { ECMASCRIPT_IDENTIFIER_SOURCE } from "../util/identifiers.js";
15
+ const JAVASCRIPT_IDENTIFIER_PATTERN = new RegExp(ECMASCRIPT_IDENTIFIER_SOURCE, "uy");
16
+ const JAVASCRIPT_IDENTIFIER_PART_PATTERN = new RegExp(String.raw `(?:${ECMASCRIPT_IDENTIFIER_SOURCE})|[$_\p{ID_Continue}\u200c\u200d]`, "u");
13
17
  const CONFIG_FILE_RE = /(^|\/)(?:tsconfig(?:\.[^./]+)?\.json|jsconfig\.json|vite\.config\.[cm]?[jt]s|webpack\.config\.[cm]?[jt]s|rollup\.config\.[cm]?[jt]s|esbuild\.config\.[cm]?[jt]s|babel\.config\.[cm]?[jt]s|\.eslintrc(?:\.[^./]+)?|prettier\.config\.[cm]?[jt]s|package\.json|pnpm-workspace\.ya?ml|lerna\.json|turbo\.json|nx\.json|\.env(?:\.[^/]*)?)$/i;
14
18
  const UNTESTED_CHANGE_REFERENCE_SCAN_LIMIT = 500;
15
19
  function matchesConfigSemantics(filePath) {
@@ -208,6 +212,7 @@ function collectConfigAndBreakingSuggestions(index, projectRoot, fileChanges, ch
208
212
  for (const change of signatureChanges) {
209
213
  upsertBreakingSuggestion({
210
214
  file: normalized,
215
+ ...(change.range ? { range: change.range } : {}),
211
216
  kind: "breakingChange",
212
217
  symbol: change.name,
213
218
  details: change.details,
@@ -374,8 +379,9 @@ async function collectUntestedChangeSuggestions(index, changedSymbols, projectRo
374
379
  });
375
380
  if (refs.status !== "ok")
376
381
  return undefined;
382
+ const scanMayBeTruncated = refs.references.length >= UNTESTED_CHANGE_REFERENCE_SCAN_LIMIT;
377
383
  const hasTestRef = refs.references.some((entry) => testFiles.has(fileIdentityKey(entry.file)));
378
- if (hasTestRef)
384
+ if (hasTestRef && !scanMayBeTruncated)
379
385
  return undefined;
380
386
  const coverage = coverageByFile.get(symbol.file);
381
387
  const coveredLines = countCoveredLinesForRange(coverage, symbol.range);
@@ -389,18 +395,23 @@ async function collectUntestedChangeSuggestions(index, changedSymbols, projectRo
389
395
  ? `Coverage currently exercises ${coveredLines}/${totalLines} changed line(s).`
390
396
  : "No LCOV or Istanbul coverage data matched this symbol range.";
391
397
  const fanIn = fanInByFile.get(fileIdentityKey(symbol.file)) ?? 0;
392
- const confidence = confidenceFromSignals({
393
- hasCoverageData,
394
- coveredLines,
395
- totalLines,
396
- exported: symbol.exported,
397
- fanIn,
398
- kind: symbol.kind,
399
- });
398
+ const confidence = scanMayBeTruncated
399
+ ? "low"
400
+ : confidenceFromSignals({
401
+ hasCoverageData,
402
+ coveredLines,
403
+ totalLines,
404
+ exported: symbol.exported,
405
+ fanIn,
406
+ kind: symbol.kind,
407
+ });
400
408
  const suggestedCommand = inferTestCommand(candidateNames);
409
+ const referenceScanNote = scanMayBeTruncated
410
+ ? `Reference scan reached the ${UNTESTED_CHANGE_REFERENCE_SCAN_LIMIT}-reference cap; test coverage may be under-counted. `
411
+ : "";
401
412
  const details = candidateNames.length
402
- ? `Changed symbol has no discovered references in test files. ${coverageSummary} Candidate tests: ${candidateNames.join(", ")}. Fan-in for this file is ${fanIn}. Suggested command: ${suggestedCommand}`
403
- : `Changed symbol has no discovered references in test files. ${coverageSummary} Fan-in for this file is ${fanIn}. Suggested command: ${suggestedCommand}`;
413
+ ? `${referenceScanNote}Changed symbol has no discovered references in test files. ${coverageSummary} Candidate tests: ${candidateNames.join(", ")}. Fan-in for this file is ${fanIn}. Suggested command: ${suggestedCommand}`
414
+ : `${referenceScanNote}Changed symbol has no discovered references in test files. ${coverageSummary} Fan-in for this file is ${fanIn}. Suggested command: ${suggestedCommand}`;
404
415
  return {
405
416
  file: symbol.file,
406
417
  range: symbol.range,
@@ -524,41 +535,113 @@ function countNewlines(text) {
524
535
  }
525
536
  return count;
526
537
  }
527
- function readBalancedParenContent(text, openParenIndex) {
528
- let depth = 0;
529
- let quote = null;
530
- let escaping = false;
531
- for (let index = openParenIndex; index < text.length; index += 1) {
532
- const ch = text[index];
533
- if (quote) {
534
- if (escaping) {
535
- escaping = false;
536
- continue;
537
- }
538
- if (ch === "\\") {
539
- escaping = true;
540
- continue;
541
- }
542
- if (ch === quote)
543
- quote = null;
538
+ function skipWhitespaceAndComments(text, index) {
539
+ let cursor = index;
540
+ while (cursor < text.length) {
541
+ const ch = text[cursor];
542
+ if (!ch)
543
+ break;
544
+ if (/\s/.test(ch)) {
545
+ cursor += 1;
544
546
  continue;
545
547
  }
546
- if (ch === '"' || ch === "'" || ch === "`") {
547
- quote = ch;
548
+ if (ch === "/" && text[cursor + 1] === "/") {
549
+ const newline = text.indexOf("\n", cursor + 2);
550
+ cursor = newline < 0 ? text.length : newline + 1;
548
551
  continue;
549
552
  }
550
- if (ch === "(") {
551
- depth += 1;
553
+ if (ch === "/" && text[cursor + 1] === "*") {
554
+ const close = text.indexOf("*/", cursor + 2);
555
+ cursor = close < 0 ? text.length : close + 2;
552
556
  continue;
553
557
  }
554
- if (ch === ")") {
555
- depth -= 1;
556
- if (!depth) {
557
- return { content: text.slice(openParenIndex + 1, index), endIndex: index };
558
+ break;
559
+ }
560
+ return cursor;
561
+ }
562
+ function readIdentifier(text, index) {
563
+ const ch = text[index];
564
+ if (!ch)
565
+ return null;
566
+ JAVASCRIPT_IDENTIFIER_PATTERN.lastIndex = index;
567
+ const identifierMatch = JAVASCRIPT_IDENTIFIER_PATTERN.exec(text);
568
+ if (!identifierMatch)
569
+ return null;
570
+ const end = JAVASCRIPT_IDENTIFIER_PATTERN.lastIndex;
571
+ return { name: text.slice(index, end), end };
572
+ }
573
+ function skipDecorator(text, index) {
574
+ if (text[index] !== "@")
575
+ return null;
576
+ let cursor = skipWhitespaceAndComments(text, index + 1);
577
+ let segment = readIdentifier(text, cursor);
578
+ if (!segment)
579
+ return null;
580
+ cursor = skipWhitespaceAndComments(text, segment.end);
581
+ while (text[cursor] === ".") {
582
+ cursor = skipWhitespaceAndComments(text, cursor + 1);
583
+ segment = readIdentifier(text, cursor);
584
+ if (!segment)
585
+ return null;
586
+ cursor = skipWhitespaceAndComments(text, segment.end);
587
+ }
588
+ if (text[cursor] === "(") {
589
+ const args = findBalancedParentheses(text, cursor);
590
+ if (!args)
591
+ return null;
592
+ return args.end;
593
+ }
594
+ return cursor;
595
+ }
596
+ function skipOptionalGenerics(text, index) {
597
+ const cursor = skipWhitespaceAndComments(text, index);
598
+ if (text[cursor] !== "<")
599
+ return cursor;
600
+ const close = findBalancedAngleBrackets(text, cursor);
601
+ return close < 0 ? cursor : close + 1;
602
+ }
603
+ function skipHeritageClause(text, index) {
604
+ let cursor = skipWhitespaceAndComments(text, index);
605
+ while (true) {
606
+ const keyword = readIdentifier(text, cursor);
607
+ if (!keyword || (keyword.name !== "extends" && keyword.name !== "implements")) {
608
+ return cursor;
609
+ }
610
+ cursor = skipWhitespaceAndComments(text, keyword.end);
611
+ while (cursor < text.length) {
612
+ const ch = text[cursor];
613
+ if (!ch)
614
+ break;
615
+ if (ch === "{")
616
+ return cursor;
617
+ if (ch === "<") {
618
+ const close = findBalancedAngleBrackets(text, cursor);
619
+ if (close < 0)
620
+ return cursor;
621
+ cursor = close + 1;
622
+ continue;
623
+ }
624
+ if (ch === "(") {
625
+ const balanced = findBalancedParentheses(text, cursor);
626
+ if (!balanced)
627
+ return cursor;
628
+ cursor = balanced.end;
629
+ continue;
630
+ }
631
+ if (ch === ",") {
632
+ cursor = skipWhitespaceAndComments(text, cursor + 1);
633
+ continue;
558
634
  }
635
+ if (/\s/.test(ch)) {
636
+ cursor = skipWhitespaceAndComments(text, cursor);
637
+ const next = readIdentifier(text, cursor);
638
+ if (next && (next.name === "extends" || next.name === "implements"))
639
+ break;
640
+ continue;
641
+ }
642
+ cursor += 1;
559
643
  }
560
644
  }
561
- return null;
562
645
  }
563
646
  function functionSuffixStartsAfterParams(text, closeParenIndex) {
564
647
  return /^\s*(?::|[{;])/.test(text.slice(closeParenIndex + 1));
@@ -622,45 +705,231 @@ function arrowSuffixStartsAfterParams(text, closeParenIndex) {
622
705
  }
623
706
  return false;
624
707
  }
625
- function collectExportSignaturesFromText(text, hunkIndex, startLine) {
626
- const output = [];
627
- const pushMatch = (match, name, rawParams) => {
628
- output.push({
629
- name,
630
- paramCount: countParams(rawParams),
708
+ function lineRangeAt(text, index, startLine) {
709
+ const line = startLine + countNewlines(text.slice(0, index));
710
+ return {
711
+ start: { line, column: 1 },
712
+ end: { line, column: 1 },
713
+ };
714
+ }
715
+ function findConstructorParamCount(classBodyInner) {
716
+ let depth = 0;
717
+ let quote = null;
718
+ let escaped = false;
719
+ for (let index = 0; index < classBodyInner.length; index += 1) {
720
+ const ch = classBodyInner[index];
721
+ if (!ch)
722
+ continue;
723
+ if (quote) {
724
+ if (escaped) {
725
+ escaped = false;
726
+ continue;
727
+ }
728
+ if (ch === "\\") {
729
+ escaped = true;
730
+ continue;
731
+ }
732
+ if (ch === quote)
733
+ quote = null;
734
+ continue;
735
+ }
736
+ if (ch === '"' || ch === "'" || ch === "`") {
737
+ quote = ch;
738
+ continue;
739
+ }
740
+ if (ch === "{") {
741
+ depth += 1;
742
+ continue;
743
+ }
744
+ if (ch === "}") {
745
+ if (depth)
746
+ depth -= 1;
747
+ continue;
748
+ }
749
+ if (depth !== 0)
750
+ continue;
751
+ if (classBodyInner.startsWith("constructor", index) &&
752
+ !JAVASCRIPT_IDENTIFIER_PART_PATTERN.test(classBodyInner[index - 1] ?? "")) {
753
+ const cursor = skipWhitespaceAndComments(classBodyInner, index + "constructor".length);
754
+ if (classBodyInner[cursor] !== "(")
755
+ continue;
756
+ const params = findBalancedParentheses(classBodyInner, cursor);
757
+ if (!params)
758
+ return null;
759
+ return countParams(params.inner);
760
+ }
761
+ }
762
+ return 0;
763
+ }
764
+ function tryParseExportedFunction(text, index, hunkIndex, startLine, isDefault) {
765
+ let cursor = skipWhitespaceAndComments(text, index);
766
+ const maybeAsync = readIdentifier(text, cursor);
767
+ if (maybeAsync?.name === "async") {
768
+ cursor = skipWhitespaceAndComments(text, maybeAsync.end);
769
+ }
770
+ const keyword = readIdentifier(text, cursor);
771
+ if (keyword?.name !== "function")
772
+ return null;
773
+ cursor = skipWhitespaceAndComments(text, keyword.end);
774
+ if (text[cursor] === "*")
775
+ cursor = skipWhitespaceAndComments(text, cursor + 1);
776
+ const name = readIdentifier(text, cursor);
777
+ if (name) {
778
+ cursor = name.end;
779
+ }
780
+ else if (!isDefault) {
781
+ return null;
782
+ }
783
+ const exportName = name?.name ?? "default";
784
+ cursor = skipOptionalGenerics(text, cursor);
785
+ cursor = skipWhitespaceAndComments(text, cursor);
786
+ if (text[cursor] !== "(")
787
+ return null;
788
+ const params = findBalancedParentheses(text, cursor);
789
+ if (!params || !functionSuffixStartsAfterParams(text, params.end - 1))
790
+ return null;
791
+ return {
792
+ signature: {
793
+ name: exportName,
794
+ paramCount: countParams(params.inner),
631
795
  hunkIndex,
632
- line: startLine + countNewlines(text.slice(0, match.index)),
633
- });
796
+ line: lineRangeAt(text, index, startLine).start.line,
797
+ },
798
+ end: params.end,
634
799
  };
635
- const scanText = maskJsLikeCommentsAndStrings(text);
636
- const functionRe = /^\s*export\s+(?:default\s+)?(?:async\s+)?function\s*(?:\*\s*)?(?:([A-Za-z_$][\w$]*))?(?:\s*<[^>]+>)?\s*\(/gm;
637
- for (let match; (match = functionRe.exec(scanText));) {
638
- const params = readBalancedParenContent(scanText, functionRe.lastIndex - 1);
639
- if (params && functionSuffixStartsAfterParams(scanText, params.endIndex)) {
640
- pushMatch(match, match[1] ?? "default", params.content);
641
- functionRe.lastIndex = params.endIndex + 1;
642
- }
643
- }
644
- const arrowRe = /^\s*export\s+const\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?(?:<[^>]+>\s*)?\(/gm;
645
- for (let match; (match = arrowRe.exec(scanText));) {
646
- const name = match[1];
647
- const params = readBalancedParenContent(scanText, arrowRe.lastIndex - 1);
648
- if (name && params && arrowSuffixStartsAfterParams(scanText, params.endIndex)) {
649
- pushMatch(match, name, params.content);
650
- arrowRe.lastIndex = params.endIndex + 1;
651
- }
652
- }
653
- const singleParamArrowRe = /^\s*export\s+const\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s*)?([A-Za-z_$][\w$]*)\s*=>/gm;
654
- for (let match; (match = singleParamArrowRe.exec(scanText));) {
655
- const name = match[1];
656
- if (!name)
657
- continue;
658
- output.push({
659
- name,
800
+ }
801
+ function tryParseExportedArrow(text, index, hunkIndex, startLine) {
802
+ let cursor = skipWhitespaceAndComments(text, index);
803
+ const binding = readIdentifier(text, cursor);
804
+ if (binding?.name !== "const" && binding?.name !== "let" && binding?.name !== "var")
805
+ return null;
806
+ cursor = skipWhitespaceAndComments(text, binding.end);
807
+ const name = readIdentifier(text, cursor);
808
+ if (!name)
809
+ return null;
810
+ cursor = skipWhitespaceAndComments(text, name.end);
811
+ if (text[cursor] !== "=")
812
+ return null;
813
+ cursor = skipWhitespaceAndComments(text, cursor + 1);
814
+ const maybeAsync = readIdentifier(text, cursor);
815
+ if (maybeAsync?.name === "async") {
816
+ cursor = skipWhitespaceAndComments(text, maybeAsync.end);
817
+ }
818
+ cursor = skipOptionalGenerics(text, cursor);
819
+ cursor = skipWhitespaceAndComments(text, cursor);
820
+ if (text[cursor] === "(") {
821
+ const params = findBalancedParentheses(text, cursor);
822
+ if (!params || !arrowSuffixStartsAfterParams(text, params.end - 1))
823
+ return null;
824
+ return {
825
+ signature: {
826
+ name: name.name,
827
+ paramCount: countParams(params.inner),
828
+ hunkIndex,
829
+ line: lineRangeAt(text, index, startLine).start.line,
830
+ },
831
+ end: params.end,
832
+ };
833
+ }
834
+ const single = readIdentifier(text, cursor);
835
+ if (!single)
836
+ return null;
837
+ cursor = skipWhitespaceAndComments(text, single.end);
838
+ if (!(text[cursor] === "=" && text[cursor + 1] === ">"))
839
+ return null;
840
+ return {
841
+ signature: {
842
+ name: name.name,
660
843
  paramCount: 1,
661
844
  hunkIndex,
662
- line: startLine + countNewlines(text.slice(0, match.index)),
663
- });
845
+ line: lineRangeAt(text, index, startLine).start.line,
846
+ },
847
+ end: cursor + 2,
848
+ };
849
+ }
850
+ function tryParseExportedClass(text, index, hunkIndex, startLine, isDefault) {
851
+ let cursor = skipWhitespaceAndComments(text, index);
852
+ const maybeAbstract = readIdentifier(text, cursor);
853
+ if (maybeAbstract?.name === "abstract") {
854
+ cursor = skipWhitespaceAndComments(text, maybeAbstract.end);
855
+ }
856
+ const keyword = readIdentifier(text, cursor);
857
+ if (keyword?.name !== "class")
858
+ return null;
859
+ cursor = skipWhitespaceAndComments(text, keyword.end);
860
+ const name = readIdentifier(text, cursor);
861
+ let exportName = isDefault ? "default" : name?.name;
862
+ if (name) {
863
+ exportName = isDefault ? name.name : name.name;
864
+ cursor = name.end;
865
+ }
866
+ else if (!isDefault) {
867
+ return null;
868
+ }
869
+ cursor = skipOptionalGenerics(text, cursor);
870
+ cursor = skipHeritageClause(text, cursor);
871
+ cursor = skipWhitespaceAndComments(text, cursor);
872
+ if (text[cursor] !== "{")
873
+ return null;
874
+ const body = findBalancedBraces(text, cursor);
875
+ if (!body)
876
+ return null;
877
+ const paramCount = findConstructorParamCount(body.inner);
878
+ if (paramCount === null)
879
+ return null;
880
+ return {
881
+ signature: {
882
+ name: exportName ?? "default",
883
+ paramCount,
884
+ hunkIndex,
885
+ line: lineRangeAt(text, index, startLine).start.line,
886
+ },
887
+ end: body.end,
888
+ };
889
+ }
890
+ function collectExportSignaturesFromText(text, hunkIndex, startLine) {
891
+ const output = [];
892
+ const scanText = maskJsLikeCommentsAndStrings(text);
893
+ let index = 0;
894
+ while (index < scanText.length) {
895
+ const exportAt = scanText.indexOf("export", index);
896
+ if (exportAt < 0)
897
+ break;
898
+ const before = exportAt === 0 ? "" : (scanText[exportAt - 1] ?? "");
899
+ const after = scanText[exportAt + "export".length] ?? "";
900
+ if ((before && JAVASCRIPT_IDENTIFIER_PART_PATTERN.test(before)) ||
901
+ (after && JAVASCRIPT_IDENTIFIER_PART_PATTERN.test(after))) {
902
+ index = exportAt + "export".length;
903
+ continue;
904
+ }
905
+ let cursor = skipWhitespaceAndComments(scanText, exportAt + "export".length);
906
+ while (true) {
907
+ const nextDecorator = skipDecorator(scanText, cursor);
908
+ if (nextDecorator === null)
909
+ break;
910
+ cursor = skipWhitespaceAndComments(scanText, nextDecorator);
911
+ }
912
+ let isDefault = false;
913
+ const maybeDefault = readIdentifier(scanText, cursor);
914
+ if (maybeDefault?.name === "default") {
915
+ isDefault = true;
916
+ cursor = skipWhitespaceAndComments(scanText, maybeDefault.end);
917
+ while (true) {
918
+ const nextDecorator = skipDecorator(scanText, cursor);
919
+ if (nextDecorator === null)
920
+ break;
921
+ cursor = skipWhitespaceAndComments(scanText, nextDecorator);
922
+ }
923
+ }
924
+ const parsed = tryParseExportedFunction(scanText, cursor, hunkIndex, startLine, isDefault) ??
925
+ tryParseExportedClass(scanText, cursor, hunkIndex, startLine, isDefault) ??
926
+ (!isDefault ? tryParseExportedArrow(scanText, cursor, hunkIndex, startLine) : null);
927
+ if (parsed) {
928
+ output.push(parsed.signature);
929
+ index = parsed.end;
930
+ continue;
931
+ }
932
+ index = exportAt + "export".length;
664
933
  }
665
934
  return output;
666
935
  }
@@ -722,11 +991,16 @@ function detectExportSignatureChanges(change) {
722
991
  const output = [];
723
992
  for (const removedSig of removed) {
724
993
  const matched = bestAddedMatchForRemoved(removedSig);
994
+ const range = {
995
+ start: { line: removedSig.line, column: 1 },
996
+ end: { line: removedSig.line, column: 1 },
997
+ };
725
998
  if (matched && matched.paramCount !== removedSig.paramCount) {
726
999
  output.push({
727
1000
  name: removedSig.name,
728
1001
  details: `Exported function signature changed from ${removedSig.paramCount} parameter(s) to ${matched.paramCount}. This is likely a breaking API change.`,
729
1002
  confidence: "high",
1003
+ range,
730
1004
  });
731
1005
  continue;
732
1006
  }
@@ -740,6 +1014,7 @@ function detectExportSignatureChanges(change) {
740
1014
  name: removedSig.name,
741
1015
  details: renameDetails,
742
1016
  confidence: "medium",
1017
+ range,
743
1018
  });
744
1019
  }
745
1020
  }