scip-query 0.1.0 → 0.2.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 (325) hide show
  1. package/README.md +16 -43
  2. package/dist/chunk-2UELLEBI.js +1 -0
  3. package/dist/chunk-34JPTNRN.js +601 -0
  4. package/dist/{chunk-NDSQYIWT.js → chunk-3566TKJ5.js} +3 -3
  5. package/dist/{chunk-LB7OS35Q.js → chunk-4ACRRQC4.js} +8 -4
  6. package/dist/{chunk-3E2X7RIE.js → chunk-4BQFSNFI.js} +10 -6
  7. package/dist/{chunk-BP2ATLK2.js → chunk-6QSHLFSL.js} +4 -4
  8. package/dist/{chunk-5FGUEU7N.js → chunk-6WVR5K46.js} +18 -10
  9. package/dist/{chunk-XFXDXEUN.js → chunk-74RFWB5T.js} +2 -2
  10. package/dist/{chunk-MBVNHJVN.js → chunk-75RQSBTK.js} +2 -2
  11. package/dist/{chunk-YZAA4LYG.js → chunk-7HK5ZLOE.js} +30 -48
  12. package/dist/{chunk-T6ARFSBZ.js → chunk-7JFZSOJ7.js} +7 -7
  13. package/dist/{chunk-6SXADWLW.js → chunk-AKMBBKWV.js} +2 -2
  14. package/dist/{chunk-ZJRYBOEE.js → chunk-AMNISGYR.js} +5 -5
  15. package/dist/{chunk-CM454WL3.js → chunk-BFLULBEU.js} +3 -3
  16. package/dist/{chunk-Z73NYSBZ.js → chunk-CU62ZDHI.js} +2 -2
  17. package/dist/{chunk-TBP6BICL.js → chunk-DY4AFG2W.js} +13 -11
  18. package/dist/{chunk-2QZ23IBN.js → chunk-F7XU27LU.js} +4 -4
  19. package/dist/{chunk-KCBMVQL5.js → chunk-GPJVPT3U.js} +2 -2
  20. package/dist/{chunk-NUZ4OMU3.js → chunk-GU2H5QRN.js} +2 -2
  21. package/dist/{chunk-TSPZOMHC.js → chunk-H6WCPKCX.js} +6 -3
  22. package/dist/{chunk-KVSW5KYP.js → chunk-HDSRORNV.js} +4 -4
  23. package/dist/{chunk-LUSIFBXO.js → chunk-HMYJJ3HY.js} +9 -6
  24. package/dist/chunk-IJKLB2JW.js +69 -0
  25. package/dist/{chunk-6NBLIDF4.js → chunk-ITZ3DDOG.js} +2 -2
  26. package/dist/{chunk-GTILYBH6.js → chunk-IXPHLF6K.js} +6 -6
  27. package/dist/{chunk-BFSCMC22.js → chunk-KBOQX573.js} +3 -3
  28. package/dist/{chunk-FUHJCHS4.js → chunk-LLMPAG56.js} +95 -32
  29. package/dist/{chunk-FFSWWE5O.js → chunk-LTJC5ZQL.js} +3 -3
  30. package/dist/{chunk-LAWMH22O.js → chunk-M3NPW3FC.js} +2 -2
  31. package/dist/{chunk-VRUJH4BO.js → chunk-M4QGEKKD.js} +6 -28
  32. package/dist/{chunk-7OZPA5OO.js → chunk-MVH45PYK.js} +21 -41
  33. package/dist/chunk-N4C3H7LH.js +37 -0
  34. package/dist/chunk-NG5F43OU.js +200 -0
  35. package/dist/{chunk-6VJ6Q7IE.js → chunk-NVIIM34O.js} +4 -4
  36. package/dist/{chunk-GJFURBEW.js → chunk-ORINICIZ.js} +4 -4
  37. package/dist/{chunk-TDNNOR6D.js → chunk-PMJKOXOT.js} +7 -7
  38. package/dist/{chunk-QOV2R2WT.js → chunk-QIXNAB5K.js} +42 -2
  39. package/dist/{chunk-JKP5GH6T.js → chunk-R2I3M5B4.js} +2 -2
  40. package/dist/{chunk-36OMT7ZJ.js → chunk-R56FJU3E.js} +35 -14
  41. package/dist/{chunk-VZ7AMAFL.js → chunk-RFMT7UAZ.js} +3 -3
  42. package/dist/{chunk-SEFSL2GF.js → chunk-TOIEB3LG.js} +2 -2
  43. package/dist/chunk-VO4QI3LS.js +84 -0
  44. package/dist/{chunk-EMDQWNYR.js → chunk-WVK7AASK.js} +8 -8
  45. package/dist/{chunk-5WTJAXY2.js → chunk-Y3M323OX.js} +2 -2
  46. package/dist/{chunk-DCKMSTJ4.js → chunk-Y4JFVQ7C.js} +2 -2
  47. package/dist/{chunk-UNTPVD36.js → chunk-YAFWL3RA.js} +4 -4
  48. package/dist/{chunk-FGXRVW7G.js → chunk-YZ6L7GFO.js} +2 -2
  49. package/dist/cli.js +1401 -717
  50. package/dist/{db-BxaevAyc.d.ts → db-BHYam4BK.d.ts} +7 -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 +2 -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 +1 -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/diff-impact.d.ts +2 -2
  84. package/dist/queries/diff-impact.js +2 -3
  85. package/dist/queries/doc-coverage.d.ts +1 -1
  86. package/dist/queries/doc-coverage.js +2 -2
  87. package/dist/queries/drift.d.ts +1 -1
  88. package/dist/queries/drift.js +3 -2
  89. package/dist/queries/extract-candidates.d.ts +1 -1
  90. package/dist/queries/extract-candidates.js +3 -3
  91. package/dist/queries/fan.d.ts +1 -1
  92. package/dist/queries/fan.js +2 -2
  93. package/dist/queries/files.d.ts +1 -1
  94. package/dist/queries/health.d.ts +1 -1
  95. package/dist/queries/health.js +15 -15
  96. package/dist/queries/hierarchy.d.ts +1 -1
  97. package/dist/queries/hierarchy.js +3 -2
  98. package/dist/queries/hotspots.d.ts +1 -1
  99. package/dist/queries/hotspots.js +2 -2
  100. package/dist/queries/imports.d.ts +1 -1
  101. package/dist/queries/imports.js +3 -2
  102. package/dist/queries/index.d.ts +1 -2
  103. package/dist/queries/index.js +46 -51
  104. package/dist/queries/isolated.d.ts +1 -1
  105. package/dist/queries/isolated.js +4 -3
  106. package/dist/queries/members.d.ts +2 -2
  107. package/dist/queries/members.js +3 -2
  108. package/dist/queries/methods.d.ts +1 -1
  109. package/dist/queries/methods.js +2 -2
  110. package/dist/queries/outline.d.ts +1 -1
  111. package/dist/queries/outline.js +2 -2
  112. package/dist/queries/passthrough-candidates.d.ts +1 -1
  113. package/dist/queries/passthrough-candidates.js +3 -3
  114. package/dist/queries/redundant-reexports.d.ts +1 -1
  115. package/dist/queries/redundant-reexports.js +4 -2
  116. package/dist/queries/refs.d.ts +1 -1
  117. package/dist/queries/refs.js +1 -1
  118. package/dist/queries/similar-chains.d.ts +1 -1
  119. package/dist/queries/similar-chains.js +3 -2
  120. package/dist/queries/similar-files.d.ts +1 -1
  121. package/dist/queries/similar-files.js +3 -2
  122. package/dist/queries/similar-signatures.d.ts +1 -1
  123. package/dist/queries/similar-signatures.js +2 -2
  124. package/dist/queries/similar.d.ts +1 -1
  125. package/dist/queries/similar.js +3 -3
  126. package/dist/queries/slice.d.ts +1 -1
  127. package/dist/queries/slice.js +3 -3
  128. package/dist/queries/stale-abstractions.d.ts +1 -1
  129. package/dist/queries/stale-abstractions.js +3 -3
  130. package/dist/queries/stats.d.ts +1 -1
  131. package/dist/queries/stats.js +1 -1
  132. package/dist/queries/surface.d.ts +1 -1
  133. package/dist/queries/surface.js +2 -2
  134. package/dist/queries/symbols.d.ts +1 -1
  135. package/dist/queries/symbols.js +2 -2
  136. package/dist/queries/system.d.ts +1 -1
  137. package/dist/queries/system.js +2 -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-2QZ23IBN.js.map +0 -1
  147. package/dist/chunk-36OMT7ZJ.js.map +0 -1
  148. package/dist/chunk-3E2X7RIE.js.map +0 -1
  149. package/dist/chunk-3UOUTZQT.js +0 -45
  150. package/dist/chunk-3UOUTZQT.js.map +0 -1
  151. package/dist/chunk-3ZZJVBIO.js +0 -88
  152. package/dist/chunk-3ZZJVBIO.js.map +0 -1
  153. package/dist/chunk-4TYLS5XX.js.map +0 -1
  154. package/dist/chunk-5FGUEU7N.js.map +0 -1
  155. package/dist/chunk-5WTJAXY2.js.map +0 -1
  156. package/dist/chunk-6NBLIDF4.js.map +0 -1
  157. package/dist/chunk-6SXADWLW.js.map +0 -1
  158. package/dist/chunk-6VJ6Q7IE.js.map +0 -1
  159. package/dist/chunk-7OZPA5OO.js.map +0 -1
  160. package/dist/chunk-BEPIEVLR.js +0 -76
  161. package/dist/chunk-BEPIEVLR.js.map +0 -1
  162. package/dist/chunk-BFSCMC22.js.map +0 -1
  163. package/dist/chunk-BP2ATLK2.js.map +0 -1
  164. package/dist/chunk-CM454WL3.js.map +0 -1
  165. package/dist/chunk-DCKMSTJ4.js.map +0 -1
  166. package/dist/chunk-DEZKCZXD.js +0 -40
  167. package/dist/chunk-DEZKCZXD.js.map +0 -1
  168. package/dist/chunk-DVWGWHFW.js +0 -99
  169. package/dist/chunk-DVWGWHFW.js.map +0 -1
  170. package/dist/chunk-EMDQWNYR.js.map +0 -1
  171. package/dist/chunk-FFSWWE5O.js.map +0 -1
  172. package/dist/chunk-FGXRVW7G.js.map +0 -1
  173. package/dist/chunk-FUHJCHS4.js.map +0 -1
  174. package/dist/chunk-GJFURBEW.js.map +0 -1
  175. package/dist/chunk-GTILYBH6.js.map +0 -1
  176. package/dist/chunk-JJP7KQND.js +0 -1
  177. package/dist/chunk-JJP7KQND.js.map +0 -1
  178. package/dist/chunk-JKP5GH6T.js.map +0 -1
  179. package/dist/chunk-KCBMVQL5.js.map +0 -1
  180. package/dist/chunk-KVSW5KYP.js.map +0 -1
  181. package/dist/chunk-LAWMH22O.js.map +0 -1
  182. package/dist/chunk-LB7OS35Q.js.map +0 -1
  183. package/dist/chunk-LUSIFBXO.js.map +0 -1
  184. package/dist/chunk-MBVNHJVN.js.map +0 -1
  185. package/dist/chunk-MGNMHKX3.js.map +0 -1
  186. package/dist/chunk-N5KEREIA.js.map +0 -1
  187. package/dist/chunk-NDSQYIWT.js.map +0 -1
  188. package/dist/chunk-NUZ4OMU3.js.map +0 -1
  189. package/dist/chunk-QOV2R2WT.js.map +0 -1
  190. package/dist/chunk-SEFSL2GF.js.map +0 -1
  191. package/dist/chunk-T6ARFSBZ.js.map +0 -1
  192. package/dist/chunk-TBP6BICL.js.map +0 -1
  193. package/dist/chunk-TDNNOR6D.js.map +0 -1
  194. package/dist/chunk-TSPZOMHC.js.map +0 -1
  195. package/dist/chunk-UNTPVD36.js.map +0 -1
  196. package/dist/chunk-VRUJH4BO.js.map +0 -1
  197. package/dist/chunk-VZ7AMAFL.js.map +0 -1
  198. package/dist/chunk-XFXDXEUN.js.map +0 -1
  199. package/dist/chunk-YZAA4LYG.js.map +0 -1
  200. package/dist/chunk-Z73NYSBZ.js.map +0 -1
  201. package/dist/chunk-ZJRYBOEE.js.map +0 -1
  202. package/dist/cli.js.map +0 -1
  203. package/dist/index.js.map +0 -1
  204. package/dist/postinstall.js.map +0 -1
  205. package/dist/queries/affected.js.map +0 -1
  206. package/dist/queries/bottlenecks.js.map +0 -1
  207. package/dist/queries/by-kind.js.map +0 -1
  208. package/dist/queries/call-graph.js.map +0 -1
  209. package/dist/queries/change-surface.js.map +0 -1
  210. package/dist/queries/clean-signature.js.map +0 -1
  211. package/dist/queries/code.js.map +0 -1
  212. package/dist/queries/complexity-hotspots.js.map +0 -1
  213. package/dist/queries/complexity.js.map +0 -1
  214. package/dist/queries/convergence.js.map +0 -1
  215. package/dist/queries/coupling.js.map +0 -1
  216. package/dist/queries/cycles.js.map +0 -1
  217. package/dist/queries/dataflow.js.map +0 -1
  218. package/dist/queries/dead.js.map +0 -1
  219. package/dist/queries/deep-chains.js.map +0 -1
  220. package/dist/queries/deps.js.map +0 -1
  221. package/dist/queries/diff-impact.js.map +0 -1
  222. package/dist/queries/doc-coverage.js.map +0 -1
  223. package/dist/queries/drift.js.map +0 -1
  224. package/dist/queries/extract-candidates.js.map +0 -1
  225. package/dist/queries/fan.js.map +0 -1
  226. package/dist/queries/files.js.map +0 -1
  227. package/dist/queries/health.js.map +0 -1
  228. package/dist/queries/hierarchy.js.map +0 -1
  229. package/dist/queries/hotspots.js.map +0 -1
  230. package/dist/queries/imports.js.map +0 -1
  231. package/dist/queries/index.js.map +0 -1
  232. package/dist/queries/isolated.js.map +0 -1
  233. package/dist/queries/members.js.map +0 -1
  234. package/dist/queries/methods.js.map +0 -1
  235. package/dist/queries/outline.js.map +0 -1
  236. package/dist/queries/passthrough-candidates.js.map +0 -1
  237. package/dist/queries/redundant-reexports.js.map +0 -1
  238. package/dist/queries/refs.js.map +0 -1
  239. package/dist/queries/similar-chains.js.map +0 -1
  240. package/dist/queries/similar-files.js.map +0 -1
  241. package/dist/queries/similar-signatures.js.map +0 -1
  242. package/dist/queries/similar.js.map +0 -1
  243. package/dist/queries/slice.js.map +0 -1
  244. package/dist/queries/stale-abstractions.js.map +0 -1
  245. package/dist/queries/stats.js.map +0 -1
  246. package/dist/queries/surface.js.map +0 -1
  247. package/dist/queries/symbols.js.map +0 -1
  248. package/dist/queries/system.js.map +0 -1
  249. package/dist/queries/test-coverage.d.ts +0 -22
  250. package/dist/queries/test-coverage.js +0 -11
  251. package/dist/queries/test-coverage.js.map +0 -1
  252. package/dist/queries/trace.js.map +0 -1
  253. package/dist/queries/wrapper-candidates.js.map +0 -1
  254. package/dist/reindex-worker.js.map +0 -1
  255. package/docs/AGENT_GUIDE.md +0 -359
  256. package/reports/debloat/2026-04-10-scip-query-self-audit.md +0 -161
  257. package/src/cli.ts +0 -1480
  258. package/src/config.ts +0 -117
  259. package/src/db.ts +0 -127
  260. package/src/gitignore-filter.ts +0 -143
  261. package/src/index.ts +0 -11
  262. package/src/postinstall.ts +0 -8
  263. package/src/queries/affected.ts +0 -86
  264. package/src/queries/bottlenecks.ts +0 -67
  265. package/src/queries/by-kind.ts +0 -204
  266. package/src/queries/call-graph.ts +0 -66
  267. package/src/queries/change-surface.ts +0 -110
  268. package/src/queries/clean-signature.ts +0 -22
  269. package/src/queries/code.ts +0 -101
  270. package/src/queries/complexity-hotspots.ts +0 -119
  271. package/src/queries/complexity.ts +0 -152
  272. package/src/queries/convergence.ts +0 -82
  273. package/src/queries/coupling.ts +0 -99
  274. package/src/queries/cycles.ts +0 -78
  275. package/src/queries/dataflow.ts +0 -128
  276. package/src/queries/dead.ts +0 -122
  277. package/src/queries/deep-chains.ts +0 -59
  278. package/src/queries/deps.ts +0 -46
  279. package/src/queries/diff-impact.ts +0 -204
  280. package/src/queries/doc-coverage.ts +0 -86
  281. package/src/queries/drift.ts +0 -224
  282. package/src/queries/extract-candidates.ts +0 -167
  283. package/src/queries/fan.ts +0 -148
  284. package/src/queries/files.ts +0 -16
  285. package/src/queries/health.ts +0 -324
  286. package/src/queries/hierarchy.ts +0 -49
  287. package/src/queries/hotspots.ts +0 -53
  288. package/src/queries/imports.ts +0 -95
  289. package/src/queries/index.ts +0 -45
  290. package/src/queries/isolated.ts +0 -67
  291. package/src/queries/members.ts +0 -54
  292. package/src/queries/methods.ts +0 -27
  293. package/src/queries/outline.ts +0 -52
  294. package/src/queries/passthrough-candidates.ts +0 -94
  295. package/src/queries/redundant-reexports.ts +0 -170
  296. package/src/queries/refs.ts +0 -27
  297. package/src/queries/similar-chains.ts +0 -314
  298. package/src/queries/similar-files.ts +0 -140
  299. package/src/queries/similar-signatures.ts +0 -151
  300. package/src/queries/similar.ts +0 -305
  301. package/src/queries/slice.ts +0 -154
  302. package/src/queries/stale-abstractions.ts +0 -82
  303. package/src/queries/stats.ts +0 -22
  304. package/src/queries/surface.ts +0 -34
  305. package/src/queries/symbols.ts +0 -39
  306. package/src/queries/system.ts +0 -86
  307. package/src/queries/test-coverage.ts +0 -106
  308. package/src/queries/trace.ts +0 -55
  309. package/src/queries/wrapper-candidates.ts +0 -112
  310. package/src/query-support.ts +0 -226
  311. package/src/reindex/detect.ts +0 -58
  312. package/src/reindex/index.ts +0 -153
  313. package/src/reindex/indexers.ts +0 -220
  314. package/src/reindex/install.ts +0 -125
  315. package/src/reindex-worker.ts +0 -35
  316. package/src/setup.ts +0 -202
  317. package/src/symbol-parser.ts +0 -278
  318. package/src/types.ts +0 -654
  319. package/src/watch.ts +0 -274
  320. package/tests/gitignore-filter.test.ts +0 -48
  321. package/tests/queries.test.ts +0 -300
  322. package/tests/symbol-parser.test.ts +0 -157
  323. package/tsconfig.json +0 -20
  324. package/tsup.config.ts +0 -40
  325. package/vitest.config.ts +0 -7
