scip-query 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/README.md +16 -43
  2. package/dist/chunk-26DOJ63W.js +161 -0
  3. package/dist/chunk-2UELLEBI.js +1 -0
  4. package/dist/{chunk-4PDAL6IL.js → chunk-4JCSOF2O.js} +3 -3
  5. package/dist/{chunk-6SXADWLW.js → chunk-5OMVSV6E.js} +13 -5
  6. package/dist/{chunk-KPPHZCZJ.js → chunk-7HK5ZLOE.js} +28 -46
  7. package/dist/{chunk-7RLE5EWE.js → chunk-7KIMF5PV.js} +34 -13
  8. package/dist/chunk-AXQKUYKF.js +1442 -0
  9. package/dist/chunk-C7H5WBTJ.js +46 -0
  10. package/dist/{chunk-NHBZIL2J.js → chunk-CHDJXYBG.js} +3 -28
  11. package/dist/{chunk-KCBMVQL5.js → chunk-CPVAQJEC.js} +13 -5
  12. package/dist/{chunk-ZQIIPFD7.js → chunk-DH7G3DDV.js} +2 -2
  13. package/dist/{chunk-BOVXCR46.js → chunk-EOROMIFO.js} +14 -6
  14. package/dist/{chunk-2CKGIR6G.js → chunk-EPWLXXBL.js} +3 -3
  15. package/dist/{chunk-5RMYT5WH.js → chunk-F7XU27LU.js} +2 -2
  16. package/dist/{chunk-63G7IQTD.js → chunk-FYYOWQXK.js} +20 -40
  17. package/dist/chunk-GEXE2T6I.js +87 -0
  18. package/dist/{chunk-DGUPQSOR.js → chunk-GJDHTTR2.js} +11 -4
  19. package/dist/chunk-GSH2FPKV.js +87 -0
  20. package/dist/{chunk-NUZ4OMU3.js → chunk-GU2H5QRN.js} +2 -2
  21. package/dist/{chunk-Z6YZJ36C.js → chunk-HJZUSUPU.js} +8 -4
  22. package/dist/{chunk-LAWMH22O.js → chunk-HLKAFWWJ.js} +82 -3
  23. package/dist/{chunk-HPFZLISB.js → chunk-HLUS2HEB.js} +2 -2
  24. package/dist/{chunk-H2MDONBU.js → chunk-J3JSOSUO.js} +9 -6
  25. package/dist/{chunk-7PBOG4YE.js → chunk-KBOQX573.js} +2 -2
  26. package/dist/{chunk-HDSRORNV.js → chunk-KKCHYLVI.js} +17 -11
  27. package/dist/{chunk-HMLMH7VZ.js → chunk-LFJQVJYJ.js} +2 -2
  28. package/dist/{chunk-4EXL2CUA.js → chunk-LQJUPXQY.js} +16 -8
  29. package/dist/{chunk-ITZ3DDOG.js → chunk-MPGIHELS.js} +18 -3
  30. package/dist/chunk-NFS5W3PP.js +37 -0
  31. package/dist/chunk-NG5F43OU.js +200 -0
  32. package/dist/{chunk-DCKMSTJ4.js → chunk-O7Q7FDUJ.js} +22 -14
  33. package/dist/{chunk-UJQN5N3I.js → chunk-OIDHN6GD.js} +6 -3
  34. package/dist/{chunk-Z4GHE2HD.js → chunk-P3E6L7KW.js} +6 -2
  35. package/dist/{chunk-BNN2RKD2.js → chunk-P4WO3BBW.js} +3 -3
  36. package/dist/{chunk-QOV2R2WT.js → chunk-QIXNAB5K.js} +42 -2
  37. package/dist/{chunk-NWCE4CIC.js → chunk-SMDCNPMK.js} +11 -28
  38. package/dist/{chunk-SEFSL2GF.js → chunk-TOIEB3LG.js} +2 -2
  39. package/dist/{chunk-4XHWPRAX.js → chunk-UGQKAVCD.js} +3 -3
  40. package/dist/{chunk-OVPLOMPY.js → chunk-UQEQ6AHX.js} +7 -4
  41. package/dist/{chunk-ZK6GXM3J.js → chunk-VIYSWZCO.js} +3 -3
  42. package/dist/chunk-VJJKSGIX.js +121 -0
  43. package/dist/{chunk-N5KEREIA.js → chunk-VT4JBH6L.js} +19 -7
  44. package/dist/{chunk-7LLPRPR5.js → chunk-WGAD3GNR.js} +2 -2
  45. package/dist/chunk-YDBXNPYU.js +69 -0
  46. package/dist/chunk-YY4QGUQ5.js +84 -0
  47. package/dist/{chunk-FGXRVW7G.js → chunk-YZ6L7GFO.js} +2 -2
  48. package/dist/{chunk-W4ALF422.js → chunk-ZEUCXQBN.js} +3 -3
  49. package/dist/cli.js +2697 -1054
  50. package/dist/{db-BNVVZSfP.d.ts → db-ShvwGDKf.d.ts} +12 -19
  51. package/dist/index.d.ts +15 -15
  52. package/dist/index.js +263 -234
  53. package/dist/postinstall.js +5 -76
  54. package/dist/queries/affected.d.ts +1 -1
  55. package/dist/queries/affected.js +3 -3
  56. package/dist/queries/bottlenecks.d.ts +1 -1
  57. package/dist/queries/bottlenecks.js +2 -2
  58. package/dist/queries/by-kind.d.ts +1 -1
  59. package/dist/queries/by-kind.js +2 -2
  60. package/dist/queries/call-graph.d.ts +1 -1
  61. package/dist/queries/call-graph.js +3 -3
  62. package/dist/queries/change-surface.d.ts +2 -2
  63. package/dist/queries/change-surface.js +3 -3
  64. package/dist/queries/code.d.ts +1 -1
  65. package/dist/queries/code.js +3 -3
  66. package/dist/queries/complexity-hotspots.d.ts +1 -1
  67. package/dist/queries/complexity-hotspots.js +3 -3
  68. package/dist/queries/complexity.d.ts +1 -1
  69. package/dist/queries/complexity.js +3 -3
  70. package/dist/queries/convergence.d.ts +1 -1
  71. package/dist/queries/convergence.js +3 -3
  72. package/dist/queries/coupling.d.ts +1 -1
  73. package/dist/queries/coupling.js +3 -1
  74. package/dist/queries/cycles.d.ts +1 -1
  75. package/dist/queries/cycles.js +3 -2
  76. package/dist/queries/dataflow.d.ts +1 -1
  77. package/dist/queries/dataflow.js +3 -3
  78. package/dist/queries/dead.d.ts +1 -1
  79. package/dist/queries/dead.js +4 -3
  80. package/dist/queries/deep-chains.d.ts +1 -1
  81. package/dist/queries/deep-chains.js +3 -2
  82. package/dist/queries/deps.d.ts +1 -1
  83. package/dist/queries/deps.js +3 -1
  84. package/dist/queries/diff-impact.d.ts +2 -2
  85. package/dist/queries/diff-impact.js +2 -3
  86. package/dist/queries/doc-coverage.d.ts +1 -1
  87. package/dist/queries/doc-coverage.js +2 -2
  88. package/dist/queries/drift.d.ts +1 -1
  89. package/dist/queries/drift.js +3 -2
  90. package/dist/queries/extract-candidates.d.ts +1 -1
  91. package/dist/queries/extract-candidates.js +3 -3
  92. package/dist/queries/fan.d.ts +1 -1
  93. package/dist/queries/fan.js +3 -2
  94. package/dist/queries/files.d.ts +1 -1
  95. package/dist/queries/health.d.ts +1 -1
  96. package/dist/queries/health.js +14 -14
  97. package/dist/queries/hierarchy.d.ts +1 -1
  98. package/dist/queries/hierarchy.js +3 -2
  99. package/dist/queries/hotspots.d.ts +1 -1
  100. package/dist/queries/hotspots.js +2 -2
  101. package/dist/queries/imports.d.ts +1 -1
  102. package/dist/queries/imports.js +3 -2
  103. package/dist/queries/index.d.ts +1 -2
  104. package/dist/queries/index.js +46 -51
  105. package/dist/queries/isolated.d.ts +1 -1
  106. package/dist/queries/isolated.js +4 -3
  107. package/dist/queries/members.d.ts +2 -2
  108. package/dist/queries/members.js +3 -2
  109. package/dist/queries/methods.d.ts +1 -1
  110. package/dist/queries/methods.js +2 -2
  111. package/dist/queries/outline.d.ts +1 -1
  112. package/dist/queries/outline.js +3 -2
  113. package/dist/queries/passthrough-candidates.d.ts +1 -1
  114. package/dist/queries/passthrough-candidates.js +3 -3
  115. package/dist/queries/redundant-reexports.d.ts +1 -1
  116. package/dist/queries/redundant-reexports.js +4 -2
  117. package/dist/queries/refs.d.ts +1 -1
  118. package/dist/queries/refs.js +3 -1
  119. package/dist/queries/similar-chains.d.ts +1 -1
  120. package/dist/queries/similar-chains.js +3 -2
  121. package/dist/queries/similar-files.d.ts +1 -1
  122. package/dist/queries/similar-files.js +3 -2
  123. package/dist/queries/similar-signatures.d.ts +1 -1
  124. package/dist/queries/similar-signatures.js +2 -2
  125. package/dist/queries/similar.d.ts +1 -1
  126. package/dist/queries/similar.js +3 -3
  127. package/dist/queries/slice.d.ts +2 -2
  128. package/dist/queries/slice.js +3 -3
  129. package/dist/queries/stale-abstractions.d.ts +1 -1
  130. package/dist/queries/stale-abstractions.js +3 -3
  131. package/dist/queries/stats.d.ts +1 -1
  132. package/dist/queries/surface.d.ts +1 -1
  133. package/dist/queries/surface.js +3 -2
  134. package/dist/queries/symbols.d.ts +1 -1
  135. package/dist/queries/symbols.js +3 -2
  136. package/dist/queries/system.d.ts +1 -1
  137. package/dist/queries/system.js +3 -2
  138. package/dist/queries/trace.d.ts +1 -1
  139. package/dist/queries/trace.js +3 -1
  140. package/dist/queries/wrapper-candidates.d.ts +1 -1
  141. package/dist/queries/wrapper-candidates.js +3 -3
  142. package/dist/reindex-worker.js +24 -12
  143. package/package.json +6 -1
  144. package/IMPROVEMENTS.md +0 -143
  145. package/PLAN.md +0 -320
  146. package/dist/chunk-2CKGIR6G.js.map +0 -1
  147. package/dist/chunk-3UOUTZQT.js +0 -45
  148. package/dist/chunk-3UOUTZQT.js.map +0 -1
  149. package/dist/chunk-4EXL2CUA.js.map +0 -1
  150. package/dist/chunk-4PDAL6IL.js.map +0 -1
  151. package/dist/chunk-4TYLS5XX.js.map +0 -1
  152. package/dist/chunk-4XHWPRAX.js.map +0 -1
  153. package/dist/chunk-5RMYT5WH.js.map +0 -1
  154. package/dist/chunk-63G7IQTD.js.map +0 -1
  155. package/dist/chunk-6SXADWLW.js.map +0 -1
  156. package/dist/chunk-74RFWB5T.js.map +0 -1
  157. package/dist/chunk-7LLPRPR5.js.map +0 -1
  158. package/dist/chunk-7PBOG4YE.js.map +0 -1
  159. package/dist/chunk-7RLE5EWE.js.map +0 -1
  160. package/dist/chunk-7UCKSQRS.js +0 -55
  161. package/dist/chunk-7UCKSQRS.js.map +0 -1
  162. package/dist/chunk-BNN2RKD2.js.map +0 -1
  163. package/dist/chunk-BOVXCR46.js.map +0 -1
  164. package/dist/chunk-D567NFIF.js +0 -65
  165. package/dist/chunk-D567NFIF.js.map +0 -1
  166. package/dist/chunk-DCKMSTJ4.js.map +0 -1
  167. package/dist/chunk-DEZKCZXD.js +0 -40
  168. package/dist/chunk-DEZKCZXD.js.map +0 -1
  169. package/dist/chunk-DGUPQSOR.js.map +0 -1
  170. package/dist/chunk-DVWGWHFW.js +0 -99
  171. package/dist/chunk-DVWGWHFW.js.map +0 -1
  172. package/dist/chunk-EQYLEQCW.js +0 -46
  173. package/dist/chunk-EQYLEQCW.js.map +0 -1
  174. package/dist/chunk-FGXRVW7G.js.map +0 -1
  175. package/dist/chunk-H2MDONBU.js.map +0 -1
  176. package/dist/chunk-HB7MRLLL.js +0 -76
  177. package/dist/chunk-HB7MRLLL.js.map +0 -1
  178. package/dist/chunk-HDSRORNV.js.map +0 -1
  179. package/dist/chunk-HMLMH7VZ.js.map +0 -1
  180. package/dist/chunk-HPFZLISB.js.map +0 -1
  181. package/dist/chunk-HZBC7PPD.js +0 -88
  182. package/dist/chunk-HZBC7PPD.js.map +0 -1
  183. package/dist/chunk-ITZ3DDOG.js.map +0 -1
  184. package/dist/chunk-JJP7KQND.js +0 -1
  185. package/dist/chunk-JJP7KQND.js.map +0 -1
  186. package/dist/chunk-KCBMVQL5.js.map +0 -1
  187. package/dist/chunk-KPPHZCZJ.js.map +0 -1
  188. package/dist/chunk-LAWMH22O.js.map +0 -1
  189. package/dist/chunk-MCUX5LA7.js +0 -103
  190. package/dist/chunk-MCUX5LA7.js.map +0 -1
  191. package/dist/chunk-MGNMHKX3.js.map +0 -1
  192. package/dist/chunk-N5KEREIA.js.map +0 -1
  193. package/dist/chunk-NHBZIL2J.js.map +0 -1
  194. package/dist/chunk-NUZ4OMU3.js.map +0 -1
  195. package/dist/chunk-NWCE4CIC.js.map +0 -1
  196. package/dist/chunk-OVPLOMPY.js.map +0 -1
  197. package/dist/chunk-QOV2R2WT.js.map +0 -1
  198. package/dist/chunk-SEFSL2GF.js.map +0 -1
  199. package/dist/chunk-UJQN5N3I.js.map +0 -1
  200. package/dist/chunk-W4ALF422.js.map +0 -1
  201. package/dist/chunk-Z4GHE2HD.js.map +0 -1
  202. package/dist/chunk-Z6YZJ36C.js.map +0 -1
  203. package/dist/chunk-ZK6GXM3J.js.map +0 -1
  204. package/dist/chunk-ZOGY2V3N.js +0 -158
  205. package/dist/chunk-ZOGY2V3N.js.map +0 -1
  206. package/dist/chunk-ZQIIPFD7.js.map +0 -1
  207. package/dist/cli.js.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/postinstall.js.map +0 -1
  210. package/dist/queries/affected.js.map +0 -1
  211. package/dist/queries/bottlenecks.js.map +0 -1
  212. package/dist/queries/by-kind.js.map +0 -1
  213. package/dist/queries/call-graph.js.map +0 -1
  214. package/dist/queries/change-surface.js.map +0 -1
  215. package/dist/queries/clean-signature.js.map +0 -1
  216. package/dist/queries/code.js.map +0 -1
  217. package/dist/queries/complexity-hotspots.js.map +0 -1
  218. package/dist/queries/complexity.js.map +0 -1
  219. package/dist/queries/convergence.js.map +0 -1
  220. package/dist/queries/coupling.js.map +0 -1
  221. package/dist/queries/cycles.js.map +0 -1
  222. package/dist/queries/dataflow.js.map +0 -1
  223. package/dist/queries/dead.js.map +0 -1
  224. package/dist/queries/deep-chains.js.map +0 -1
  225. package/dist/queries/deps.js.map +0 -1
  226. package/dist/queries/diff-impact.js.map +0 -1
  227. package/dist/queries/doc-coverage.js.map +0 -1
  228. package/dist/queries/drift.js.map +0 -1
  229. package/dist/queries/extract-candidates.js.map +0 -1
  230. package/dist/queries/fan.js.map +0 -1
  231. package/dist/queries/files.js.map +0 -1
  232. package/dist/queries/health.js.map +0 -1
  233. package/dist/queries/hierarchy.js.map +0 -1
  234. package/dist/queries/hotspots.js.map +0 -1
  235. package/dist/queries/imports.js.map +0 -1
  236. package/dist/queries/index.js.map +0 -1
  237. package/dist/queries/isolated.js.map +0 -1
  238. package/dist/queries/members.js.map +0 -1
  239. package/dist/queries/methods.js.map +0 -1
  240. package/dist/queries/outline.js.map +0 -1
  241. package/dist/queries/passthrough-candidates.js.map +0 -1
  242. package/dist/queries/redundant-reexports.js.map +0 -1
  243. package/dist/queries/refs.js.map +0 -1
  244. package/dist/queries/similar-chains.js.map +0 -1
  245. package/dist/queries/similar-files.js.map +0 -1
  246. package/dist/queries/similar-signatures.js.map +0 -1
  247. package/dist/queries/similar.js.map +0 -1
  248. package/dist/queries/slice.js.map +0 -1
  249. package/dist/queries/stale-abstractions.js.map +0 -1
  250. package/dist/queries/stats.js.map +0 -1
  251. package/dist/queries/surface.js.map +0 -1
  252. package/dist/queries/symbols.js.map +0 -1
  253. package/dist/queries/system.js.map +0 -1
  254. package/dist/queries/test-coverage.d.ts +0 -22
  255. package/dist/queries/test-coverage.js +0 -11
  256. package/dist/queries/test-coverage.js.map +0 -1
  257. package/dist/queries/trace.js.map +0 -1
  258. package/dist/queries/wrapper-candidates.js.map +0 -1
  259. package/dist/reindex-worker.js.map +0 -1
  260. package/docs/AGENT_GUIDE.md +0 -359
  261. package/reports/debloat/2026-04-10-scip-query-self-audit.md +0 -161
  262. package/src/cli.ts +0 -1480
  263. package/src/config.ts +0 -117
  264. package/src/db.ts +0 -127
  265. package/src/gitignore-filter.ts +0 -143
  266. package/src/index.ts +0 -11
  267. package/src/postinstall.ts +0 -8
  268. package/src/queries/affected.ts +0 -86
  269. package/src/queries/bottlenecks.ts +0 -67
  270. package/src/queries/by-kind.ts +0 -204
  271. package/src/queries/call-graph.ts +0 -66
  272. package/src/queries/change-surface.ts +0 -110
  273. package/src/queries/clean-signature.ts +0 -22
  274. package/src/queries/code.ts +0 -101
  275. package/src/queries/complexity-hotspots.ts +0 -119
  276. package/src/queries/complexity.ts +0 -152
  277. package/src/queries/convergence.ts +0 -82
  278. package/src/queries/coupling.ts +0 -99
  279. package/src/queries/cycles.ts +0 -78
  280. package/src/queries/dataflow.ts +0 -128
  281. package/src/queries/dead.ts +0 -122
  282. package/src/queries/deep-chains.ts +0 -59
  283. package/src/queries/deps.ts +0 -46
  284. package/src/queries/diff-impact.ts +0 -204
  285. package/src/queries/doc-coverage.ts +0 -86
  286. package/src/queries/drift.ts +0 -224
  287. package/src/queries/extract-candidates.ts +0 -167
  288. package/src/queries/fan.ts +0 -148
  289. package/src/queries/files.ts +0 -16
  290. package/src/queries/health.ts +0 -324
  291. package/src/queries/hierarchy.ts +0 -49
  292. package/src/queries/hotspots.ts +0 -53
  293. package/src/queries/imports.ts +0 -95
  294. package/src/queries/index.ts +0 -45
  295. package/src/queries/isolated.ts +0 -67
  296. package/src/queries/members.ts +0 -54
  297. package/src/queries/methods.ts +0 -27
  298. package/src/queries/outline.ts +0 -52
  299. package/src/queries/passthrough-candidates.ts +0 -94
  300. package/src/queries/redundant-reexports.ts +0 -170
  301. package/src/queries/refs.ts +0 -27
  302. package/src/queries/similar-chains.ts +0 -314
  303. package/src/queries/similar-files.ts +0 -140
  304. package/src/queries/similar-signatures.ts +0 -151
  305. package/src/queries/similar.ts +0 -305
  306. package/src/queries/slice.ts +0 -154
  307. package/src/queries/stale-abstractions.ts +0 -82
  308. package/src/queries/stats.ts +0 -22
  309. package/src/queries/surface.ts +0 -34
  310. package/src/queries/symbols.ts +0 -39
  311. package/src/queries/system.ts +0 -86
  312. package/src/queries/test-coverage.ts +0 -106
  313. package/src/queries/trace.ts +0 -55
  314. package/src/queries/wrapper-candidates.ts +0 -112
  315. package/src/query-support.ts +0 -226
  316. package/src/reindex/detect.ts +0 -58
  317. package/src/reindex/index.ts +0 -153
  318. package/src/reindex/indexers.ts +0 -220
  319. package/src/reindex/install.ts +0 -125
  320. package/src/reindex-worker.ts +0 -35
  321. package/src/setup.ts +0 -202
  322. package/src/symbol-parser.ts +0 -278
  323. package/src/types.ts +0 -654
  324. package/src/watch.ts +0 -274
  325. package/tests/gitignore-filter.test.ts +0 -48
  326. package/tests/queries.test.ts +0 -300
  327. package/tests/symbol-parser.test.ts +0 -157
  328. package/tsconfig.json +0 -20
  329. package/tsup.config.ts +0 -40
  330. package/vitest.config.ts +0 -7
