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.
- package/README.md +16 -43
- package/dist/chunk-2UELLEBI.js +1 -0
- package/dist/chunk-34JPTNRN.js +601 -0
- package/dist/{chunk-NDSQYIWT.js → chunk-3566TKJ5.js} +3 -3
- package/dist/{chunk-LB7OS35Q.js → chunk-4ACRRQC4.js} +8 -4
- package/dist/{chunk-3E2X7RIE.js → chunk-4BQFSNFI.js} +10 -6
- package/dist/{chunk-BP2ATLK2.js → chunk-6QSHLFSL.js} +4 -4
- package/dist/{chunk-5FGUEU7N.js → chunk-6WVR5K46.js} +18 -10
- package/dist/{chunk-XFXDXEUN.js → chunk-74RFWB5T.js} +2 -2
- package/dist/{chunk-MBVNHJVN.js → chunk-75RQSBTK.js} +2 -2
- package/dist/{chunk-YZAA4LYG.js → chunk-7HK5ZLOE.js} +30 -48
- package/dist/{chunk-T6ARFSBZ.js → chunk-7JFZSOJ7.js} +7 -7
- package/dist/{chunk-6SXADWLW.js → chunk-AKMBBKWV.js} +2 -2
- package/dist/{chunk-ZJRYBOEE.js → chunk-AMNISGYR.js} +5 -5
- package/dist/{chunk-CM454WL3.js → chunk-BFLULBEU.js} +3 -3
- package/dist/{chunk-Z73NYSBZ.js → chunk-CU62ZDHI.js} +2 -2
- package/dist/{chunk-TBP6BICL.js → chunk-DY4AFG2W.js} +13 -11
- package/dist/{chunk-2QZ23IBN.js → chunk-F7XU27LU.js} +4 -4
- package/dist/{chunk-KCBMVQL5.js → chunk-GPJVPT3U.js} +2 -2
- package/dist/{chunk-NUZ4OMU3.js → chunk-GU2H5QRN.js} +2 -2
- package/dist/{chunk-TSPZOMHC.js → chunk-H6WCPKCX.js} +6 -3
- package/dist/{chunk-KVSW5KYP.js → chunk-HDSRORNV.js} +4 -4
- package/dist/{chunk-LUSIFBXO.js → chunk-HMYJJ3HY.js} +9 -6
- package/dist/chunk-IJKLB2JW.js +69 -0
- package/dist/{chunk-6NBLIDF4.js → chunk-ITZ3DDOG.js} +2 -2
- package/dist/{chunk-GTILYBH6.js → chunk-IXPHLF6K.js} +6 -6
- package/dist/{chunk-BFSCMC22.js → chunk-KBOQX573.js} +3 -3
- package/dist/{chunk-FUHJCHS4.js → chunk-LLMPAG56.js} +95 -32
- package/dist/{chunk-FFSWWE5O.js → chunk-LTJC5ZQL.js} +3 -3
- package/dist/{chunk-LAWMH22O.js → chunk-M3NPW3FC.js} +2 -2
- package/dist/{chunk-VRUJH4BO.js → chunk-M4QGEKKD.js} +6 -28
- package/dist/{chunk-7OZPA5OO.js → chunk-MVH45PYK.js} +21 -41
- package/dist/chunk-N4C3H7LH.js +37 -0
- package/dist/chunk-NG5F43OU.js +200 -0
- package/dist/{chunk-6VJ6Q7IE.js → chunk-NVIIM34O.js} +4 -4
- package/dist/{chunk-GJFURBEW.js → chunk-ORINICIZ.js} +4 -4
- package/dist/{chunk-TDNNOR6D.js → chunk-PMJKOXOT.js} +7 -7
- package/dist/{chunk-QOV2R2WT.js → chunk-QIXNAB5K.js} +42 -2
- package/dist/{chunk-JKP5GH6T.js → chunk-R2I3M5B4.js} +2 -2
- package/dist/{chunk-36OMT7ZJ.js → chunk-R56FJU3E.js} +35 -14
- package/dist/{chunk-VZ7AMAFL.js → chunk-RFMT7UAZ.js} +3 -3
- package/dist/{chunk-SEFSL2GF.js → chunk-TOIEB3LG.js} +2 -2
- package/dist/chunk-VO4QI3LS.js +84 -0
- package/dist/{chunk-EMDQWNYR.js → chunk-WVK7AASK.js} +8 -8
- package/dist/{chunk-5WTJAXY2.js → chunk-Y3M323OX.js} +2 -2
- package/dist/{chunk-DCKMSTJ4.js → chunk-Y4JFVQ7C.js} +2 -2
- package/dist/{chunk-UNTPVD36.js → chunk-YAFWL3RA.js} +4 -4
- package/dist/{chunk-FGXRVW7G.js → chunk-YZ6L7GFO.js} +2 -2
- package/dist/cli.js +1401 -717
- package/dist/{db-BxaevAyc.d.ts → db-BHYam4BK.d.ts} +7 -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 +2 -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 +1 -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/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 +2 -2
- package/dist/queries/files.d.ts +1 -1
- package/dist/queries/health.d.ts +1 -1
- package/dist/queries/health.js +15 -15
- 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 +2 -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 +1 -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 +1 -1
- 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/stats.js +1 -1
- package/dist/queries/surface.d.ts +1 -1
- package/dist/queries/surface.js +2 -2
- package/dist/queries/symbols.d.ts +1 -1
- package/dist/queries/symbols.js +2 -2
- package/dist/queries/system.d.ts +1 -1
- package/dist/queries/system.js +2 -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-2QZ23IBN.js.map +0 -1
- package/dist/chunk-36OMT7ZJ.js.map +0 -1
- package/dist/chunk-3E2X7RIE.js.map +0 -1
- package/dist/chunk-3UOUTZQT.js +0 -45
- package/dist/chunk-3UOUTZQT.js.map +0 -1
- package/dist/chunk-3ZZJVBIO.js +0 -88
- package/dist/chunk-3ZZJVBIO.js.map +0 -1
- package/dist/chunk-4TYLS5XX.js.map +0 -1
- package/dist/chunk-5FGUEU7N.js.map +0 -1
- package/dist/chunk-5WTJAXY2.js.map +0 -1
- package/dist/chunk-6NBLIDF4.js.map +0 -1
- package/dist/chunk-6SXADWLW.js.map +0 -1
- package/dist/chunk-6VJ6Q7IE.js.map +0 -1
- package/dist/chunk-7OZPA5OO.js.map +0 -1
- package/dist/chunk-BEPIEVLR.js +0 -76
- package/dist/chunk-BEPIEVLR.js.map +0 -1
- package/dist/chunk-BFSCMC22.js.map +0 -1
- package/dist/chunk-BP2ATLK2.js.map +0 -1
- package/dist/chunk-CM454WL3.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-DVWGWHFW.js +0 -99
- package/dist/chunk-DVWGWHFW.js.map +0 -1
- package/dist/chunk-EMDQWNYR.js.map +0 -1
- package/dist/chunk-FFSWWE5O.js.map +0 -1
- package/dist/chunk-FGXRVW7G.js.map +0 -1
- package/dist/chunk-FUHJCHS4.js.map +0 -1
- package/dist/chunk-GJFURBEW.js.map +0 -1
- package/dist/chunk-GTILYBH6.js.map +0 -1
- package/dist/chunk-JJP7KQND.js +0 -1
- package/dist/chunk-JJP7KQND.js.map +0 -1
- package/dist/chunk-JKP5GH6T.js.map +0 -1
- package/dist/chunk-KCBMVQL5.js.map +0 -1
- package/dist/chunk-KVSW5KYP.js.map +0 -1
- package/dist/chunk-LAWMH22O.js.map +0 -1
- package/dist/chunk-LB7OS35Q.js.map +0 -1
- package/dist/chunk-LUSIFBXO.js.map +0 -1
- package/dist/chunk-MBVNHJVN.js.map +0 -1
- package/dist/chunk-MGNMHKX3.js.map +0 -1
- package/dist/chunk-N5KEREIA.js.map +0 -1
- package/dist/chunk-NDSQYIWT.js.map +0 -1
- package/dist/chunk-NUZ4OMU3.js.map +0 -1
- package/dist/chunk-QOV2R2WT.js.map +0 -1
- package/dist/chunk-SEFSL2GF.js.map +0 -1
- package/dist/chunk-T6ARFSBZ.js.map +0 -1
- package/dist/chunk-TBP6BICL.js.map +0 -1
- package/dist/chunk-TDNNOR6D.js.map +0 -1
- package/dist/chunk-TSPZOMHC.js.map +0 -1
- package/dist/chunk-UNTPVD36.js.map +0 -1
- package/dist/chunk-VRUJH4BO.js.map +0 -1
- package/dist/chunk-VZ7AMAFL.js.map +0 -1
- package/dist/chunk-XFXDXEUN.js.map +0 -1
- package/dist/chunk-YZAA4LYG.js.map +0 -1
- package/dist/chunk-Z73NYSBZ.js.map +0 -1
- package/dist/chunk-ZJRYBOEE.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,200 @@
|
|
|
1
|
+
// src/reindex/install.ts
|
|
2
|
+
import { execFileSync } from "child_process";
|
|
3
|
+
import { platform } from "os";
|
|
4
|
+
var IS_WINDOWS = platform() === "win32";
|
|
5
|
+
function isBinaryAvailable(name) {
|
|
6
|
+
const cmd = IS_WINDOWS ? "where" : "which";
|
|
7
|
+
try {
|
|
8
|
+
execFileSync(cmd, [name], { stdio: "pipe" });
|
|
9
|
+
return true;
|
|
10
|
+
} catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function getBinaryCandidates(config) {
|
|
15
|
+
return [config.indexerBinary, ...config.binaryAliases ?? []];
|
|
16
|
+
}
|
|
17
|
+
function describeIndexerBinary(config) {
|
|
18
|
+
const candidates = getBinaryCandidates(config);
|
|
19
|
+
return candidates.length === 1 ? candidates[0] : candidates.join(" or ");
|
|
20
|
+
}
|
|
21
|
+
function resolveIndexerBinary(config) {
|
|
22
|
+
for (const candidate of getBinaryCandidates(config)) {
|
|
23
|
+
if (isBinaryAvailable(candidate)) {
|
|
24
|
+
return candidate;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function isIndexerInstalled(config) {
|
|
30
|
+
return resolveIndexerBinary(config) !== null;
|
|
31
|
+
}
|
|
32
|
+
function tryInstallIndexer(config, onStatus) {
|
|
33
|
+
const methods = config.installMethods;
|
|
34
|
+
const binaryLabel = describeIndexerBinary(config);
|
|
35
|
+
if (!methods?.length) {
|
|
36
|
+
onStatus(`No auto-install method available for ${binaryLabel}.`);
|
|
37
|
+
if (config.installUrl) {
|
|
38
|
+
onStatus(`Install manually from: ${config.installUrl}`);
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
for (const method of methods) {
|
|
43
|
+
if (!isBinaryAvailable(method.prerequisite)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
onStatus(`Installing ${binaryLabel} via ${method.label}...`);
|
|
47
|
+
try {
|
|
48
|
+
execFileSync(method.binary, method.args, {
|
|
49
|
+
stdio: "inherit",
|
|
50
|
+
timeout: 3e5,
|
|
51
|
+
env: process.env
|
|
52
|
+
});
|
|
53
|
+
const resolvedBinary = resolveIndexerBinary(config);
|
|
54
|
+
if (resolvedBinary) {
|
|
55
|
+
const resolutionNote = resolvedBinary === config.indexerBinary ? "" : ` (using ${resolvedBinary})`;
|
|
56
|
+
onStatus(`Successfully installed ${binaryLabel} via ${method.label}${resolutionNote}`);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
onStatus(`${method.label} command completed but ${binaryLabel} was not found on PATH`);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
62
|
+
onStatus(`${method.label} install failed: ${msg}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
onStatus(`Could not auto-install ${binaryLabel}.`);
|
|
66
|
+
if (config.installUrl) {
|
|
67
|
+
onStatus(`Install manually from: ${config.installUrl}`);
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/scip-cli.ts
|
|
73
|
+
import { execFileSync as execFileSync2 } from "child_process";
|
|
74
|
+
import { platform as platform2, arch } from "os";
|
|
75
|
+
var IS_WINDOWS2 = platform2() === "win32";
|
|
76
|
+
var SCIP_VERSION = "v0.7.0";
|
|
77
|
+
function isScipInstalled() {
|
|
78
|
+
try {
|
|
79
|
+
const cmd = IS_WINDOWS2 ? "where" : "which";
|
|
80
|
+
execFileSync2(cmd, ["scip"], { stdio: "pipe" });
|
|
81
|
+
return true;
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function getScipVersion() {
|
|
87
|
+
try {
|
|
88
|
+
const output = execFileSync2("scip", ["--version"], { stdio: "pipe" }).toString().trim();
|
|
89
|
+
return output;
|
|
90
|
+
} catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function getScipDownloadUrl() {
|
|
95
|
+
const os = platform2();
|
|
96
|
+
const cpu = arch();
|
|
97
|
+
let osName;
|
|
98
|
+
let archName;
|
|
99
|
+
let ext;
|
|
100
|
+
switch (os) {
|
|
101
|
+
case "darwin":
|
|
102
|
+
osName = "darwin";
|
|
103
|
+
ext = "tar.gz";
|
|
104
|
+
break;
|
|
105
|
+
case "linux":
|
|
106
|
+
osName = "linux";
|
|
107
|
+
ext = "tar.gz";
|
|
108
|
+
break;
|
|
109
|
+
case "win32":
|
|
110
|
+
osName = "windows";
|
|
111
|
+
ext = "zip";
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
switch (cpu) {
|
|
117
|
+
case "arm64":
|
|
118
|
+
archName = "arm64";
|
|
119
|
+
break;
|
|
120
|
+
case "x64":
|
|
121
|
+
archName = "amd64";
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
const filename = `scip-${osName}-${archName}.${ext}`;
|
|
127
|
+
const url = `https://github.com/sourcegraph/scip/releases/download/${SCIP_VERSION}/${filename}`;
|
|
128
|
+
return { url, filename };
|
|
129
|
+
}
|
|
130
|
+
function printScipInstallInstructions() {
|
|
131
|
+
const download = getScipDownloadUrl();
|
|
132
|
+
console.log("\nThe `scip` CLI is required but not found on PATH.\n");
|
|
133
|
+
if (platform2() === "darwin") {
|
|
134
|
+
console.log("Install via Homebrew:");
|
|
135
|
+
console.log(" brew install sourcegraph/scip/scip\n");
|
|
136
|
+
console.log("Or download manually:");
|
|
137
|
+
} else {
|
|
138
|
+
console.log("Download from:");
|
|
139
|
+
}
|
|
140
|
+
if (download) {
|
|
141
|
+
console.log(` ${download.url}
|
|
142
|
+
`);
|
|
143
|
+
} else {
|
|
144
|
+
console.log(` https://github.com/sourcegraph/scip/releases/tag/${SCIP_VERSION}
|
|
145
|
+
`);
|
|
146
|
+
}
|
|
147
|
+
console.log("After installing, ensure `scip` is on your PATH and run `scip-query reindex`.");
|
|
148
|
+
}
|
|
149
|
+
function tryInstallScipCli(onStatus) {
|
|
150
|
+
if (platform2() === "darwin" && isBinaryAvailable("brew")) {
|
|
151
|
+
onStatus("Installing scip CLI via Homebrew...");
|
|
152
|
+
try {
|
|
153
|
+
execFileSync2("brew", ["install", "sourcegraph/scip/scip"], {
|
|
154
|
+
stdio: "inherit",
|
|
155
|
+
timeout: 3e5,
|
|
156
|
+
env: process.env
|
|
157
|
+
});
|
|
158
|
+
if (isBinaryAvailable("scip")) {
|
|
159
|
+
onStatus("Successfully installed scip CLI via Homebrew");
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
} catch (err) {
|
|
163
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
164
|
+
onStatus(`Homebrew install failed: ${msg}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (isBinaryAvailable("go")) {
|
|
168
|
+
onStatus("Installing scip CLI via go install...");
|
|
169
|
+
try {
|
|
170
|
+
execFileSync2("go", ["install", "github.com/sourcegraph/scip/cmd/scip@latest"], {
|
|
171
|
+
stdio: "inherit",
|
|
172
|
+
timeout: 3e5,
|
|
173
|
+
env: process.env
|
|
174
|
+
});
|
|
175
|
+
if (isBinaryAvailable("scip")) {
|
|
176
|
+
onStatus("Successfully installed scip CLI via go install");
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
} catch (err) {
|
|
180
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
181
|
+
onStatus(`go install failed: ${msg}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
onStatus("Could not auto-install scip CLI.");
|
|
185
|
+
onStatus("Install manually from: https://github.com/sourcegraph/scip/releases");
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export {
|
|
190
|
+
isBinaryAvailable,
|
|
191
|
+
describeIndexerBinary,
|
|
192
|
+
resolveIndexerBinary,
|
|
193
|
+
isIndexerInstalled,
|
|
194
|
+
tryInstallIndexer,
|
|
195
|
+
isScipInstalled,
|
|
196
|
+
getScipVersion,
|
|
197
|
+
printScipInstallInstructions,
|
|
198
|
+
tryInstallScipCli
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=chunk-NG5F43OU.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findFirstSymbolMatch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/affected.ts
|
|
9
9
|
function affected(db, symbolPattern, opts = {}) {
|
|
@@ -33,7 +33,7 @@ function affected(db, symbolPattern, opts = {}) {
|
|
|
33
33
|
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
34
34
|
JOIN documents enc_d ON enc_der.document_id = enc_d.id
|
|
35
35
|
WHERE m.symbol_id IN (${placeholders})
|
|
36
|
-
AND m.role
|
|
36
|
+
AND m.role != 1
|
|
37
37
|
AND enc_gs.id NOT IN (${placeholders})
|
|
38
38
|
${db.symbolNoiseFor("enc_gs")}
|
|
39
39
|
${db.pathExclusionsFor("enc_d")}
|
|
@@ -62,4 +62,4 @@ function affected(db, symbolPattern, opts = {}) {
|
|
|
62
62
|
export {
|
|
63
63
|
affected
|
|
64
64
|
};
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-NVIIM34O.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
testFileExclusionSql
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/stale-abstractions.ts
|
|
9
9
|
function staleAbstractions(db, opts) {
|
|
@@ -21,7 +21,7 @@ function staleAbstractions(db, opts) {
|
|
|
21
21
|
FROM mentions ref_m
|
|
22
22
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
23
23
|
WHERE ref_m.symbol_id = gs.id
|
|
24
|
-
AND ref_m.role
|
|
24
|
+
AND ref_m.role != 1
|
|
25
25
|
AND ref_c.document_id != der.document_id
|
|
26
26
|
) AS consumers
|
|
27
27
|
FROM global_symbols gs
|
|
@@ -61,4 +61,4 @@ function staleAbstractions(db, opts) {
|
|
|
61
61
|
export {
|
|
62
62
|
staleAbstractions
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-ORINICIZ.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
testFileExclusionSql
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/wrapper-candidates.ts
|
|
9
9
|
function wrapperCandidates(db, opts) {
|
|
@@ -28,7 +28,7 @@ function wrapperCandidates(db, opts) {
|
|
|
28
28
|
AND ref_c.end_line <= caller_der.end_line
|
|
29
29
|
JOIN global_symbols caller_gs ON caller_der.symbol_id = caller_gs.id
|
|
30
30
|
WHERE ref_m.symbol_id = gs.id
|
|
31
|
-
AND ref_m.role
|
|
31
|
+
AND ref_m.role != 1
|
|
32
32
|
AND ref_c.document_id != der.document_id
|
|
33
33
|
LIMIT 1
|
|
34
34
|
) AS caller_symbol,
|
|
@@ -45,11 +45,11 @@ function wrapperCandidates(db, opts) {
|
|
|
45
45
|
AND ref_c2.start_line >= caller_der2.start_line
|
|
46
46
|
AND ref_c2.end_line <= caller_der2.end_line
|
|
47
47
|
WHERE ref_m2.symbol_id = gs.id
|
|
48
|
-
AND ref_m2.role
|
|
48
|
+
AND ref_m2.role != 1
|
|
49
49
|
AND ref_c2.document_id != der.document_id
|
|
50
50
|
LIMIT 1
|
|
51
51
|
)
|
|
52
|
-
AND caller_ref_m.role
|
|
52
|
+
AND caller_ref_m.role != 1
|
|
53
53
|
) AS caller_fan_in
|
|
54
54
|
FROM global_symbols gs
|
|
55
55
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
@@ -69,7 +69,7 @@ function wrapperCandidates(db, opts) {
|
|
|
69
69
|
FROM mentions ref_m
|
|
70
70
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
71
71
|
WHERE ref_m.symbol_id = gs.id
|
|
72
|
-
AND ref_m.role
|
|
72
|
+
AND ref_m.role != 1
|
|
73
73
|
AND ref_c.document_id != der.document_id
|
|
74
74
|
) = 1
|
|
75
75
|
) WHERE caller_symbol IS NOT NULL AND caller_fan_in > 3
|
|
@@ -94,4 +94,4 @@ function wrapperCandidates(db, opts) {
|
|
|
94
94
|
export {
|
|
95
95
|
wrapperCandidates
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-PMJKOXOT.js.map
|
|
@@ -161,10 +161,50 @@ function leafName(raw) {
|
|
|
161
161
|
const last = sym.descriptors[sym.descriptors.length - 1];
|
|
162
162
|
return last.name;
|
|
163
163
|
}
|
|
164
|
+
function leafSuffix(raw) {
|
|
165
|
+
const parsed = parseSymbol(raw);
|
|
166
|
+
if ("kind" in parsed && parsed.kind === "local") {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const sym = parsed;
|
|
170
|
+
const last = sym.descriptors[sym.descriptors.length - 1];
|
|
171
|
+
return last?.suffix ?? null;
|
|
172
|
+
}
|
|
173
|
+
function isFunctionLikeSymbol(raw) {
|
|
174
|
+
const suffix = leafSuffix(raw);
|
|
175
|
+
return suffix === "method" || suffix === "term";
|
|
176
|
+
}
|
|
177
|
+
function isModuleLikeSymbol(raw) {
|
|
178
|
+
return leafSuffix(raw) === "namespace";
|
|
179
|
+
}
|
|
180
|
+
function isDirectChildSymbol(parentRaw, candidateRaw) {
|
|
181
|
+
const parent = parseSymbol(parentRaw);
|
|
182
|
+
const candidate = parseSymbol(candidateRaw);
|
|
183
|
+
if ("kind" in parent || "kind" in candidate) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const parentDescriptors = parent.descriptors;
|
|
187
|
+
const candidateDescriptors = candidate.descriptors;
|
|
188
|
+
if (candidateDescriptors.length !== parentDescriptors.length + 1) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
for (let i = 0; i < parentDescriptors.length; i++) {
|
|
192
|
+
const parentDesc = parentDescriptors[i];
|
|
193
|
+
const candidateDesc = candidateDescriptors[i];
|
|
194
|
+
if (parentDesc.name !== candidateDesc.name || parentDesc.suffix !== candidateDesc.suffix) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
164
200
|
|
|
165
201
|
export {
|
|
166
202
|
parseSymbol,
|
|
167
203
|
shortenSymbol,
|
|
168
|
-
leafName
|
|
204
|
+
leafName,
|
|
205
|
+
leafSuffix,
|
|
206
|
+
isFunctionLikeSymbol,
|
|
207
|
+
isModuleLikeSymbol,
|
|
208
|
+
isDirectChildSymbol
|
|
169
209
|
};
|
|
170
|
-
//# sourceMappingURL=chunk-
|
|
210
|
+
//# sourceMappingURL=chunk-QIXNAB5K.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFileDepGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/similar-chains.ts
|
|
6
6
|
function similarChains(db, opts = {}) {
|
|
@@ -210,4 +210,4 @@ function isSubChain(sub, full) {
|
|
|
210
210
|
export {
|
|
211
211
|
similarChains
|
|
212
212
|
};
|
|
213
|
-
//# sourceMappingURL=chunk-
|
|
213
|
+
//# sourceMappingURL=chunk-R2I3M5B4.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFileDepGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/drift.ts
|
|
6
6
|
import path from "path";
|
|
@@ -10,9 +10,10 @@ function drift(db, opts) {
|
|
|
10
10
|
const symbolRefs = buildSymbolRefGraph(db, scope);
|
|
11
11
|
const results = [];
|
|
12
12
|
for (const [file, deps] of depGraph) {
|
|
13
|
-
if (
|
|
13
|
+
if (shouldSkipDriftFile(file)) continue;
|
|
14
14
|
const referencedFiles = symbolRefs.get(file) ?? /* @__PURE__ */ new Set();
|
|
15
15
|
for (const dep of deps) {
|
|
16
|
+
if (shouldSkipDriftFile(dep)) continue;
|
|
16
17
|
if (!referencedFiles.has(dep)) {
|
|
17
18
|
if (isLikelyTypeOnlyDep(dep)) continue;
|
|
18
19
|
results.push({
|
|
@@ -26,10 +27,11 @@ function drift(db, opts) {
|
|
|
26
27
|
}
|
|
27
28
|
const layerRules = inferLayerRules(depGraph);
|
|
28
29
|
for (const [file, deps] of depGraph) {
|
|
29
|
-
if (
|
|
30
|
-
const fileLayer =
|
|
30
|
+
if (shouldSkipDriftFile(file)) continue;
|
|
31
|
+
const fileLayer = getArchitecturalLayer(file);
|
|
31
32
|
for (const dep of deps) {
|
|
32
|
-
|
|
33
|
+
if (shouldSkipDriftFile(dep)) continue;
|
|
34
|
+
const depLayer = getArchitecturalLayer(dep);
|
|
33
35
|
if (fileLayer === depLayer) continue;
|
|
34
36
|
const violation = layerRules.get(`${fileLayer}->${depLayer}`);
|
|
35
37
|
if (violation === "violation") {
|
|
@@ -53,14 +55,16 @@ function drift(db, opts) {
|
|
|
53
55
|
if (files.length < 3) continue;
|
|
54
56
|
const depFreq = /* @__PURE__ */ new Map();
|
|
55
57
|
for (const file of files) {
|
|
56
|
-
if (
|
|
58
|
+
if (shouldSkipDriftFile(file)) continue;
|
|
57
59
|
for (const dep of depGraph.get(file) ?? []) {
|
|
60
|
+
if (shouldSkipDriftFile(dep)) continue;
|
|
58
61
|
depFreq.set(dep, (depFreq.get(dep) ?? 0) + 1);
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
64
|
for (const file of files) {
|
|
62
|
-
if (
|
|
65
|
+
if (shouldSkipDriftFile(file)) continue;
|
|
63
66
|
for (const dep of depGraph.get(file) ?? []) {
|
|
67
|
+
if (shouldSkipDriftFile(dep)) continue;
|
|
64
68
|
if ((depFreq.get(dep) ?? 0) === 1) {
|
|
65
69
|
if (path.dirname(dep) === dir) continue;
|
|
66
70
|
results.push({
|
|
@@ -91,7 +95,7 @@ function buildSymbolRefGraph(db, scope) {
|
|
|
91
95
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
92
96
|
JOIN documents d2 ON der.document_id = d2.id
|
|
93
97
|
WHERE d1.id != d2.id
|
|
94
|
-
AND m.role
|
|
98
|
+
AND m.role != 1
|
|
95
99
|
${db.pathExclusionsFor("d1", "d2")}
|
|
96
100
|
${scopeFilter}`
|
|
97
101
|
);
|
|
@@ -107,10 +111,12 @@ function inferLayerRules(depGraph) {
|
|
|
107
111
|
const layerEdges = /* @__PURE__ */ new Map();
|
|
108
112
|
const layerSet = /* @__PURE__ */ new Set();
|
|
109
113
|
for (const [file, deps] of depGraph) {
|
|
110
|
-
|
|
114
|
+
if (shouldSkipDriftFile(file)) continue;
|
|
115
|
+
const fromLayer = getArchitecturalLayer(file);
|
|
111
116
|
layerSet.add(fromLayer);
|
|
112
117
|
for (const dep of deps) {
|
|
113
|
-
|
|
118
|
+
if (shouldSkipDriftFile(dep)) continue;
|
|
119
|
+
const toLayer = getArchitecturalLayer(dep);
|
|
114
120
|
if (fromLayer === toLayer) continue;
|
|
115
121
|
layerSet.add(toLayer);
|
|
116
122
|
const key = `${fromLayer}->${toLayer}`;
|
|
@@ -123,13 +129,23 @@ function inferLayerRules(depGraph) {
|
|
|
123
129
|
}
|
|
124
130
|
return rules;
|
|
125
131
|
}
|
|
126
|
-
function
|
|
127
|
-
const
|
|
128
|
-
|
|
132
|
+
function getArchitecturalLayer(filePath) {
|
|
133
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
134
|
+
const parts = normalized.split("/").filter(Boolean);
|
|
135
|
+
if (parts.length <= 1) {
|
|
136
|
+
return "(root)";
|
|
137
|
+
}
|
|
138
|
+
if (parts.length >= 3 && ["src", "lib", "app", "server", "client"].includes(parts[0])) {
|
|
139
|
+
return `${parts[0]}/${parts[1]}`;
|
|
140
|
+
}
|
|
141
|
+
return parts[0];
|
|
129
142
|
}
|
|
130
143
|
function isLikelyTypeOnlyDep(dep) {
|
|
131
144
|
return dep.includes("types") || dep.endsWith(".d.ts");
|
|
132
145
|
}
|
|
146
|
+
function shouldSkipDriftFile(filePath) {
|
|
147
|
+
return isStructuralRole(path.basename(filePath)) || isTestLikePath(filePath);
|
|
148
|
+
}
|
|
133
149
|
function isStructuralRole(basename) {
|
|
134
150
|
if (basename === "index.ts" || basename === "index.js") return true;
|
|
135
151
|
if (basename === "cli.ts" || basename === "main.ts" || basename === "main.rs") return true;
|
|
@@ -137,8 +153,13 @@ function isStructuralRole(basename) {
|
|
|
137
153
|
if (basename === "health.ts" || basename === "health.js") return true;
|
|
138
154
|
return false;
|
|
139
155
|
}
|
|
156
|
+
function isTestLikePath(filePath) {
|
|
157
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
158
|
+
const basename = path.basename(normalized);
|
|
159
|
+
return normalized.includes("/__tests__/") || normalized.includes("/tests/") || normalized.includes("/test/") || /\.(test|spec)\.[A-Za-z0-9]+$/.test(basename) || /_(test|spec)\.[A-Za-z0-9]+$/.test(basename) || /^test[_-]/.test(basename) || /^test\./.test(basename);
|
|
160
|
+
}
|
|
140
161
|
|
|
141
162
|
export {
|
|
142
163
|
drift
|
|
143
164
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
165
|
+
//# sourceMappingURL=chunk-R56FJU3E.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findFirstSymbolMatch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/code.ts
|
|
9
9
|
import { readFileSync } from "fs";
|
|
@@ -73,4 +73,4 @@ function readFileRange(db, filePath, startLine, endLine, context) {
|
|
|
73
73
|
export {
|
|
74
74
|
code
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-RFMT7UAZ.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/similar-signatures.ts
|
|
6
6
|
function similarSignatures(db, opts = {}) {
|
|
@@ -75,4 +75,4 @@ function normalizeSignature(raw) {
|
|
|
75
75
|
export {
|
|
76
76
|
similarSignatures
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-TOIEB3LG.js.map
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildFileDepGraph
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
|
+
|
|
5
|
+
// src/entry-surfaces.ts
|
|
6
|
+
var liveBarrelCache = /* @__PURE__ */ new WeakMap();
|
|
7
|
+
function normalizePath(path) {
|
|
8
|
+
return path.replace(/\\/g, "/");
|
|
9
|
+
}
|
|
10
|
+
function isBarrelFile(path) {
|
|
11
|
+
const normalized = normalizePath(path);
|
|
12
|
+
return normalized === "index.ts" || normalized === "index.js" || normalized.endsWith("/index.ts") || normalized.endsWith("/index.js") || normalized.endsWith("/mod.rs") || normalized.endsWith("/__init__.py");
|
|
13
|
+
}
|
|
14
|
+
function isWorkerEntrySurface(path) {
|
|
15
|
+
const normalized = normalizePath(path);
|
|
16
|
+
return /(^|\/)[^/]*worker\.(ts|js|mjs|cjs|rs|py|go)$/.test(normalized);
|
|
17
|
+
}
|
|
18
|
+
function isStructuralEntrySurface(path) {
|
|
19
|
+
const normalized = normalizePath(path);
|
|
20
|
+
const segments = normalized.split("/");
|
|
21
|
+
const basename = segments[segments.length - 1] ?? normalized;
|
|
22
|
+
if (basename === "cli.ts" || basename === "cli.js" || basename === "postinstall.ts" || basename === "postinstall.js" || basename === "main.ts" || basename === "main.js" || basename === "main.rs" || basename === "main.go" || basename === "main.py") {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (basename === "index.ts" || basename === "index.js") {
|
|
26
|
+
return segments.length <= 2;
|
|
27
|
+
}
|
|
28
|
+
return normalized.endsWith("/mod.rs") || normalized.endsWith("/__init__.py");
|
|
29
|
+
}
|
|
30
|
+
function getIndexedPaths(db) {
|
|
31
|
+
return db.all(
|
|
32
|
+
`SELECT d.relative_path
|
|
33
|
+
FROM documents d
|
|
34
|
+
WHERE 1 = 1
|
|
35
|
+
${db.pathExclusionsFor("d")}
|
|
36
|
+
ORDER BY d.relative_path`
|
|
37
|
+
).map((row) => row.relative_path).filter((path) => !db.isIgnored(path));
|
|
38
|
+
}
|
|
39
|
+
function getLiveBarrelPaths(db) {
|
|
40
|
+
const cached = liveBarrelCache.get(db);
|
|
41
|
+
if (cached) {
|
|
42
|
+
return cached;
|
|
43
|
+
}
|
|
44
|
+
const graph = buildFileDepGraph(db);
|
|
45
|
+
const queue = getIndexedPaths(db).filter(
|
|
46
|
+
(path) => isStructuralEntrySurface(path) || isWorkerEntrySurface(path)
|
|
47
|
+
);
|
|
48
|
+
const visited = /* @__PURE__ */ new Set();
|
|
49
|
+
const liveBarrels = /* @__PURE__ */ new Set();
|
|
50
|
+
while (queue.length > 0) {
|
|
51
|
+
const current = queue.shift();
|
|
52
|
+
if (visited.has(current)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
visited.add(current);
|
|
56
|
+
if (isBarrelFile(current)) {
|
|
57
|
+
liveBarrels.add(current);
|
|
58
|
+
}
|
|
59
|
+
for (const dep of graph.get(current) ?? []) {
|
|
60
|
+
if (!visited.has(dep)) {
|
|
61
|
+
queue.push(dep);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
liveBarrelCache.set(db, liveBarrels);
|
|
66
|
+
return liveBarrels;
|
|
67
|
+
}
|
|
68
|
+
function isLiveBarrel(db, path) {
|
|
69
|
+
return getLiveBarrelPaths(db).has(normalizePath(path));
|
|
70
|
+
}
|
|
71
|
+
function isEntrySurface(db, path) {
|
|
72
|
+
return isStructuralEntrySurface(path) || isWorkerEntrySurface(path) || isLiveBarrel(db, path);
|
|
73
|
+
}
|
|
74
|
+
function getInactiveBarrelPaths(db) {
|
|
75
|
+
const liveBarrels = getLiveBarrelPaths(db);
|
|
76
|
+
return getIndexedPaths(db).filter((path) => isBarrelFile(path)).filter((path) => !liveBarrels.has(path));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
isLiveBarrel,
|
|
81
|
+
isEntrySurface,
|
|
82
|
+
getInactiveBarrelPaths
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=chunk-VO4QI3LS.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
testFileExclusionSql
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIXNAB5K.js";
|
|
7
7
|
|
|
8
8
|
// src/queries/complexity-hotspots.ts
|
|
9
9
|
function complexityHotspots(db, opts) {
|
|
@@ -20,7 +20,7 @@ function complexityHotspots(db, opts) {
|
|
|
20
20
|
(SELECT COUNT(DISTINCT ref_c.document_id)
|
|
21
21
|
FROM mentions ref_m
|
|
22
22
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
23
|
-
WHERE ref_m.symbol_id = gs.id AND ref_m.role
|
|
23
|
+
WHERE ref_m.symbol_id = gs.id AND ref_m.role != 1
|
|
24
24
|
) AS fan_in,
|
|
25
25
|
-- fanOut: distinct symbols referenced within this definition range
|
|
26
26
|
-- that are defined in different files
|
|
@@ -32,7 +32,7 @@ function complexityHotspots(db, opts) {
|
|
|
32
32
|
WHERE out_c.document_id = der.document_id
|
|
33
33
|
AND out_c.start_line >= der.start_line
|
|
34
34
|
AND out_c.end_line <= der.end_line
|
|
35
|
-
AND out_m.role
|
|
35
|
+
AND out_m.role != 1
|
|
36
36
|
AND out_gs.id != gs.id
|
|
37
37
|
AND out_der.document_id != der.document_id
|
|
38
38
|
) AS fan_out,
|
|
@@ -44,7 +44,7 @@ function complexityHotspots(db, opts) {
|
|
|
44
44
|
WHERE callee_c.document_id = der.document_id
|
|
45
45
|
AND callee_c.start_line >= der.start_line
|
|
46
46
|
AND callee_c.end_line <= der.end_line
|
|
47
|
-
AND callee_m.role
|
|
47
|
+
AND callee_m.role != 1
|
|
48
48
|
AND callee_gs.id != gs.id
|
|
49
49
|
) AS callee_count
|
|
50
50
|
FROM global_symbols gs
|
|
@@ -61,7 +61,7 @@ function complexityHotspots(db, opts) {
|
|
|
61
61
|
* CAST((SELECT COUNT(DISTINCT ref_c2.document_id)
|
|
62
62
|
FROM mentions ref_m2
|
|
63
63
|
JOIN chunks ref_c2 ON ref_m2.chunk_id = ref_c2.id
|
|
64
|
-
WHERE ref_m2.symbol_id = gs.id AND ref_m2.role
|
|
64
|
+
WHERE ref_m2.symbol_id = gs.id AND ref_m2.role != 1
|
|
65
65
|
) AS REAL) / 5.0
|
|
66
66
|
* MAX(CAST((SELECT COUNT(DISTINCT out_gs2.id)
|
|
67
67
|
FROM mentions out_m2
|
|
@@ -71,7 +71,7 @@ function complexityHotspots(db, opts) {
|
|
|
71
71
|
WHERE out_c2.document_id = der.document_id
|
|
72
72
|
AND out_c2.start_line >= der.start_line
|
|
73
73
|
AND out_c2.end_line <= der.end_line
|
|
74
|
-
AND out_m2.role
|
|
74
|
+
AND out_m2.role != 1
|
|
75
75
|
AND out_gs2.id != gs.id
|
|
76
76
|
AND out_der2.document_id != der.document_id
|
|
77
77
|
) AS REAL) / 5.0, 1.0)
|
|
@@ -99,4 +99,4 @@ function complexityHotspots(db, opts) {
|
|
|
99
99
|
export {
|
|
100
100
|
complexityHotspots
|
|
101
101
|
};
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-WVK7AASK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFileDepGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LLMPAG56.js";
|
|
4
4
|
|
|
5
5
|
// src/queries/cycles.ts
|
|
6
6
|
function cycles(db, opts = {}) {
|
|
@@ -58,4 +58,4 @@ function cycles(db, opts = {}) {
|
|
|
58
58
|
export {
|
|
59
59
|
cycles
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-Y3M323OX.js.map
|