@@ -0,0 +1,69 @@
1
+ import {
2
+ findFirstSymbolMatch
3
+ } from "./chunk-LLMPAG56.js";
4
+ import {
5
+ parseSymbol,
6
+ shortenSymbol
7
+ } from "./chunk-QIXNAB5K.js";
8
+
9
+ // src/queries/hierarchy.ts
10
+ function hierarchy(db, symbolPattern) {
11
+ const match = findFirstSymbolMatch(db, symbolPattern);
12
+ if (!match) return [];
13
+ const sym = db.get(
14
+ `SELECT symbol, enclosing_symbol FROM global_symbols
15
+ WHERE id = ? LIMIT 1`,
16
+ match.symbolId
17
+ );
18
+ if (!sym) return [];
19
+ const chain = [
20
+ { symbol: sym.symbol, shortName: shortenSymbol(sym.symbol), depth: 0 }
21
+ ];
22
+ let current = sym.enclosing_symbol;
23
+ let depth = 1;
24
+ const seen = /* @__PURE__ */ new Set([sym.symbol]);
25
+ while (current && !seen.has(current) && depth < 20) {
26
+ seen.add(current);
27
+ const parent = db.get(
28
+ `SELECT symbol, enclosing_symbol FROM global_symbols WHERE symbol = ?`,
29
+ current
30
+ );
31
+ if (!parent) break;
32
+ chain.push({
33
+ symbol: parent.symbol,
34
+ shortName: shortenSymbol(parent.symbol),
35
+ depth
36
+ });
37
+ current = parent.enclosing_symbol;
38
+ depth++;
39
+ }
40
+ if (chain.length > 1) {
41
+ return chain;
42
+ }
43
+ const parsed = parseSymbol(sym.symbol);
44
+ if ("kind" in parsed) {
45
+ return chain;
46
+ }
47
+ const descriptors = parsed.descriptors;
48
+ if (descriptors.length <= 1) {
49
+ return chain;
50
+ }
51
+ const syntheticChain = [chain[0]];
52
+ for (let i = descriptors.length - 2, syntheticDepth = 1; i >= 0; i--, syntheticDepth++) {
53
+ const partial = descriptors.slice(0, i + 1);
54
+ const shortName = partial.map(
55
+ (descriptor) => descriptor.suffix === "method" ? `${descriptor.name}()` : descriptor.name.replace(/\.(ts|tsx|js|jsx|mjs|cjs|py|pyi|rs|java|scala|kt|kts|rb|go|cs|vb|dart|php|c|cc|cpp|cxx|h|hpp)$/, "")
56
+ ).join(":");
57
+ syntheticChain.push({
58
+ symbol: shortName,
59
+ shortName,
60
+ depth: syntheticDepth
61
+ });
62
+ }
63
+ return syntheticChain;
64
+ }
65
+
66
+ export {
67
+ hierarchy
68
+ };
69
+ //# sourceMappingURL=chunk-IJKLB2JW.js.map
@@ -8,7 +8,7 @@ function refs(db, symbolPattern) {
8
8
  JOIN global_symbols gs ON m.symbol_id = gs.id
9
9
  WHERE gs.symbol LIKE ?
10
10
  AND ${db.localSymbolPredicate}
11
- AND m.role = 0
11
+ AND m.role != 1
12
12
  ORDER BY d.relative_path, c.start_line`,
13
13
  `%${symbolPattern}%`
14
14
  );
@@ -21,4 +21,4 @@ function refs(db, symbolPattern) {
21
21
  export {
22
22
  refs
23
23
  };
24
- //# sourceMappingURL=chunk-6NBLIDF4.js.map
24
+ //# sourceMappingURL=chunk-ITZ3DDOG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/fan.ts
6
6
  function fanIn(db, symbolPattern) {
@@ -10,7 +10,7 @@ function fanIn(db, symbolPattern) {
10
10
  JOIN chunks c ON m.chunk_id = c.id
11
11
  JOIN global_symbols gs ON m.symbol_id = gs.id
12
12
  WHERE gs.symbol LIKE ?
13
- AND m.role = 0
13
+ AND m.role != 1
14
14
  GROUP BY gs.id
15
15
  ORDER BY file_count DESC`,
16
16
  `%${symbolPattern}%`
@@ -30,7 +30,7 @@ function fanOut(db, filePattern) {
30
30
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
31
31
  JOIN documents def_d ON der.document_id = def_d.id
32
32
  WHERE d.relative_path LIKE ?
33
- AND m.role = 0
33
+ AND m.role != 1
34
34
  AND def_d.id != d.id
35
35
  GROUP BY d.id
36
36
  ORDER BY symbol_count DESC`,
@@ -51,7 +51,7 @@ function topFanIn(db, opts = {}) {
51
51
  JOIN global_symbols gs ON m.symbol_id = gs.id
52
52
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
53
53
  JOIN documents def_d ON der.document_id = def_d.id
54
- WHERE m.role = 0
54
+ WHERE m.role != 1
55
55
  ${db.pathExclusionsFor("def_d")}
56
56
  ${db.symbolNoiseFor("gs")}
57
57
  ${scopeFilter}
@@ -77,7 +77,7 @@ function topFanOut(db, opts = {}) {
77
77
  JOIN global_symbols gs ON m.symbol_id = gs.id
78
78
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
79
79
  JOIN documents def_d ON der.document_id = def_d.id
80
- WHERE m.role = 0
80
+ WHERE m.role != 1
81
81
  AND def_d.id != d.id
82
82
  ${db.pathExclusionsFor("d")}
83
83
  ${db.symbolNoiseFor("gs")}
@@ -99,4 +99,4 @@ export {
99
99
  topFanIn,
100
100
  topFanOut
101
101
  };
102
- //# sourceMappingURL=chunk-GTILYBH6.js.map
102
+ //# sourceMappingURL=chunk-IXPHLF6K.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/hotspots.ts
6
6
  function hotspots(db, opts = {}) {
@@ -18,7 +18,7 @@ function hotspots(db, opts = {}) {
18
18
  JOIN global_symbols gs ON m.symbol_id = gs.id
19
19
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
20
20
  JOIN documents def_d ON der.document_id = def_d.id
21
- WHERE m.role = 0
21
+ WHERE m.role != 1
22
22
  ${db.pathExclusionsFor("def_d")}
23
23
  ${db.symbolNoiseFor("gs")}
24
24
  ${scopeFilter}
@@ -39,4 +39,4 @@ function hotspots(db, opts = {}) {
39
39
  export {
40
40
  hotspots
41
41
  };
42
- //# sourceMappingURL=chunk-BFSCMC22.js.map
42
+ //# sourceMappingURL=chunk-KBOQX573.js.map
@@ -1,3 +1,10 @@
1
+ import {
2
+ isFunctionLikeSymbol,
3
+ isModuleLikeSymbol,
4
+ leafName,
5
+ shortenSymbol
6
+ } from "./chunk-QIXNAB5K.js";
7
+
1
8
  // src/query-support.ts
2
9
  var TEST_FILE_PATTERNS = [
3
10
  "%/__tests__/%",
@@ -13,9 +20,6 @@ var TEST_FILE_PATTERNS = [
13
20
  var TEST_SUPPORT_PATH_PATTERNS = [
14
21
  "%/test-utils/%"
15
22
  ];
16
- function testFileMatchSql(alias, patterns = TEST_FILE_PATTERNS) {
17
- return `(${patterns.map((pattern) => `${alias}.relative_path LIKE '${pattern}'`).join(" OR ")})`;
18
- }
19
23
  function testFileExclusionSql(alias, extraPatterns = []) {
20
24
  const patterns = uniquePatterns([...TEST_FILE_PATTERNS, ...extraPatterns]);
21
25
  return patterns.map((pattern) => `${alias}.relative_path NOT LIKE '${pattern}'`).join("\n AND ");
@@ -33,7 +37,7 @@ function buildFileDepGraph(db, scope) {
33
37
  JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
34
38
  JOIN documents d2 ON der.document_id = d2.id
35
39
  WHERE d1.id != d2.id
36
- AND m.role = 0
40
+ AND m.role != 1
37
41
  ${db.pathExclusionsFor("d1", "d2")}
38
42
  ${scopeFilter}`
39
43
  );
@@ -74,34 +78,95 @@ function findFirstSymbolMatch(db, symbolPattern) {
74
78
  };
75
79
  }
