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,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
|
|
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-
|
|
24
|
+
//# sourceMappingURL=chunk-ITZ3DDOG.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/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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
102
|
+
//# sourceMappingURL=chunk-IXPHLF6K.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/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
|
|
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-
|
|
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
|
|
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
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
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-
|
|
221
|
+
//# sourceMappingURL=chunk-LLMPAG56.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/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
|
|
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-
|
|
33
|
+
//# sourceMappingURL=chunk-LTJC5ZQL.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/by-kind.ts
|
|
6
6
|
var KIND_NAMES = {
|
|
@@ -169,4 +169,4 @@ export {
|
|
|
169
169
|
byKind,
|
|
170
170
|
kindCounts
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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
|
|
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
|
|
39
|
+
if (externalConsumers > 10) {
|
|
59
40
|
riskLevel = "high";
|
|
60
|
-
} else if (externalConsumers >
|
|
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-
|
|
66
|
+
//# sourceMappingURL=chunk-M4QGEKKD.js.map
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import {
|
|
2
2
|
staleAbstractions
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ORINICIZ.js";
|
|
4
4
|
import {
|
|
5
5
|
stats
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import {
|
|
8
|
-
testCoverageSummary
|
|
9
|
-
} from "./chunk-3ZZJVBIO.js";
|
|
6
|
+
} from "./chunk-74RFWB5T.js";
|
|
10
7
|
import {
|
|
11
8
|
wrapperCandidates
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PMJKOXOT.js";
|
|
13
10
|
import {
|
|
14
11
|
passthroughCandidates
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3566TKJ5.js";
|
|
16
13
|
import {
|
|
17
14
|
similarAll
|
|
18
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-H6WCPKCX.js";
|
|
19
16
|
import {
|
|
20
17
|
isolated
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-HMYJJ3HY.js";
|
|
22
19
|
import {
|
|
23
20
|
drift
|
|
24
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-R56FJU3E.js";
|
|
25
22
|
import {
|
|
26
23
|
extractCandidates
|
|
27
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-BFLULBEU.js";
|
|
28
25
|
import {
|
|
29
26
|
complexityHotspots
|
|
30
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-WVK7AASK.js";
|
|
31
28
|
import {
|
|
32
29
|
cycles
|
|
33
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-Y3M323OX.js";
|
|
34
31
|
import {
|
|
35
32
|
dead
|
|
36
|
-
} from "./chunk-
|
|
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:
|
|
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-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
|