package/src/types.ts DELETED
@@ -1,654 +0,0 @@
1
- // ── SCIP Symbol Grammar Types ──────────────────────────────
2
-
3
- /** Parsed components of a SCIP symbol string */
4
- export interface ScipSymbol {
5
- /** The indexer scheme (e.g. "scip-typescript", "scip-java", "rust-analyzer") */
6
- scheme: string;
7
- /** Package manager (e.g. "npm", "maven", "cargo") */
8
- manager: string;
9
- /** Package name (e.g. "@vega/api", "com.example/mylib") */
10
- packageName: string;
11
- /** Package version */
12
- version: string;
13
- /** Descriptor chain — the path to the symbol within the file */
14
- descriptors: ScipDescriptor[];
15
- /** The raw, unparsed symbol string */
16
- raw: string;
17
- }
18
-
19
- export interface ScipDescriptor {
20
- name: string;
21
- suffix: DescriptorSuffix;
22
- }
23
-
24
- export type DescriptorSuffix =
25
- | 'namespace' // /
26
- | 'type' // #
27
- | 'term' // .
28
- | 'method' // ().
29
- | 'type-param' // [
30
- | 'parameter' // ()
31
- | 'meta' // :
32
- | 'macro'; // !
33
-
34
- /** A local symbol (file-scoped, no cross-file identity) */
35
- export interface ScipLocalSymbol {
36
- kind: 'local';
37
- id: string;
38
- raw: string;
39
- }
40
-
41
- // ── Query Result Types ─────────────────────────────────────
42
-
43
- export interface StatsResult {
44
- documents: number;
45
- symbols: number;
46
- definitions: number;
47
- references: number;
48
- indexSizeBytes: number;
49
- lastBuilt: Date | null;
50
- }
51
-
52
- export interface FileResult {
53
- relativePath: string;
54
- }
55
-
56
- export interface SymbolResult {
57
- startLine: number;
58
- endLine: number;
59
- symbol: string;
60
- shortName: string;
61
- signature: string | null;
62
- }
63
-
64
- export interface MethodResult {
65
- startLine: number;
66
- endLine: number;
67
- name: string;
68
- }
69
-
70
- export interface RefResult {
71
- relativePath: string;
72
- line: number;
73
- }
74
-
75
- export interface DepResult {
76
- relativePath: string;
77
- }
78
-
79
- export interface TraceResult {
80
- definitions: Array<{
81
- relativePath: string;
82
- startLine: number;
83
- endLine: number;
84
- signature: string | null;
85
- }>;
86
- referencedBy: string[];
87
- }
88
-
89
- export interface SystemResult {
90
- files: string[];
91
- symbols: SymbolResult[];
92
- dependsOn: string[];
93
- dependedOnBy: string[];
94
- }
95
-
96
- export interface SurfaceResult {
97
- consumer: string;
98
- symbol: string;
99
- shortName: string;
100
- }
101
-
102
- export interface DeadSymbolResult {
103
- relativePath: string;
104
- startLine: number;
105
- endLine: number;
106
- loc: number;
107
- symbol: string;
108
- shortName: string;
109
- sameFileRefs: number;
110
- kind: 'dead-code' | 'file-internal';
111
- }
112
-
113
- export interface DeadSummary {
114
- symbols: DeadSymbolResult[];
115
- totalCount: number;
116
- /** Symbols with zero references anywhere — safe to delete */
117
- deadCodeCount: number;
118
- /** Symbols referenced only within their own file — no cross-file consumers.
119
- * May be private helpers (fine) or forgotten exports (needs review). */
120
- fileInternalCount: number;
121
- totalLoc: number;
122
- }
123
-
124
- // ── Hotspot / Fan / Coupling Types ─────────────────────────
125
-
126
- export interface HotspotResult {
127
- symbol: string;
128
- shortName: string;
129
- refCount: number;
130
- fileCount: number;
131
- definedIn: string;
132
- }
133
-
134
- export interface ImportResult {
135
- symbol: string;
136
- shortName: string;
137
- fromFile: string;
138
- }
139
-
140
- export interface UnusedImportResult {
141
- symbol: string;
142
- shortName: string;
143
- importedIn: string;
144
- }
145
-
146
- export interface OutlineNode {
147
- symbol: string;
148
- shortName: string;
149
- startLine: number;
150
- endLine: number;
151
- children: OutlineNode[];
152
- }
153
-
154
- export interface MemberResult {
155
- symbol: string;
156
- shortName: string;
157
- startLine: number;
158
- endLine: number;
159
- kind: string;
160
- }
161
-
162
- export interface FanResult {
163
- name: string;
164
- count: number;
165
- }
166
-
167
- export interface CouplingResult {
168
- file1: string;
169
- file2: string;
170
- sharedSymbols: number;
171
- }
172
-
173
- export interface CycleResult {
174
- /** Files forming a cycle, in order */
175
- path: string[];
176
- }
177
-
178
- // ── Bottleneck / Isolated / Coverage / Chain Types ─────────
179
-
180
- export interface BottleneckResult {
181
- symbol: string;
182
- shortName: string;
183
- fanIn: number;
184
- fanOut: number;
185
- /** fanIn * fanOut — higher = more central coupling hub */
186
- score: number;
187
- definedIn: string;
188
- }
189
-
190
- export interface IsolatedResult {
191
- symbol: string;
192
- shortName: string;
193
- relativePath: string;
194
- startLine: number;
195
- endLine: number;
196
- loc: number;
197
- }
198
-
199
- export interface ByKindResult {
200
- symbol: string;
201
- shortName: string;
202
- kind: number;
203
- kindName: string;
204
- relativePath: string;
205
- startLine: number;
206
- endLine: number;
207
- }
208
-
209
- export interface TestCoverageResult {
210
- symbol: string;
211
- shortName: string;
212
- definedIn: string;
213
- testFiles: string[];
214
- covered: boolean;
215
- }
216
-
217
- export interface DocCoverageResult {
218
- totalSymbols: number;
219
- documented: number;
220
- undocumented: number;
221
- coveragePercent: number;
222
- undocumentedSymbols: Array<{
223
- symbol: string;
224
- shortName: string;
225
- relativePath: string;
226
- startLine: number;
227
- }>;
228
- }
229
-
230
- export interface DeepChainResult {
231
- /** Files in the chain, from leaf to root */
232
- chain: string[];
233
- depth: number;
234
- }
235
-
236
- export interface HierarchyNode {
237
- symbol: string;
238
- shortName: string;
239
- depth: number;
240
- }
241
-
242
- export interface CallGraphResult {
243
- symbol: string;
244
- shortName: string;
245
- /** Symbols that call this one (incoming) */
246
- callers: Array<{ symbol: string; shortName: string; file: string }>;
247
- /** Symbols called by this one (outgoing) */
248
- callees: Array<{ symbol: string; shortName: string; file: string }>;
249
- }
250
-
251
- // ── Drift / Wrapper / Passthrough / Stale / Complexity Types
252
-
253
- export interface DriftResult {
254
- file: string;
255
- kind: 'unused-import' | 'layer-violation' | 'pattern-deviation';
256
- description: string;
257
- /** The dependency involved */
258
- dep: string;
259
- /** For layer violations: the expected layer boundary */
260
- detail?: string;
261
- }
262
-
263
- export interface DriftSummary {
264
- results: DriftResult[];
265
- unusedImports: number;
266
- layerViolations: number;
267
- patternDeviations: number;
268
- }
269
-
270
- export interface WrapperCandidate {
271
- symbol: string;
272
- shortName: string;
273
- file: string;
274
- startLine: number;
275
- endLine: number;
276
- loc: number;
277
- singleCaller: string;
278
- singleCallerShort: string;
279
- callerFanIn: number;
280
- }
281
-
282
- export interface PassthroughCandidate {
283
- symbol: string;
284
- shortName: string;
285
- file: string;
286
- startLine: number;
287
- endLine: number;
288
- loc: number;
289
- forwardsTo: string;
290
- forwardsToShort: string;
291
- forwardsToFile: string;
292
- }
293
-
294
- export interface StaleAbstraction {
295
- symbol: string;
296
- shortName: string;
297
- file: string;
298
- startLine: number;
299
- endLine: number;
300
- loc: number;
301
- consumers: number;
302
- }
303
-
304
- export interface ComplexityHotspot {
305
- symbol: string;
306
- shortName: string;
307
- file: string;
308
- startLine: number;
309
- endLine: number;
310
- loc: number;
311
- fanIn: number;
312
- fanOut: number;
313
- calleeCount: number;
314
- score: number;
315
- }
316
-
317
- // ── Similarity / Extraction Types ──────────────────────────
318
-
319
- export interface SimilarSymbolResult {
320
- symbolA: string;
321
- shortNameA: string;
322
- fileA: string;
323
- symbolB: string;
324
- shortNameB: string;
325
- fileB: string;
326
- /** Jaccard similarity of callee sets (0-1) */
327
- similarity: number;
328
- /** Callees shared by both symbols */
329
- sharedCallees: string[];
330
- /** Callees unique to A */
331
- uniqueToA: string[];
332
- /** Callees unique to B */
333
- uniqueToB: string[];
334
- }
335
-
336
- export interface SimilarFileResult {
337
- fileA: string;
338
- fileB: string;
339
- /** Jaccard similarity of dependency sets (0-1) */
340
- similarity: number;
341
- sharedDeps: string[];
342
- uniqueToA: string[];
343
- uniqueToB: string[];
344
- }
345
-
346
- export interface SimilarChainResult {
347
- chainA: string[];
348
- chainB: string[];
349
- /** Fraction of nodes shared (0-1) */
350
- similarity: number;
351
- /** Edit distance between the two chains */
352
- editDistance: number;
353
- /** Indices where the chains diverge — the consolidation targets */
354
- divergencePoints: Array<{
355
- index: number;
356
- nodeA: string;
357
- nodeB: string;
358
- }>;
359
- /** Shared prefix */
360
- commonPrefix: string[];
361
- /** Shared suffix */
362
- commonSuffix: string[];
363
- }
364
-
365
- export interface ExtractCandidate {
366
- symbol: string;
367
- shortName: string;
368
- relativePath: string;
369
- startLine: number;
370
- endLine: number;
371
- loc: number;
372
- /** Total callees */
373
- totalCallees: number;
374
- /** Distinct clusters of callees (natural extraction seams) */
375
- clusters: Array<{
376
- callees: string[];
377
- /** How isolated this cluster is from the rest (0-1, higher = more extractable) */
378
- isolation: number;
379
- }>;
380
- }
381
-
382
- // ── Health / Convergence Types ──────────────────────────────
383
-
384
- export interface HealthAction {
385
- category: string;
386
- description: string;
387
- effort: 'low' | 'medium' | 'high';
388
- impact: 'low' | 'medium' | 'high';
389
- count: number;
390
- locRecoverable: number;
391
- }
392
-
393
- export interface HealthReport {
394
- score: number;
395
- overview: { documents: number; symbols: number; indexSizeBytes: number };
396
- findings: {
397
- deadSymbols: number;
398
- deadLoc: number;
399
- isolatedSymbols: number;
400
- isolatedLoc: number;
401
- cycles: number;
402
- similarPairs: number;
403
- extractionCandidates: number;
404
- wrappers: number;
405
- passthroughs: number;
406
- staleTypes: number;
407
- driftedFiles: number;
408
- complexityHotspotCount: number;
409
- testCoveragePercent: number;
410
- };
411
- actions: HealthAction[];
412
- topComplexity: Array<{ symbol: string; score: number }>;
413
- }
414
-
415
- export interface ConvergenceResult {
416
- symbolA: { symbol: string; shortName: string; file: string; loc: number };
417
- symbolB: { symbol: string; shortName: string; file: string; loc: number };
418
- similarity: number;
419
- sharedCallees: string[];
420
- uniqueToA: string[];
421
- uniqueToB: string[];
422
- consolidationStrategy: string;
423
- }
424
-
425
- // ── Code / Complexity / Dataflow / Slice Types ─────────────
426
-
427
- export interface CodeResult {
428
- symbol: string;
429
- shortName: string;
430
- relativePath: string;
431
- startLine: number;
432
- endLine: number;
433
- language: string | null;
434
- source: string;
435
- }
436
-
437
- export interface ComplexityResult {
438
- symbol: string;
439
- shortName: string;
440
- relativePath: string;
441
- startLine: number;
442
- endLine: number;
443
- loc: number;
444
- /** Branch count from source-level regex (if, else, for, while, switch, catch, ternary, &&, ||) */
445
- branches: number;
446
- /** Cyclomatic complexity estimate: branches + 1 */
447
- cyclomaticEstimate: number;
448
- /** Number of distinct callees within the definition */
449
- calleeCount: number;
450
- fanIn: number;
451
- fanOut: number;
452
- }
453
-
454
- export interface DataflowResult {
455
- symbol: string;
456
- shortName: string;
457
- relativePath: string;
458
- /** Where the symbol is defined (role=1) */
459
- definitionSites: Array<{ file: string; line: number }>;
460
- /** Where the symbol is referenced (role!=1) */
461
- usageSites: Array<{ file: string; line: number; enclosingSymbol: string; enclosingShort: string }>;
462
- /** Symbols that appear in the same function that defines this symbol (producers/inputs) */
463
- producers: Array<{ symbol: string; shortName: string; file: string }>;
464
- /** Symbols defined by functions that reference this symbol (consumers/outputs) */
465
- consumers: Array<{ symbol: string; shortName: string; file: string }>;
466
- }
467
-
468
- export interface SliceResult {
469
- symbol: string;
470
- shortName: string;
471
- direction: 'backward' | 'forward';
472
- /** Backward: symbols referenced in the same function as the target's definition (inputs) */
473
- /** Forward: symbols defined by functions that reference the target (outputs) */
474
- connectedSymbols: Array<{ symbol: string; shortName: string; file: string; relationship: string }>;
475
- }
476
-
477
- // ── Affected / Change Surface / Diff Impact Types ────────
478
-
479
- export interface AffectedResult {
480
- symbol: string;
481
- shortName: string;
482
- file: string;
483
- depth: number;
484
- }
485
-
486
- export interface ChangeSurfaceEntry {
487
- symbol: string;
488
- shortName: string;
489
- startLine: number;
490
- endLine: number;
491
- externalConsumers: number;
492
- testFiles: string[];
493
- riskLevel: 'low' | 'medium' | 'high';
494
- }
495
-
496
- export interface ChangeSurfaceResult {
497
- file: string;
498
- symbols: ChangeSurfaceEntry[];
499
- totalExternalConsumers: number;
500
- testCoveragePercent: number;
501
- }
502
-
503
- export interface DiffImpactResult {
504
- changedFiles: string[];
505
- changedSymbols: Array<{ symbol: string; shortName: string; file: string; fanIn: number }>;
506
- affectedConsumers: Array<{ file: string; consumedSymbols: number }>;
507
- uncoveredSymbols: Array<{ symbol: string; shortName: string; file: string }>;
508
- summary: {
509
- totalChangedFiles: number;
510
- totalChangedSymbols: number;
511
- totalAffectedFiles: number;
512
- testCoveragePercent: number;
513
- };
514
- }
515
-
516
- // ── Dead Code Query Options ────────────────────────────────
517
-
518
- export interface DeadOptions {
519
- scope?: string;
520
- minLoc?: number;
521
- includeTests?: boolean;
522
- skipBarrels?: boolean;
523
- includeMembers?: boolean;
524
- }
525
-
526
- // ── Auto-Install Types ────────────────────────────────────
527
-
528
- export interface InstallMethod {
529
- /** Human-readable label (e.g., "npm", "pip", "go install") */
530
- label: string;
531
- /** Binary that must exist for this install method to work (e.g., "npm", "pip3", "go") */
532
- prerequisite: string;
533
- /** Command to execute */
534
- binary: string;
535
- /** Arguments for the command */
536
- args: string[];
537
- }
538
-
539
- // ── Reindex Types ──────────────────────────────────────────
540
-
541
- export type SupportedLanguage =
542
- | 'typescript'
543
- | 'javascript'
544
- | 'java'
545
- | 'scala'
546
- | 'kotlin'
547
- | 'rust'
548
- | 'python'
549
- | 'ruby'
550
- | 'go'
551
- | 'cpp'
552
- | 'c'
553
- | 'csharp'
554
- | 'dart'
555
- | 'php';
556
-
557
- export interface IndexerConfig {
558
- language: SupportedLanguage;
559
- /** The npm/cargo/pip package or binary that produces the SCIP index */
560
- indexerBinary: string;
561
- /** Command to check if the indexer is installed */
562
- checkCommand: string;
563
- /** Returns the binary + args array for execFileSync (no shell injection) */
564
- indexArgs: (opts: {
565
- projectRoot: string;
566
- outputPath: string;
567
- pnpmWorkspaces?: boolean;
568
- }) => { binary: string; args: string[] };
569
- /** Marker files that indicate this language is present */
570
- markerFiles: string[];
571
- /** Installation methods to try in order of preference */
572
- installMethods?: InstallMethod[];
573
- /** URL for manual installation if auto-install fails */
574
- installUrl?: string;
575
- }
576
-
577
- // ── Database Config ────────────────────────────────────────
578
-
579
- export interface ScipQueryConfig {
580
- /** Path to the SQLite database (index.db) */
581
- dbPath: string;
582
- /** Path to the SCIP protobuf index (index.scip) */
583
- indexPath: string;
584
- /** Project root directory */
585
- projectRoot: string;
586
- /** Paths to .gitignore files to load for filtering */
587
- gitignorePaths?: string[];
588
- }
589
-
590
- // ── Project Config (.scipquery.json) ───────────────────────
591
-
592
- export interface ProjectConfig {
593
- /** Override which languages to index (default: auto-detect) */
594
- languages?: SupportedLanguage[];
595
- /** Watch mode settings */
596
- watch?: WatchConfig;
597
- /** Per-language indexer overrides */
598
- indexer?: Partial<Record<SupportedLanguage, IndexerOverrides>>;
599
- /** Override the database storage path (default: ~/.cache/scip-query/<hash>/) */
600
- dbPath?: string;
601
- }
602
-
603
- export interface WatchConfig {
604
- /** Enable file watching (default: false, must opt in) */
605
- enabled?: boolean;
606
- /** Ms to wait after the last file change before triggering reindex (default: 30000) */
607
- debounceMs?: number;
608
- /** Minimum ms between reindex completions (default: 60000) */
609
- cooldownMs?: number;
610
- /** Extra glob patterns to ignore beyond .gitignore */
611
- ignore?: string[];
612
- }
613
-
614
- export interface IndexerOverrides {
615
- /** Enable pnpm workspace support (TypeScript) */
616
- pnpmWorkspaces?: boolean;
617
- }
618
-
619
- // ── Redundant Re-export Types ─────────────────────────────
620
-
621
- export interface RedundantReexport {
622
- barrelFile: string;
623
- symbol: string;
624
- shortName: string;
625
- originalFile: string;
626
- /** How many consumers import through the barrel */
627
- barrelConsumers: number;
628
- /** How many consumers import directly from the source */
629
- directConsumers: number;
630
- }
631
-
632
- // ── Similar Signature Types ───────────────────────────────
633
-
634
- export interface SimilarSignatureGroup {
635
- /** The normalized signature shared by all functions in the group */
636
- signature: string;
637
- /** Functions that share this signature */
638
- functions: Array<{
639
- symbol: string;
640
- shortName: string;
641
- file: string;
642
- startLine: number;
643
- endLine: number;
644
- loc: number;
645
- }>;
646
- }
647
-
648
- // ── Watch State ────────────────────────────────────────────
649
-
650
- export type WatcherStatus =
651
- | { state: 'idle' }
652
- | { state: 'waiting'; changedFiles: number; reindexAt: number }
653
- | { state: 'indexing'; startedAt: number }
654
- | { state: 'cooldown'; until: number; dirty: boolean };