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.
- package/README.md +16 -43
- package/dist/chunk-26DOJ63W.js +161 -0
- package/dist/chunk-2UELLEBI.js +1 -0
- package/dist/{chunk-4PDAL6IL.js → chunk-4JCSOF2O.js} +3 -3
- package/dist/{chunk-6SXADWLW.js → chunk-5OMVSV6E.js} +13 -5
- package/dist/{chunk-KPPHZCZJ.js → chunk-7HK5ZLOE.js} +28 -46
- package/dist/{chunk-7RLE5EWE.js → chunk-7KIMF5PV.js} +34 -13
- package/dist/chunk-AXQKUYKF.js +1442 -0
- package/dist/chunk-C7H5WBTJ.js +46 -0
- package/dist/{chunk-NHBZIL2J.js → chunk-CHDJXYBG.js} +3 -28
- package/dist/{chunk-KCBMVQL5.js → chunk-CPVAQJEC.js} +13 -5
- package/dist/{chunk-ZQIIPFD7.js → chunk-DH7G3DDV.js} +2 -2
- package/dist/{chunk-BOVXCR46.js → chunk-EOROMIFO.js} +14 -6
- package/dist/{chunk-2CKGIR6G.js → chunk-EPWLXXBL.js} +3 -3
- package/dist/{chunk-5RMYT5WH.js → chunk-F7XU27LU.js} +2 -2
- package/dist/{chunk-63G7IQTD.js → chunk-FYYOWQXK.js} +20 -40
- package/dist/chunk-GEXE2T6I.js +87 -0
- package/dist/{chunk-DGUPQSOR.js → chunk-GJDHTTR2.js} +11 -4
- package/dist/chunk-GSH2FPKV.js +87 -0
- package/dist/{chunk-NUZ4OMU3.js → chunk-GU2H5QRN.js} +2 -2
- package/dist/{chunk-Z6YZJ36C.js → chunk-HJZUSUPU.js} +8 -4
- package/dist/{chunk-LAWMH22O.js → chunk-HLKAFWWJ.js} +82 -3
- package/dist/{chunk-HPFZLISB.js → chunk-HLUS2HEB.js} +2 -2
- package/dist/{chunk-H2MDONBU.js → chunk-J3JSOSUO.js} +9 -6
- package/dist/{chunk-7PBOG4YE.js → chunk-KBOQX573.js} +2 -2
- package/dist/{chunk-HDSRORNV.js → chunk-KKCHYLVI.js} +17 -11
- package/dist/{chunk-HMLMH7VZ.js → chunk-LFJQVJYJ.js} +2 -2
- package/dist/{chunk-4EXL2CUA.js → chunk-LQJUPXQY.js} +16 -8
- package/dist/{chunk-ITZ3DDOG.js → chunk-MPGIHELS.js} +18 -3
- package/dist/chunk-NFS5W3PP.js +37 -0
- package/dist/chunk-NG5F43OU.js +200 -0
- package/dist/{chunk-DCKMSTJ4.js → chunk-O7Q7FDUJ.js} +22 -14
- package/dist/{chunk-UJQN5N3I.js → chunk-OIDHN6GD.js} +6 -3
- package/dist/{chunk-Z4GHE2HD.js → chunk-P3E6L7KW.js} +6 -2
- package/dist/{chunk-BNN2RKD2.js → chunk-P4WO3BBW.js} +3 -3
- package/dist/{chunk-QOV2R2WT.js → chunk-QIXNAB5K.js} +42 -2
- package/dist/{chunk-NWCE4CIC.js → chunk-SMDCNPMK.js} +11 -28
- package/dist/{chunk-SEFSL2GF.js → chunk-TOIEB3LG.js} +2 -2
- package/dist/{chunk-4XHWPRAX.js → chunk-UGQKAVCD.js} +3 -3
- package/dist/{chunk-OVPLOMPY.js → chunk-UQEQ6AHX.js} +7 -4
- package/dist/{chunk-ZK6GXM3J.js → chunk-VIYSWZCO.js} +3 -3
- package/dist/chunk-VJJKSGIX.js +121 -0
- package/dist/{chunk-N5KEREIA.js → chunk-VT4JBH6L.js} +19 -7
- package/dist/{chunk-7LLPRPR5.js → chunk-WGAD3GNR.js} +2 -2
- package/dist/chunk-YDBXNPYU.js +69 -0
- package/dist/chunk-YY4QGUQ5.js +84 -0
- package/dist/{chunk-FGXRVW7G.js → chunk-YZ6L7GFO.js} +2 -2
- package/dist/{chunk-W4ALF422.js → chunk-ZEUCXQBN.js} +3 -3
- package/dist/cli.js +2697 -1054
- package/dist/{db-BNVVZSfP.d.ts → db-ShvwGDKf.d.ts} +12 -19
- package/dist/index.d.ts +15 -15
- package/dist/index.js +263 -234
- package/dist/postinstall.js +5 -76
- package/dist/queries/affected.d.ts +1 -1
- package/dist/queries/affected.js +3 -3
- package/dist/queries/bottlenecks.d.ts +1 -1
- package/dist/queries/bottlenecks.js +2 -2
- package/dist/queries/by-kind.d.ts +1 -1
- package/dist/queries/by-kind.js +2 -2
- package/dist/queries/call-graph.d.ts +1 -1
- package/dist/queries/call-graph.js +3 -3
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +3 -3
- package/dist/queries/code.d.ts +1 -1
- package/dist/queries/code.js +3 -3
- package/dist/queries/complexity-hotspots.d.ts +1 -1
- package/dist/queries/complexity-hotspots.js +3 -3
- package/dist/queries/complexity.d.ts +1 -1
- package/dist/queries/complexity.js +3 -3
- package/dist/queries/convergence.d.ts +1 -1
- package/dist/queries/convergence.js +3 -3
- package/dist/queries/coupling.d.ts +1 -1
- package/dist/queries/coupling.js +3 -1
- package/dist/queries/cycles.d.ts +1 -1
- package/dist/queries/cycles.js +3 -2
- package/dist/queries/dataflow.d.ts +1 -1
- package/dist/queries/dataflow.js +3 -3
- package/dist/queries/dead.d.ts +1 -1
- package/dist/queries/dead.js +4 -3
- package/dist/queries/deep-chains.d.ts +1 -1
- package/dist/queries/deep-chains.js +3 -2
- package/dist/queries/deps.d.ts +1 -1
- package/dist/queries/deps.js +3 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +2 -3
- package/dist/queries/doc-coverage.d.ts +1 -1
- package/dist/queries/doc-coverage.js +2 -2
- package/dist/queries/drift.d.ts +1 -1
- package/dist/queries/drift.js +3 -2
- package/dist/queries/extract-candidates.d.ts +1 -1
- package/dist/queries/extract-candidates.js +3 -3
- package/dist/queries/fan.d.ts +1 -1
- package/dist/queries/fan.js +3 -2
- package/dist/queries/files.d.ts +1 -1
- package/dist/queries/health.d.ts +1 -1
- package/dist/queries/health.js +14 -14
- package/dist/queries/hierarchy.d.ts +1 -1
- package/dist/queries/hierarchy.js +3 -2
- package/dist/queries/hotspots.d.ts +1 -1
- package/dist/queries/hotspots.js +2 -2
- package/dist/queries/imports.d.ts +1 -1
- package/dist/queries/imports.js +3 -2
- package/dist/queries/index.d.ts +1 -2
- package/dist/queries/index.js +46 -51
- package/dist/queries/isolated.d.ts +1 -1
- package/dist/queries/isolated.js +4 -3
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +3 -2
- package/dist/queries/methods.d.ts +1 -1
- package/dist/queries/methods.js +2 -2
- package/dist/queries/outline.d.ts +1 -1
- package/dist/queries/outline.js +3 -2
- package/dist/queries/passthrough-candidates.d.ts +1 -1
- package/dist/queries/passthrough-candidates.js +3 -3
- package/dist/queries/redundant-reexports.d.ts +1 -1
- package/dist/queries/redundant-reexports.js +4 -2
- package/dist/queries/refs.d.ts +1 -1
- package/dist/queries/refs.js +3 -1
- package/dist/queries/similar-chains.d.ts +1 -1
- package/dist/queries/similar-chains.js +3 -2
- package/dist/queries/similar-files.d.ts +1 -1
- package/dist/queries/similar-files.js +3 -2
- package/dist/queries/similar-signatures.d.ts +1 -1
- package/dist/queries/similar-signatures.js +2 -2
- package/dist/queries/similar.d.ts +1 -1
- package/dist/queries/similar.js +3 -3
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +3 -3
- package/dist/queries/stale-abstractions.d.ts +1 -1
- package/dist/queries/stale-abstractions.js +3 -3
- package/dist/queries/stats.d.ts +1 -1
- package/dist/queries/surface.d.ts +1 -1
- package/dist/queries/surface.js +3 -2
- package/dist/queries/symbols.d.ts +1 -1
- package/dist/queries/symbols.js +3 -2
- package/dist/queries/system.d.ts +1 -1
- package/dist/queries/system.js +3 -2
- package/dist/queries/trace.d.ts +1 -1
- package/dist/queries/trace.js +3 -1
- package/dist/queries/wrapper-candidates.d.ts +1 -1
- package/dist/queries/wrapper-candidates.js +3 -3
- package/dist/reindex-worker.js +24 -12
- package/package.json +6 -1
- package/IMPROVEMENTS.md +0 -143
- package/PLAN.md +0 -320
- package/dist/chunk-2CKGIR6G.js.map +0 -1
- package/dist/chunk-3UOUTZQT.js +0 -45
- package/dist/chunk-3UOUTZQT.js.map +0 -1
- package/dist/chunk-4EXL2CUA.js.map +0 -1
- package/dist/chunk-4PDAL6IL.js.map +0 -1
- package/dist/chunk-4TYLS5XX.js.map +0 -1
- package/dist/chunk-4XHWPRAX.js.map +0 -1
- package/dist/chunk-5RMYT5WH.js.map +0 -1
- package/dist/chunk-63G7IQTD.js.map +0 -1
- package/dist/chunk-6SXADWLW.js.map +0 -1
- package/dist/chunk-74RFWB5T.js.map +0 -1
- package/dist/chunk-7LLPRPR5.js.map +0 -1
- package/dist/chunk-7PBOG4YE.js.map +0 -1
- package/dist/chunk-7RLE5EWE.js.map +0 -1
- package/dist/chunk-7UCKSQRS.js +0 -55
- package/dist/chunk-7UCKSQRS.js.map +0 -1
- package/dist/chunk-BNN2RKD2.js.map +0 -1
- package/dist/chunk-BOVXCR46.js.map +0 -1
- package/dist/chunk-D567NFIF.js +0 -65
- package/dist/chunk-D567NFIF.js.map +0 -1
- package/dist/chunk-DCKMSTJ4.js.map +0 -1
- package/dist/chunk-DEZKCZXD.js +0 -40
- package/dist/chunk-DEZKCZXD.js.map +0 -1
- package/dist/chunk-DGUPQSOR.js.map +0 -1
- package/dist/chunk-DVWGWHFW.js +0 -99
- package/dist/chunk-DVWGWHFW.js.map +0 -1
- package/dist/chunk-EQYLEQCW.js +0 -46
- package/dist/chunk-EQYLEQCW.js.map +0 -1
- package/dist/chunk-FGXRVW7G.js.map +0 -1
- package/dist/chunk-H2MDONBU.js.map +0 -1
- package/dist/chunk-HB7MRLLL.js +0 -76
- package/dist/chunk-HB7MRLLL.js.map +0 -1
- package/dist/chunk-HDSRORNV.js.map +0 -1
- package/dist/chunk-HMLMH7VZ.js.map +0 -1
- package/dist/chunk-HPFZLISB.js.map +0 -1
- package/dist/chunk-HZBC7PPD.js +0 -88
- package/dist/chunk-HZBC7PPD.js.map +0 -1
- package/dist/chunk-ITZ3DDOG.js.map +0 -1
- package/dist/chunk-JJP7KQND.js +0 -1
- package/dist/chunk-JJP7KQND.js.map +0 -1
- package/dist/chunk-KCBMVQL5.js.map +0 -1
- package/dist/chunk-KPPHZCZJ.js.map +0 -1
- package/dist/chunk-LAWMH22O.js.map +0 -1
- package/dist/chunk-MCUX5LA7.js +0 -103
- package/dist/chunk-MCUX5LA7.js.map +0 -1
- package/dist/chunk-MGNMHKX3.js.map +0 -1
- package/dist/chunk-N5KEREIA.js.map +0 -1
- package/dist/chunk-NHBZIL2J.js.map +0 -1
- package/dist/chunk-NUZ4OMU3.js.map +0 -1
- package/dist/chunk-NWCE4CIC.js.map +0 -1
- package/dist/chunk-OVPLOMPY.js.map +0 -1
- package/dist/chunk-QOV2R2WT.js.map +0 -1
- package/dist/chunk-SEFSL2GF.js.map +0 -1
- package/dist/chunk-UJQN5N3I.js.map +0 -1
- package/dist/chunk-W4ALF422.js.map +0 -1
- package/dist/chunk-Z4GHE2HD.js.map +0 -1
- package/dist/chunk-Z6YZJ36C.js.map +0 -1
- package/dist/chunk-ZK6GXM3J.js.map +0 -1
- package/dist/chunk-ZOGY2V3N.js +0 -158
- package/dist/chunk-ZOGY2V3N.js.map +0 -1
- package/dist/chunk-ZQIIPFD7.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/postinstall.js.map +0 -1
- package/dist/queries/affected.js.map +0 -1
- package/dist/queries/bottlenecks.js.map +0 -1
- package/dist/queries/by-kind.js.map +0 -1
- package/dist/queries/call-graph.js.map +0 -1
- package/dist/queries/change-surface.js.map +0 -1
- package/dist/queries/clean-signature.js.map +0 -1
- package/dist/queries/code.js.map +0 -1
- package/dist/queries/complexity-hotspots.js.map +0 -1
- package/dist/queries/complexity.js.map +0 -1
- package/dist/queries/convergence.js.map +0 -1
- package/dist/queries/coupling.js.map +0 -1
- package/dist/queries/cycles.js.map +0 -1
- package/dist/queries/dataflow.js.map +0 -1
- package/dist/queries/dead.js.map +0 -1
- package/dist/queries/deep-chains.js.map +0 -1
- package/dist/queries/deps.js.map +0 -1
- package/dist/queries/diff-impact.js.map +0 -1
- package/dist/queries/doc-coverage.js.map +0 -1
- package/dist/queries/drift.js.map +0 -1
- package/dist/queries/extract-candidates.js.map +0 -1
- package/dist/queries/fan.js.map +0 -1
- package/dist/queries/files.js.map +0 -1
- package/dist/queries/health.js.map +0 -1
- package/dist/queries/hierarchy.js.map +0 -1
- package/dist/queries/hotspots.js.map +0 -1
- package/dist/queries/imports.js.map +0 -1
- package/dist/queries/index.js.map +0 -1
- package/dist/queries/isolated.js.map +0 -1
- package/dist/queries/members.js.map +0 -1
- package/dist/queries/methods.js.map +0 -1
- package/dist/queries/outline.js.map +0 -1
- package/dist/queries/passthrough-candidates.js.map +0 -1
- package/dist/queries/redundant-reexports.js.map +0 -1
- package/dist/queries/refs.js.map +0 -1
- package/dist/queries/similar-chains.js.map +0 -1
- package/dist/queries/similar-files.js.map +0 -1
- package/dist/queries/similar-signatures.js.map +0 -1
- package/dist/queries/similar.js.map +0 -1
- package/dist/queries/slice.js.map +0 -1
- package/dist/queries/stale-abstractions.js.map +0 -1
- package/dist/queries/stats.js.map +0 -1
- package/dist/queries/surface.js.map +0 -1
- package/dist/queries/symbols.js.map +0 -1
- package/dist/queries/system.js.map +0 -1
- package/dist/queries/test-coverage.d.ts +0 -22
- package/dist/queries/test-coverage.js +0 -11
- package/dist/queries/test-coverage.js.map +0 -1
- package/dist/queries/trace.js.map +0 -1
- package/dist/queries/wrapper-candidates.js.map +0 -1
- package/dist/reindex-worker.js.map +0 -1
- package/docs/AGENT_GUIDE.md +0 -359
- package/reports/debloat/2026-04-10-scip-query-self-audit.md +0 -161
- package/src/cli.ts +0 -1480
- package/src/config.ts +0 -117
- package/src/db.ts +0 -127
- package/src/gitignore-filter.ts +0 -143
- package/src/index.ts +0 -11
- package/src/postinstall.ts +0 -8
- package/src/queries/affected.ts +0 -86
- package/src/queries/bottlenecks.ts +0 -67
- package/src/queries/by-kind.ts +0 -204
- package/src/queries/call-graph.ts +0 -66
- package/src/queries/change-surface.ts +0 -110
- package/src/queries/clean-signature.ts +0 -22
- package/src/queries/code.ts +0 -101
- package/src/queries/complexity-hotspots.ts +0 -119
- package/src/queries/complexity.ts +0 -152
- package/src/queries/convergence.ts +0 -82
- package/src/queries/coupling.ts +0 -99
- package/src/queries/cycles.ts +0 -78
- package/src/queries/dataflow.ts +0 -128
- package/src/queries/dead.ts +0 -122
- package/src/queries/deep-chains.ts +0 -59
- package/src/queries/deps.ts +0 -46
- package/src/queries/diff-impact.ts +0 -204
- package/src/queries/doc-coverage.ts +0 -86
- package/src/queries/drift.ts +0 -224
- package/src/queries/extract-candidates.ts +0 -167
- package/src/queries/fan.ts +0 -148
- package/src/queries/files.ts +0 -16
- package/src/queries/health.ts +0 -324
- package/src/queries/hierarchy.ts +0 -49
- package/src/queries/hotspots.ts +0 -53
- package/src/queries/imports.ts +0 -95
- package/src/queries/index.ts +0 -45
- package/src/queries/isolated.ts +0 -67
- package/src/queries/members.ts +0 -54
- package/src/queries/methods.ts +0 -27
- package/src/queries/outline.ts +0 -52
- package/src/queries/passthrough-candidates.ts +0 -94
- package/src/queries/redundant-reexports.ts +0 -170
- package/src/queries/refs.ts +0 -27
- package/src/queries/similar-chains.ts +0 -314
- package/src/queries/similar-files.ts +0 -140
- package/src/queries/similar-signatures.ts +0 -151
- package/src/queries/similar.ts +0 -305
- package/src/queries/slice.ts +0 -154
- package/src/queries/stale-abstractions.ts +0 -82
- package/src/queries/stats.ts +0 -22
- package/src/queries/surface.ts +0 -34
- package/src/queries/symbols.ts +0 -39
- package/src/queries/system.ts +0 -86
- package/src/queries/test-coverage.ts +0 -106
- package/src/queries/trace.ts +0 -55
- package/src/queries/wrapper-candidates.ts +0 -112
- package/src/query-support.ts +0 -226
- package/src/reindex/detect.ts +0 -58
- package/src/reindex/index.ts +0 -153
- package/src/reindex/indexers.ts +0 -220
- package/src/reindex/install.ts +0 -125
- package/src/reindex-worker.ts +0 -35
- package/src/setup.ts +0 -202
- package/src/symbol-parser.ts +0 -278
- package/src/types.ts +0 -654
- package/src/watch.ts +0 -274
- package/tests/gitignore-filter.test.ts +0 -48
- package/tests/queries.test.ts +0 -300
- package/tests/symbol-parser.test.ts +0 -157
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -40
- package/vitest.config.ts +0 -7
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
findFirstSymbolMatch,
|
|
3
|
+
getCalleeRowsForSymbol,
|
|
4
|
+
getCallerRowsForSymbol
|
|
5
|
+
} from "./chunk-AXQKUYKF.js";
|
|
6
|
+
import {
|
|
7
|
+
shortenSymbol
|
|
8
|
+
} from "./chunk-QIXNAB5K.js";
|
|
9
|
+
|
|
10
|
+
// src/queries/call-graph.ts
|
|
11
|
+
function callGraph(db, symbolPattern) {
|
|
12
|
+
const target = findFirstSymbolMatch(db, symbolPattern);
|
|
13
|
+
if (!target) return null;
|
|
14
|
+
const callerRows = getCallerRowsForSymbol(db, target, { limit: 50 });
|
|
15
|
+
const calleeRows = uniqueRows(getCalleeRowsForSymbol(db, target, { limit: 50 }));
|
|
16
|
+
return {
|
|
17
|
+
symbol: target.symbol,
|
|
18
|
+
shortName: shortenSymbol(target.symbol),
|
|
19
|
+
callers: callerRows.map((r) => ({
|
|
20
|
+
symbol: r.symbol,
|
|
21
|
+
shortName: shortenSymbol(r.symbol),
|
|
22
|
+
file: r.file
|
|
23
|
+
})),
|
|
24
|
+
callees: calleeRows.map((r) => ({
|
|
25
|
+
symbol: r.symbol,
|
|
26
|
+
shortName: shortenSymbol(r.symbol),
|
|
27
|
+
file: r.file
|
|
28
|
+
}))
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function uniqueRows(rows) {
|
|
32
|
+
const seen = /* @__PURE__ */ new Set();
|
|
33
|
+
const unique = [];
|
|
34
|
+
for (const row of rows) {
|
|
35
|
+
const key = `${row.symbol}|${row.file}`;
|
|
36
|
+
if (seen.has(key)) continue;
|
|
37
|
+
seen.add(key);
|
|
38
|
+
unique.push(row);
|
|
39
|
+
}
|
|
40
|
+
return unique;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
callGraph
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=chunk-C7H5WBTJ.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findFirstSymbolMatch,
|
|
3
3
|
getCalleeRowsForSymbol
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AXQKUYKF.js";
|
|
5
5
|
import {
|
|
6
6
|
shortenSymbol
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QIXNAB5K.js";
|
|
8
8
|
|
|
9
9
|
// src/queries/slice.ts
|
|
10
10
|
function slice(db, symbolPattern, opts = {}) {
|
|
@@ -19,21 +19,6 @@ function slice(db, symbolPattern, opts = {}) {
|
|
|
19
19
|
}
|
|
20
20
|
function backwardSlice(db, match) {
|
|
21
21
|
const callees = getCalleeRowsForSymbol(db, match);
|
|
22
|
-
const localPredecessors = db.all(
|
|
23
|
-
`SELECT DISTINCT gs.symbol, d.relative_path AS file
|
|
24
|
-
FROM defn_enclosing_ranges der
|
|
25
|
-
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
26
|
-
JOIN documents d ON der.document_id = d.id
|
|
27
|
-
WHERE der.document_id = ?
|
|
28
|
-
AND der.end_line < ?
|
|
29
|
-
AND gs.id != ?
|
|
30
|
-
${db.symbolNoiseFor("gs")}
|
|
31
|
-
ORDER BY der.start_line DESC
|
|
32
|
-
LIMIT 15`,
|
|
33
|
-
match.documentId,
|
|
34
|
-
match.startLine,
|
|
35
|
-
match.symbolId
|
|
36
|
-
);
|
|
37
22
|
const seen = /* @__PURE__ */ new Set();
|
|
38
23
|
const connected = [];
|
|
39
24
|
for (const c of callees) {
|
|
@@ -46,16 +31,6 @@ function backwardSlice(db, match) {
|
|
|
46
31
|
relationship: "referenced within definition (callee)"
|
|
47
32
|
});
|
|
48
33
|
}
|
|
49
|
-
for (const p of localPredecessors) {
|
|
50
|
-
if (seen.has(p.symbol) || db.isIgnored(p.file)) continue;
|
|
51
|
-
seen.add(p.symbol);
|
|
52
|
-
connected.push({
|
|
53
|
-
symbol: p.symbol,
|
|
54
|
-
shortName: shortenSymbol(p.symbol),
|
|
55
|
-
file: p.file,
|
|
56
|
-
relationship: "defined before target in same file (local predecessor)"
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
34
|
return {
|
|
60
35
|
symbol: match.symbol,
|
|
61
36
|
shortName: shortenSymbol(match.symbol),
|
|
@@ -122,4 +97,4 @@ function forwardSlice(db, match) {
|
|
|
122
97
|
export {
|
|
123
98
|
slice
|
|
124
99
|
};
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
100
|
+
//# sourceMappingURL=chunk-CHDJXYBG.js.map
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cleanSignature
|
|
3
3
|
} from "./chunk-4TYLS5XX.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveIndexedPaths
|
|
6
|
+
} from "./chunk-AXQKUYKF.js";
|
|
4
7
|
import {
|
|
5
8
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
10
|
|
|
8
11
|
// src/queries/symbols.ts
|
|
9
12
|
function symbols(db, filePattern) {
|
|
13
|
+
const resolvedPaths = resolveIndexedPaths(db, filePattern);
|
|
14
|
+
if (resolvedPaths.length === 0) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const placeholders = resolvedPaths.map(() => "?").join(", ");
|
|
10
18
|
const rows = db.all(
|
|
11
19
|
`SELECT
|
|
12
20
|
der.start_line,
|
|
@@ -17,11 +25,11 @@ function symbols(db, filePattern) {
|
|
|
17
25
|
FROM defn_enclosing_ranges der
|
|
18
26
|
JOIN global_symbols gs ON der.symbol_id = gs.id
|
|
19
27
|
JOIN documents d ON der.document_id = d.id
|
|
20
|
-
WHERE d.relative_path
|
|
28
|
+
WHERE d.relative_path IN (${placeholders})
|
|
21
29
|
AND ${db.localSymbolPredicate}
|
|
22
30
|
${db.symbolNoise}
|
|
23
|
-
ORDER BY der.start_line`,
|
|
24
|
-
|
|
31
|
+
ORDER BY d.relative_path, der.start_line`,
|
|
32
|
+
...resolvedPaths
|
|
25
33
|
);
|
|
26
34
|
return rows.filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
|
|
27
35
|
startLine: r.start_line,
|
|
@@ -35,4 +43,4 @@ function symbols(db, filePattern) {
|
|
|
35
43
|
export {
|
|
36
44
|
symbols
|
|
37
45
|
};
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-CPVAQJEC.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFileDepGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AXQKUYKF.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/deep-chains.ts
|
|
6
6
|
function deepChains(db, opts = {}) {
|
|
@@ -41,4 +41,4 @@ function deepChains(db, opts = {}) {
|
|
|
41
41
|
export {
|
|
42
42
|
deepChains
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
44
|
+
//# sourceMappingURL=chunk-DH7G3DDV.js.map
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveIndexedPaths
|
|
3
|
+
} from "./chunk-AXQKUYKF.js";
|
|
1
4
|
import {
|
|
2
5
|
shortenSymbol
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
4
7
|
|
|
5
8
|
// src/queries/surface.ts
|
|
6
9
|
function surface(db, modulePattern) {
|
|
10
|
+
const matchedPaths = resolveIndexedPaths(db, modulePattern);
|
|
11
|
+
if (matchedPaths.length === 0) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const placeholders = matchedPaths.map(() => "?").join(", ");
|
|
7
15
|
const rows = db.all(
|
|
8
16
|
`SELECT DISTINCT d1.relative_path, gs.symbol
|
|
9
17
|
FROM mentions m
|
|
@@ -12,13 +20,13 @@ function surface(db, modulePattern) {
|
|
|
12
20
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
13
21
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
14
22
|
JOIN documents d2 ON der.document_id = d2.id
|
|
15
|
-
WHERE d2.relative_path
|
|
16
|
-
AND d1.relative_path NOT
|
|
23
|
+
WHERE d2.relative_path IN (${placeholders})
|
|
24
|
+
AND d1.relative_path NOT IN (${placeholders})
|
|
17
25
|
AND ${db.localSymbolPredicate}
|
|
18
26
|
AND m.role != 1
|
|
19
27
|
ORDER BY d1.relative_path`,
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
...matchedPaths,
|
|
29
|
+
...matchedPaths
|
|
22
30
|
);
|
|
23
31
|
return rows.filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
|
|
24
32
|
consumer: r.relative_path,
|
|
@@ -30,4 +38,4 @@ function surface(db, modulePattern) {
|
|
|
30
38
|
export {
|
|
31
39
|
surface
|
|
32
40
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
41
|
+
//# sourceMappingURL=chunk-EOROMIFO.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getCalleeRowsForSymbol
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AXQKUYKF.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/extract-candidates.ts
|
|
9
9
|
function extractCandidates(db, opts = {}) {
|
|
@@ -111,4 +111,4 @@ function extractCandidates(db, opts = {}) {
|
|
|
111
111
|
export {
|
|
112
112
|
extractCandidates
|
|
113
113
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-EPWLXXBL.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortenSymbol
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QIXNAB5K.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/bottlenecks.ts
|
|
6
6
|
function bottlenecks(db, opts = {}) {
|
|
@@ -52,4 +52,4 @@ function bottlenecks(db, opts = {}) {
|
|
|
52
52
|
export {
|
|
53
53
|
bottlenecks
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-F7XU27LU.js.map
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import {
|
|
2
2
|
staleAbstractions
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-P4WO3BBW.js";
|
|
4
4
|
import {
|
|
5
5
|
stats
|
|
6
6
|
} from "./chunk-74RFWB5T.js";
|
|
7
|
-
import {
|
|
8
|
-
testCoverageSummary
|
|
9
|
-
} from "./chunk-HZBC7PPD.js";
|
|
10
7
|
import {
|
|
11
8
|
wrapperCandidates
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4JCSOF2O.js";
|
|
13
10
|
import {
|
|
14
11
|
passthroughCandidates
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZEUCXQBN.js";
|
|
16
13
|
import {
|
|
17
14
|
similarAll
|
|
18
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-OIDHN6GD.js";
|
|
19
16
|
import {
|
|
20
17
|
isolated
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-UQEQ6AHX.js";
|
|
22
19
|
import {
|
|
23
20
|
drift
|
|
24
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-7KIMF5PV.js";
|
|
25
22
|
import {
|
|
26
23
|
extractCandidates
|
|
27
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-EPWLXXBL.js";
|
|
28
25
|
import {
|
|
29
26
|
complexityHotspots
|
|
30
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-VIYSWZCO.js";
|
|
31
28
|
import {
|
|
32
29
|
cycles
|
|
33
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-LFJQVJYJ.js";
|
|
34
31
|
import {
|
|
35
32
|
dead
|
|
36
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-LQJUPXQY.js";
|
|
34
|
+
import {
|
|
35
|
+
isEntrySurface
|
|
36
|
+
} from "./chunk-YY4QGUQ5.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:
|
|
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) => !
|
|
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) => !
|
|
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) => !
|
|
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) => !
|
|
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-
|
|
238
|
+
//# sourceMappingURL=chunk-FYYOWQXK.js.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cleanSignature
|
|
3
|
+
} from "./chunk-4TYLS5XX.js";
|
|
4
|
+
import {
|
|
5
|
+
findFirstSymbolMatch,
|
|
6
|
+
getSourceReferenceSites
|
|
7
|
+
} from "./chunk-AXQKUYKF.js";
|
|
8
|
+
import {
|
|
9
|
+
isFunctionLikeSymbol,
|
|
10
|
+
shortenSymbol
|
|
11
|
+
} from "./chunk-QIXNAB5K.js";
|
|
12
|
+
|
|
13
|
+
// src/queries/trace.ts
|
|
14
|
+
function trace(db, symbolPattern) {
|
|
15
|
+
const match = findFirstSymbolMatch(db, symbolPattern);
|
|
16
|
+
if (!match) {
|
|
17
|
+
return { definitions: [], referencedBy: [] };
|
|
18
|
+
}
|
|
19
|
+
const defRows = db.all(
|
|
20
|
+
`SELECT d.relative_path, der.start_line, der.end_line,
|
|
21
|
+
gs.display_name,
|
|
22
|
+
REPLACE(SUBSTR(gs.documentation, INSTR(gs.documentation, '|') + 1), char(10), ' ') AS sig
|
|
23
|
+
FROM global_symbols gs
|
|
24
|
+
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
25
|
+
JOIN documents d ON der.document_id = d.id
|
|
26
|
+
WHERE gs.id = ?
|
|
27
|
+
ORDER BY d.relative_path, der.start_line
|
|
28
|
+
LIMIT 10`,
|
|
29
|
+
match.symbolId
|
|
30
|
+
);
|
|
31
|
+
const definitions = defRows.filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
|
|
32
|
+
relativePath: r.relative_path,
|
|
33
|
+
startLine: r.start_line,
|
|
34
|
+
endLine: r.end_line,
|
|
35
|
+
signature: buildTraceSignature(r.sig, r.display_name, match.symbol)
|
|
36
|
+
}));
|
|
37
|
+
const sourceSites = getSourceReferenceSites(db, match);
|
|
38
|
+
const referencedBy = sourceSites.length > 0 ? sourceSites.filter((site) => !db.isIgnored(site.file)).map((site) => ({
|
|
39
|
+
relativePath: site.file,
|
|
40
|
+
line: site.line,
|
|
41
|
+
enclosingSymbol: site.enclosingSymbol,
|
|
42
|
+
enclosingShort: site.enclosingSymbol ? shortenSymbol(site.enclosingSymbol) : "(top-level)"
|
|
43
|
+
})) : db.all(
|
|
44
|
+
`SELECT DISTINCT d.relative_path, c.start_line AS line,
|
|
45
|
+
(SELECT enc_gs.symbol
|
|
46
|
+
FROM defn_enclosing_ranges enc_der
|
|
47
|
+
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
48
|
+
WHERE enc_der.document_id = d.id
|
|
49
|
+
AND enc_der.start_line <= c.start_line
|
|
50
|
+
AND enc_der.end_line >= c.end_line
|
|
51
|
+
ORDER BY (enc_der.end_line - enc_der.start_line) ASC
|
|
52
|
+
LIMIT 1
|
|
53
|
+
) AS enclosing_symbol
|
|
54
|
+
FROM mentions m
|
|
55
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
56
|
+
JOIN documents d ON c.document_id = d.id
|
|
57
|
+
WHERE m.symbol_id = ?
|
|
58
|
+
AND m.role != 1
|
|
59
|
+
ORDER BY d.relative_path, c.start_line`,
|
|
60
|
+
match.symbolId
|
|
61
|
+
).filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
|
|
62
|
+
relativePath: r.relative_path,
|
|
63
|
+
line: r.line,
|
|
64
|
+
enclosingSymbol: r.enclosing_symbol,
|
|
65
|
+
enclosingShort: r.enclosing_symbol ? shortenSymbol(r.enclosing_symbol) : "(top-level)"
|
|
66
|
+
}));
|
|
67
|
+
return { definitions, referencedBy };
|
|
68
|
+
}
|
|
69
|
+
function buildTraceSignature(signature, displayName, rawSymbol) {
|
|
70
|
+
const cleaned = cleanSignature(signature);
|
|
71
|
+
if (cleaned && !looksBogusSignature(cleaned)) {
|
|
72
|
+
return cleaned;
|
|
73
|
+
}
|
|
74
|
+
const fallback = (displayName ?? "").trim();
|
|
75
|
+
if (fallback) {
|
|
76
|
+
return isFunctionLikeSymbol(rawSymbol) && !fallback.endsWith("()") ? `${fallback}()` : fallback;
|
|
77
|
+
}
|
|
78
|
+
return shortenSymbol(rawSymbol);
|
|
79
|
+
}
|
|
80
|
+
function looksBogusSignature(signature) {
|
|
81
|
+
return signature.startsWith("undefined") || signature.includes("|") || signature.includes("```");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
trace
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=chunk-GEXE2T6I.js.map
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveIndexedFile
|
|
3
|
+
} from "./chunk-AXQKUYKF.js";
|
|
1
4
|
import {
|
|
2
5
|
shortenSymbol
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
4
7
|
|
|
5
8
|
// src/queries/fan.ts
|
|
6
9
|
function fanIn(db, symbolPattern) {
|
|
@@ -21,6 +24,10 @@ function fanIn(db, symbolPattern) {
|
|
|
21
24
|
}));
|
|
22
25
|
}
|
|
23
26
|
function fanOut(db, filePattern) {
|
|
27
|
+
const resolvedFile = resolveIndexedFile(db, filePattern);
|
|
28
|
+
if (!resolvedFile) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
24
31
|
const rows = db.all(
|
|
25
32
|
`SELECT d.relative_path, COUNT(DISTINCT gs.id) AS symbol_count
|
|
26
33
|
FROM mentions m
|
|
@@ -29,12 +36,12 @@ function fanOut(db, filePattern) {
|
|
|
29
36
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
30
37
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
31
38
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
32
|
-
WHERE d.relative_path
|
|
39
|
+
WHERE d.relative_path = ?
|
|
33
40
|
AND m.role != 1
|
|
34
41
|
AND def_d.id != d.id
|
|
35
42
|
GROUP BY d.id
|
|
36
43
|
ORDER BY symbol_count DESC`,
|
|
37
|
-
|
|
44
|
+
resolvedFile
|
|
38
45
|
);
|
|
39
46
|
return rows.filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
|
|
40
47
|
name: r.relative_path,
|
|
@@ -99,4 +106,4 @@ export {
|
|
|
99
106
|
topFanIn,
|
|
100
107
|
topFanOut
|
|
101
108
|
};
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-GJDHTTR2.js.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
findFirstSymbolMatch,
|
|
3
|
+
getCalleeRowsForSymbol,
|
|
4
|
+
getSourceReferenceSites
|
|
5
|
+
} from "./chunk-AXQKUYKF.js";
|
|
6
|
+
import {
|
|
7
|
+
shortenSymbol
|
|
8
|
+
} from "./chunk-QIXNAB5K.js";
|
|
9
|
+
|
|
10
|
+
// src/queries/dataflow.ts
|
|
11
|
+
function dataflow(db, symbolPattern) {
|
|
12
|
+
const match = findFirstSymbolMatch(db, symbolPattern);
|
|
13
|
+
if (!match) return null;
|
|
14
|
+
const defSites = [{
|
|
15
|
+
file: match.relativePath,
|
|
16
|
+
line: match.startLine
|
|
17
|
+
}];
|
|
18
|
+
const sourceUsageSites = getSourceReferenceSites(db, match);
|
|
19
|
+
const usageSites = sourceUsageSites.length > 0 ? sourceUsageSites.map((site) => ({
|
|
20
|
+
file: site.file,
|
|
21
|
+
line: site.line,
|
|
22
|
+
enclosing_symbol: site.enclosingSymbol
|
|
23
|
+
})) : db.all(
|
|
24
|
+
`SELECT d.relative_path AS file, c.start_line AS line,
|
|
25
|
+
(SELECT enc_gs.symbol
|
|
26
|
+
FROM defn_enclosing_ranges enc_der
|
|
27
|
+
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
28
|
+
WHERE enc_der.document_id = d.id
|
|
29
|
+
AND enc_der.start_line <= c.start_line
|
|
30
|
+
AND enc_der.end_line >= c.end_line
|
|
31
|
+
ORDER BY (enc_der.end_line - enc_der.start_line) ASC
|
|
32
|
+
LIMIT 1
|
|
33
|
+
) AS enclosing_symbol
|
|
34
|
+
FROM mentions m
|
|
35
|
+
JOIN chunks c ON m.chunk_id = c.id
|
|
36
|
+
JOIN documents d ON c.document_id = d.id
|
|
37
|
+
WHERE m.symbol_id = ? AND m.role != 1
|
|
38
|
+
${db.pathExclusionsFor("d")}
|
|
39
|
+
ORDER BY d.relative_path, c.start_line`,
|
|
40
|
+
match.symbolId
|
|
41
|
+
);
|
|
42
|
+
const normalizedUsageSites = usageSites.filter((site) => !db.isIgnored(site.file)).map((site) => ({
|
|
43
|
+
file: site.file,
|
|
44
|
+
line: site.line,
|
|
45
|
+
enclosingSymbol: site.enclosing_symbol ?? "(top-level)",
|
|
46
|
+
enclosingShort: site.enclosing_symbol ? shortenSymbol(site.enclosing_symbol) : "(top-level)"
|
|
47
|
+
}));
|
|
48
|
+
const producers = uniqueSymbolRows(getCalleeRowsForSymbol(db, match, { limit: 30 }).map((row) => ({
|
|
49
|
+
symbol: row.symbol,
|
|
50
|
+
file: row.file
|
|
51
|
+
})));
|
|
52
|
+
const consumers = uniqueSymbolRows(
|
|
53
|
+
normalizedUsageSites.map((site) => ({
|
|
54
|
+
symbol: site.enclosingSymbol === "(top-level)" ? site.file : site.enclosingSymbol,
|
|
55
|
+
file: site.file
|
|
56
|
+
}))
|
|
57
|
+
);
|
|
58
|
+
return {
|
|
59
|
+
symbol: match.symbol,
|
|
60
|
+
shortName: shortenSymbol(match.symbol),
|
|
61
|
+
relativePath: match.relativePath,
|
|
62
|
+
definitionSites: defSites.filter((s) => !db.isIgnored(s.file)),
|
|
63
|
+
usageSites: normalizedUsageSites,
|
|
64
|
+
producers: producers.filter((p) => !db.isIgnored(p.file)).map((p) => ({ symbol: p.symbol, shortName: shortenSymbol(p.symbol), file: p.file })),
|
|
65
|
+
consumers: consumers.filter((c) => !db.isIgnored(c.file)).map((c) => ({
|
|
66
|
+
symbol: c.symbol,
|
|
67
|
+
shortName: c.symbol === c.file ? "(top-level)" : shortenSymbol(c.symbol),
|
|
68
|
+
file: c.file
|
|
69
|
+
}))
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function uniqueSymbolRows(rows) {
|
|
73
|
+
const seen = /* @__PURE__ */ new Set();
|
|
74
|
+
const unique = [];
|
|
75
|
+
for (const row of rows) {
|
|
76
|
+
const key = `${row.symbol}|${row.file}`;
|
|
77
|
+
if (seen.has(key)) continue;
|
|
78
|
+
seen.add(key);
|
|
79
|
+
unique.push(row);
|
|
80
|
+
}
|
|
81
|
+
return unique;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
dataflow
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=chunk-GSH2FPKV.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
leafName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QIXNAB5K.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/methods.ts
|
|
6
6
|
function methods(db, className) {
|
|
@@ -25,4 +25,4 @@ function methods(db, className) {
|
|
|
25
25
|
export {
|
|
26
26
|
methods
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-GU2H5QRN.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findFirstSymbolMatch,
|
|
3
3
|
getCalleeRowsForSymbol
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AXQKUYKF.js";
|
|
5
5
|
import {
|
|
6
6
|
shortenSymbol
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QIXNAB5K.js";
|
|
8
8
|
|
|
9
9
|
// src/queries/convergence.ts
|
|
10
10
|
function convergence(db, symbolPatternA, symbolPatternB) {
|
|
@@ -32,7 +32,11 @@ function convergence(db, symbolPatternA, symbolPatternB) {
|
|
|
32
32
|
const union = /* @__PURE__ */ new Set([...calleesA, ...calleesB]);
|
|
33
33
|
const similarity = union.size > 0 ? shared.length / union.size : 0;
|
|
34
34
|
let strategy;
|
|
35
|
-
if (
|
|
35
|
+
if (union.size === 0) {
|
|
36
|
+
strategy = "Neither function calls other tracked symbols. There is no callee-pattern evidence for consolidation; inspect the source bodies directly.";
|
|
37
|
+
} else if (shared.length === 0) {
|
|
38
|
+
strategy = "These functions do not share any callees. They are not a callee-based consolidation candidate.";
|
|
39
|
+
} else if (uniqueA.length === 0 && uniqueB.length === 0) {
|
|
36
40
|
strategy = "These functions have identical callee sets. One can replace the other directly.";
|
|
37
41
|
} else if (uniqueA.length === 0) {
|
|
38
42
|
strategy = `A is a subset of B. A can be replaced by calling B (B does everything A does plus more).`;
|
|
@@ -69,4 +73,4 @@ function convergence(db, symbolPatternA, symbolPatternB) {
|
|
|
69
73
|
export {
|
|
70
74
|
convergence
|
|
71
75
|
};
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-HJZUSUPU.js.map
|