76
80
  }
77
- const cleaned = symbolPattern.replace(/\(\)$/, "").replace(/\(.*$/, "");
78
- for (const useNoiseFilter of [true, false]) {
79
- const noiseClause = useNoiseFilter ? db.symbolNoiseFor("gs") : "";
80
- const row = db.get(
81
- `SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path
82
- FROM global_symbols gs
83
- JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
84
- JOIN documents d ON der.document_id = d.id
85
- WHERE gs.symbol LIKE ?
86
- ${db.pathExclusionsFor("d")}
87
- ${noiseClause}
88
- ORDER BY (der.end_line - der.start_line) DESC
89
- LIMIT 1`,
90
- `%${cleaned}%`
91
- );
92
- if (row && !db.isIgnored(row.relative_path)) {
93
- return {
94
- symbolId: row.id,
95
- symbol: row.symbol,
96
- documentId: row.document_id,
97
- startLine: row.start_line,
98
- endLine: row.end_line,
99
- relativePath: row.relative_path
100
- };
81
+ const cleaned = normalizeLookupPattern(symbolPattern);
82
+ const tokens = lookupTokens(symbolPattern);
83
+ const candidates = getSymbolLookupCandidates(db, tokens);
84
+ let best = null;
85
+ for (const row of candidates) {
86
+ if (db.isIgnored(row.relative_path)) continue;
87
+ const score = scoreSymbolCandidate(row, symbolPattern, cleaned, tokens);
88
+ if (score <= 0) continue;
89
+ if (!best || score > best.score) {
90
+ best = { row, score };
101
91
  }
102
92
  }
93
+ if (best) {
94
+ return {
95
+ symbolId: best.row.id,
96
+ symbol: best.row.symbol,
97
+ documentId: best.row.document_id,
98
+ startLine: best.row.start_line,
99
+ endLine: best.row.end_line,
100
+ relativePath: best.row.relative_path
101
+ };
102
+ }
103
103
  return null;
104
104
  }
105
+ function normalizeLookupPattern(symbolPattern) {
106
+ return symbolPattern.trim().replace(/\(\)$/, "").replace(/\(.*$/, "");
107
+ }
108
+ function lookupTokens(symbolPattern) {
109
+ const cleaned = normalizeLookupPattern(symbolPattern);
110
+ const tokens = cleaned.split(/[^A-Za-z0-9_]+/).map((token) => token.trim()).filter((token) => token.length > 0);
111
+ return tokens.length > 0 ? [...new Set(tokens)] : [cleaned];
112
+ }
113
+ function getSymbolLookupCandidates(db, tokens) {
114
+ const tokenClauses = tokens.map(
115
+ () => `(gs.symbol LIKE ? OR d.relative_path LIKE ? OR COALESCE(gs.display_name, '') LIKE ?)`
116
+ );
117
+ const params = tokens.flatMap((token) => {
118
+ const like = `%${token}%`;
119
+ return [like, like, like];
120
+ });
121
+ return db.all(
122
+ `SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path, gs.display_name
123
+ FROM global_symbols gs
124
+ JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
125
+ JOIN documents d ON der.document_id = d.id
126
+ WHERE ${tokenClauses.join("\n AND ")}
127
+ ${db.pathExclusionsFor("d")}
128
+ LIMIT 200`,
129
+ ...params
130
+ );
131
+ }
132
+ function scoreSymbolCandidate(row, originalPattern, cleanedPattern, tokens) {
133
+ const original = originalPattern.toLowerCase();
134
+ const cleaned = cleanedPattern.toLowerCase();
135
+ const noParens = cleaned.replace(/\(\)$/, "");
136
+ const raw = row.symbol.toLowerCase();
137
+ const short = shortenSymbol(row.symbol).toLowerCase();
138
+ const leaf = leafName(row.symbol).toLowerCase();
139
+ const display = (row.display_name ?? "").toLowerCase();
140
+ const path = row.relative_path.toLowerCase();
141
+ const looksPathLike = /[/:.]/.test(cleanedPattern);
142
+ let score = 0;
143
+ if (raw === original || raw === cleaned) score += 1e3;
144
+ if (short === original || short === cleaned) score += 950;
145
+ if (path === original || path === cleaned) score += 925;
146
+ if (path.endsWith(`/${cleaned}`) || path.endsWith(`/${original}`)) score += 875;
147
+ if (display === noParens) score += 850;
148
+ if (leaf === noParens) score += 825;
149
+ if (`${leaf}()` === original || `${leaf}()` === cleaned) score += 820;
150
+ if (short.endsWith(`:${cleaned}`) || short.endsWith(`:${noParens}`) || short.endsWith(`:${noParens}()`)) score += 800;
151
+ if (raw.includes(cleaned)) score += 120;
152
+ if (short.includes(cleaned)) score += 140;
153
+ if (path.includes(cleaned)) score += 140;
154
+ if (display.includes(cleaned)) score += 110;
155
+ if (tokens.every((token) => {
156
+ const lower = token.toLowerCase();
157
+ return raw.includes(lower) || short.includes(lower) || path.includes(lower) || display.includes(lower);
158
+ })) {
159
+ score += 100 + tokens.length * 15;
160
+ }
161
+ if (isFunctionLikeSymbol(row.symbol) && leaf === noParens) {
162
+ score += 60;
163
+ }
164
+ if (!looksPathLike && isModuleLikeSymbol(row.symbol)) {
165
+ score -= 160;
166
+ }
167
+ score -= Math.min(50, Math.max(0, row.end_line - row.start_line));
168
+ return score;
169
+ }
105
170
  function getCalleeRowsForSymbol(db, symbol, opts = {}) {
106
171
  const rows = db.all(
107
172
  `SELECT DISTINCT
@@ -116,7 +181,7 @@ function getCalleeRowsForSymbol(db, symbol, opts = {}) {
116
181
  WHERE c.document_id = ?
117
182
  AND c.start_line >= ?
118
183
  AND c.end_line <= ?
119
- AND m.role = 0
184
+ AND m.role != 1
120
185
  AND callee_gs.id != ?
121
186
  ${db.symbolNoiseFor("callee_gs")}
122
187
  ${db.pathExclusionsFor("callee_d")}
@@ -147,12 +212,10 @@ function uniquePatterns(patterns) {
147
212
  }
148
213
 
149
214
  export {
150
- TEST_FILE_PATTERNS,
151
215
  TEST_SUPPORT_PATH_PATTERNS,
152
- testFileMatchSql,
153
216
  testFileExclusionSql,
154
217
  buildFileDepGraph,
155
218
  findFirstSymbolMatch,
156
219
  getCalleeRowsForSymbol
157
220
  };
158
- //# sourceMappingURL=chunk-FUHJCHS4.js.map
221
+ //# sourceMappingURL=chunk-LLMPAG56.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/surface.ts
6
6
  function surface(db, modulePattern) {
@@ -15,7 +15,7 @@ function surface(db, modulePattern) {
15
15
  WHERE d2.relative_path LIKE ?
16
16
  AND d1.relative_path NOT LIKE ?
17
17
  AND ${db.localSymbolPredicate}
18
- AND m.role = 0
18
+ AND m.role != 1
19
19
  ORDER BY d1.relative_path`,
20
20
  `%${modulePattern}%`,
21
21
  `%${modulePattern}%`
@@ -30,4 +30,4 @@ function surface(db, modulePattern) {
30
30
  export {
31
31
  surface
32
32
  };
33
- //# sourceMappingURL=chunk-FFSWWE5O.js.map
33
+ //# sourceMappingURL=chunk-LTJC5ZQL.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/by-kind.ts
6
6
  var KIND_NAMES = {
@@ -169,4 +169,4 @@ export {
169
169
  byKind,
170
170
  kindCounts
171
171
  };
172
- //# sourceMappingURL=chunk-LAWMH22O.js.map
172
+ //# sourceMappingURL=chunk-M3NPW3FC.js.map
@@ -1,10 +1,6 @@
1
- import {
2
- TEST_FILE_PATTERNS,
3
- testFileMatchSql
4
- } from "./chunk-FUHJCHS4.js";
5
1
  import {
6
2
  shortenSymbol
7
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
8
4
 
9
5
  // src/queries/change-surface.ts
10
6
  function changeSurface(db, filePattern) {
@@ -25,39 +21,24 @@ function changeSurface(db, filePattern) {
25
21
  ORDER BY der.start_line`,
26
22
  doc.id
27
23
  );
28
- const testPatternSql = testFileMatchSql("ref_d", TEST_FILE_PATTERNS);
29
24
  const symbols = [];
30
25
  let totalExternalConsumers = 0;
31
- let coveredCount = 0;
32
26
  for (const sym of syms) {
33
27
  const consumerRow = db.get(
34
28
  `SELECT COUNT(DISTINCT c.document_id) AS consumer_count
35
29
  FROM mentions m
36
30
  JOIN chunks c ON m.chunk_id = c.id
37
31
  WHERE m.symbol_id = ?
38
- AND m.role = 0
32
+ AND m.role != 1
39
33
  AND c.document_id != ?`,
40
34
  sym.symbol_id,
41
35
  doc.id
42
36
  );
43
37
  const externalConsumers = consumerRow?.consumer_count ?? 0;
44
- const testFiles = db.all(
45
- `SELECT DISTINCT ref_d.relative_path
46
- FROM mentions m
47
- JOIN chunks c ON m.chunk_id = c.id
48
- JOIN documents ref_d ON c.document_id = ref_d.id
49
- WHERE m.symbol_id = ?
50
- AND m.role = 0
51
- AND (${testPatternSql})
52
- ORDER BY ref_d.relative_path`,
53
- sym.symbol_id
54
- ).map((r) => r.relative_path);
55
- const hasTests = testFiles.length > 0;
56
- if (hasTests) coveredCount++;
57
38
  let riskLevel;
58
- if (externalConsumers > 10 && !hasTests) {
39
+ if (externalConsumers > 10) {
59
40
  riskLevel = "high";
60
- } else if (externalConsumers > 5 || !hasTests) {
41
+ } else if (externalConsumers > 0) {
61
42
  riskLevel = "medium";
62
43
  } else {
63
44
  riskLevel = "low";
@@ -69,20 +50,17 @@ function changeSurface(db, filePattern) {
69
50
  startLine: sym.start_line,
70
51
  endLine: sym.end_line,
71
52
  externalConsumers,
72
- testFiles,
73
53
  riskLevel
74
54
  });
75
55
  }
76
- const testCoveragePercent = symbols.length > 0 ? Math.round(coveredCount / symbols.length * 100) : 0;
77
56
  return {
78
57
  file: doc.relative_path,
79
58
  symbols,
80
- totalExternalConsumers,
81
- testCoveragePercent
59
+ totalExternalConsumers
82
60
  };
83
61
  }
84
62
 
85
63
  export {
86
64
  changeSurface
87
65
  };
88
- //# sourceMappingURL=chunk-VRUJH4BO.js.map
66
+ //# sourceMappingURL=chunk-M4QGEKKD.js.map
@@ -1,45 +1,45 @@
1
1
  import {
2
2
  staleAbstractions
3
- } from "./chunk-GJFURBEW.js";
3
+ } from "./chunk-ORINICIZ.js";
4
4
  import {
5
5
  stats
6
- } from "./chunk-XFXDXEUN.js";
7
- import {
8
- testCoverageSummary
9
- } from "./chunk-3ZZJVBIO.js";
6
+ } from "./chunk-74RFWB5T.js";
10
7
  import {
11
8
  wrapperCandidates
12
- } from "./chunk-TDNNOR6D.js";
9
+ } from "./chunk-PMJKOXOT.js";
13
10
  import {
14
11
  passthroughCandidates
15
- } from "./chunk-NDSQYIWT.js";
12
+ } from "./chunk-3566TKJ5.js";
16
13
  import {
17
14
  similarAll
18
- } from "./chunk-TSPZOMHC.js";
15
+ } from "./chunk-H6WCPKCX.js";
19
16
  import {
20
17
  isolated
21
- } from "./chunk-LUSIFBXO.js";
18
+ } from "./chunk-HMYJJ3HY.js";
22
19
  import {
23
20
  drift
24
- } from "./chunk-36OMT7ZJ.js";
21
+ } from "./chunk-R56FJU3E.js";
25
22
  import {
26
23
  extractCandidates
27
- } from "./chunk-CM454WL3.js";
24
+ } from "./chunk-BFLULBEU.js";
28
25
  import {
29
26
  complexityHotspots
30
- } from "./chunk-EMDQWNYR.js";
27
+ } from "./chunk-WVK7AASK.js";
31
28
  import {
32
29
  cycles
33
- } from "./chunk-5WTJAXY2.js";
30
+ } from "./chunk-Y3M323OX.js";
34
31
  import {
35
32
  dead
36
- } from "./chunk-5FGUEU7N.js";
33
+ } from "./chunk-6WVR5K46.js";
34
+ import {
35
+ isEntrySurface
36
+ } from "./chunk-VO4QI3LS.js";
37
37
 
38
38
  // src/queries/health.ts
39
39
  function health(db, opts = {}) {
40
40
  const { scope } = opts;
41
41
  const s = stats(db);
42
- const deadResult = dead(db, { scope, minLoc: 3, skipBarrels: false });
42
+ const deadResult = dead(db, { scope, minLoc: 3, skipBarrels: true });
43
43
  const isolatedResult = isolated(db, { scope, minLoc: 3 });
44
44
  const cycleResult = cycles(db, { scope });
45
45
  const similarResult = similarAll(db, { scope, minSimilarity: 0.6, limit: 50, minCallees: 4 });
@@ -49,20 +49,13 @@ function health(db, opts = {}) {
49
49
  const staleResult = staleAbstractions(db, { scope, minLoc: 3, limit: 50 });
50
50
  const driftResult = drift(db, { scope });
51
51
  const complexResult = complexityHotspots(db, { scope, minLoc: 10, limit: 10 });
52
- const testResult = testCoverageSummary(db, { scope, minLoc: 3 });
53
- const isolatedLoc = isolatedResult.reduce((sum, r) => sum + r.loc, 0);
54
- const entryPointPatterns = ["/index.ts", "/index.js", "cli.ts", "worker.ts", "postinstall.ts", "/mod.rs", "__init__.py", "main.ts", "main.rs", "main.go", "main.py"];
55
- const isEntryPoint = (path) => entryPointPatterns.some((p) => path.endsWith(p));
56
52
  const trueDeadSymbols = deadResult.symbols.filter(
57
- (s2) => !isEntryPoint(s2.relativePath) && s2.kind === "dead-code"
53
+ (s2) => !isEntrySurface(db, s2.relativePath) && s2.kind === "dead-code"
58
54
  );
59
55
  const trueDeadCount = trueDeadSymbols.length;
60
56
  const trueDeadLoc = trueDeadSymbols.reduce((sum, s2) => sum + s2.loc, 0);
61
- const fileInternalCount = deadResult.symbols.filter(
62
- (s2) => !isEntryPoint(s2.relativePath) && s2.kind === "file-internal"
63
- ).length;
64
57
  const trueIsolatedCount = isolatedResult.filter(
65
- (s2) => !isEntryPoint(s2.relativePath)
58
+ (s2) => !isEntrySurface(db, s2.relativePath)
66
59
  ).length;
67
60
  const filesWithFunctions = new Set(
68
61
  db.all(
@@ -91,16 +84,6 @@ function health(db, opts = {}) {
91
84
  locRecoverable: trueDeadLoc
92
85
  });
93
86
  }
94
- if (testResult.percent < 50) {
95
- actions.push({
96
- category: "Test coverage",
97
- description: `${testResult.percent}% of symbols referenced by tests (${testResult.uncovered} uncovered)`,
98
- effort: "high",
99
- impact: "high",
100
- count: testResult.uncovered,
101
- locRecoverable: 0
102
- });
103
- }
104
87
  if (trueIsolatedCount > 0) {
105
88
  actions.push({
106
89
  category: "Isolated symbols",
@@ -108,7 +91,7 @@ function health(db, opts = {}) {
108
91
  effort: "low",
109
92
  impact: "medium",
110
93
  count: trueIsolatedCount,
111
- locRecoverable: isolatedResult.filter((s2) => !isEntryPoint(s2.relativePath)).reduce((sum, s2) => sum + s2.loc, 0)
94
+ locRecoverable: isolatedResult.filter((s2) => !isEntrySurface(db, s2.relativePath)).reduce((sum, s2) => sum + s2.loc, 0)
112
95
  });
113
96
  }
114
97
  if (cycleResult.length > 0) {
@@ -219,8 +202,6 @@ function health(db, opts = {}) {
219
202
  score -= Math.min(5, Math.round(driftPercent * 50));
220
203
  const extremeComplexity = complexResult.filter((r) => r.score > 50).length;
221
204
  score -= Math.min(5, extremeComplexity * 2);
222
- const coverageDeduction = Math.round(15 * (1 - testResult.percent / 100));
223
- score -= coverageDeduction;
224
205
  score = Math.max(0, Math.min(100, score));
225
206
  return {
226
207
  score,
@@ -233,7 +214,7 @@ function health(db, opts = {}) {
233
214
  deadSymbols: trueDeadCount,
234
215
  deadLoc: trueDeadLoc,
235
216
  isolatedSymbols: trueIsolatedCount,
236
- isolatedLoc: isolatedResult.filter((s2) => !isEntryPoint(s2.relativePath)).reduce((sum, s2) => sum + s2.loc, 0),
217
+ isolatedLoc: isolatedResult.filter((s2) => !isEntrySurface(db, s2.relativePath)).reduce((sum, s2) => sum + s2.loc, 0),
237
218
  cycles: cycleResult.length,
238
219
  similarPairs: trueSimilarCount,
239
220
  extractionCandidates: extractResult.length,
@@ -241,8 +222,7 @@ function health(db, opts = {}) {
241
222
  passthroughs: passthroughResult.length,
242
223
  staleTypes: trueStaleCount,
243
224
  driftedFiles: trueDriftCount,
244
- complexityHotspotCount: complexResult.length,
245
- testCoveragePercent: testResult.percent
225
+ complexityHotspotCount: complexResult.length
246
226
  },
247
227
  actions,
248
228
  topComplexity: complexResult.slice(0, 5).map((r) => ({
@@ -255,4 +235,4 @@ function health(db, opts = {}) {
255
235
  export {
256
236
  health
257
237
  };
258
- //# sourceMappingURL=chunk-7OZPA5OO.js.map
238
+ //# sourceMappingURL=chunk-MVH45PYK.js.map
@@ -0,0 +1,37 @@
1
+ import {
2
+ findFirstSymbolMatch
3
+ } from "./chunk-LLMPAG56.js";
4
+ import {
5
+ isDirectChildSymbol,
6
+ leafSuffix,
7
+ shortenSymbol
8
+ } from "./chunk-QIXNAB5K.js";
9
+
10
+ // src/queries/members.ts
11
+ function members(db, symbolPattern) {
12
+ const parent = findFirstSymbolMatch(db, symbolPattern);
13
+ if (!parent) return [];
14
+ const rows = db.all(
15
+ `SELECT gs.symbol, der.start_line, der.end_line
16
+ FROM global_symbols gs
17
+ JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
18
+ WHERE der.document_id = ?
19
+ AND gs.symbol != ?
20
+ ${db.symbolNoiseFor("gs")}
21
+ ORDER BY der.start_line`,
22
+ parent.documentId,
23
+ parent.symbol
24
+ );
25
+ return rows.filter((row) => isDirectChildSymbol(parent.symbol, row.symbol)).map((row) => ({
26
+ symbol: row.symbol,
27
+ shortName: shortenSymbol(row.symbol),
28
+ startLine: row.start_line,
29
+ endLine: row.end_line,
30
+ kind: leafSuffix(row.symbol) ?? "unknown"
31
+ }));
32
+ }
33
+
34
+ export {
35
+ members
36
+ };
37
+ //# sourceMappingURL=chunk-N4C3H7LH.js.map