scip-query 0.1.0 → 0.2.0
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/dist/{chunk-CM454WL3.js → chunk-2CKGIR6G.js} +2 -2
- package/dist/{chunk-5FGUEU7N.js → chunk-4EXL2CUA.js} +4 -4
- package/dist/chunk-4EXL2CUA.js.map +1 -0
- package/dist/{chunk-TDNNOR6D.js → chunk-4PDAL6IL.js} +6 -6
- package/dist/chunk-4PDAL6IL.js.map +1 -0
- package/dist/{chunk-BP2ATLK2.js → chunk-4XHWPRAX.js} +3 -3
- package/dist/chunk-4XHWPRAX.js.map +1 -0
- package/dist/{chunk-2QZ23IBN.js → chunk-5RMYT5WH.js} +3 -3
- package/dist/chunk-5RMYT5WH.js.map +1 -0
- package/dist/{chunk-7OZPA5OO.js → chunk-63G7IQTD.js} +13 -13
- package/dist/{chunk-XFXDXEUN.js → chunk-74RFWB5T.js} +2 -2
- package/dist/{chunk-XFXDXEUN.js.map → chunk-74RFWB5T.js.map} +1 -1
- package/dist/{chunk-JKP5GH6T.js → chunk-7LLPRPR5.js} +2 -2
- package/dist/{chunk-BFSCMC22.js → chunk-7PBOG4YE.js} +2 -2
- package/dist/{chunk-BFSCMC22.js.map → chunk-7PBOG4YE.js.map} +1 -1
- package/dist/{chunk-36OMT7ZJ.js → chunk-7RLE5EWE.js} +3 -3
- package/dist/{chunk-36OMT7ZJ.js.map → chunk-7RLE5EWE.js.map} +1 -1
- package/dist/{chunk-UNTPVD36.js → chunk-7UCKSQRS.js} +3 -3
- package/dist/{chunk-UNTPVD36.js.map → chunk-7UCKSQRS.js.map} +1 -1
- package/dist/{chunk-GJFURBEW.js → chunk-BNN2RKD2.js} +3 -3
- package/dist/chunk-BNN2RKD2.js.map +1 -0
- package/dist/{chunk-FFSWWE5O.js → chunk-BOVXCR46.js} +2 -2
- package/dist/{chunk-FFSWWE5O.js.map → chunk-BOVXCR46.js.map} +1 -1
- package/dist/{chunk-6VJ6Q7IE.js → chunk-D567NFIF.js} +3 -3
- package/dist/{chunk-6VJ6Q7IE.js.map → chunk-D567NFIF.js.map} +1 -1
- package/dist/{chunk-GTILYBH6.js → chunk-DGUPQSOR.js} +5 -5
- package/dist/chunk-DGUPQSOR.js.map +1 -0
- package/dist/{chunk-TBP6BICL.js → chunk-EQYLEQCW.js} +2 -2
- package/dist/{chunk-TBP6BICL.js.map → chunk-EQYLEQCW.js.map} +1 -1
- package/dist/{chunk-VZ7AMAFL.js → chunk-H2MDONBU.js} +2 -2
- package/dist/{chunk-BEPIEVLR.js → chunk-HB7MRLLL.js} +2 -2
- package/dist/{chunk-BEPIEVLR.js.map → chunk-HB7MRLLL.js.map} +1 -1
- package/dist/{chunk-KVSW5KYP.js → chunk-HDSRORNV.js} +4 -4
- package/dist/chunk-HDSRORNV.js.map +1 -0
- package/dist/{chunk-5WTJAXY2.js → chunk-HMLMH7VZ.js} +2 -2
- package/dist/{chunk-Z73NYSBZ.js → chunk-HPFZLISB.js} +2 -2
- package/dist/{chunk-3ZZJVBIO.js → chunk-HZBC7PPD.js} +4 -4
- package/dist/chunk-HZBC7PPD.js.map +1 -0
- package/dist/{chunk-6NBLIDF4.js → chunk-ITZ3DDOG.js} +2 -2
- package/dist/chunk-ITZ3DDOG.js.map +1 -0
- package/dist/{chunk-YZAA4LYG.js → chunk-KPPHZCZJ.js} +5 -5
- package/dist/chunk-KPPHZCZJ.js.map +1 -0
- package/dist/{chunk-T6ARFSBZ.js → chunk-MCUX5LA7.js} +6 -6
- package/dist/chunk-MCUX5LA7.js.map +1 -0
- package/dist/{chunk-ZJRYBOEE.js → chunk-NHBZIL2J.js} +4 -4
- package/dist/{chunk-ZJRYBOEE.js.map → chunk-NHBZIL2J.js.map} +1 -1
- package/dist/{chunk-VRUJH4BO.js → chunk-NWCE4CIC.js} +4 -4
- package/dist/chunk-NWCE4CIC.js.map +1 -0
- package/dist/{chunk-LUSIFBXO.js → chunk-OVPLOMPY.js} +4 -4
- package/dist/{chunk-LUSIFBXO.js.map → chunk-OVPLOMPY.js.map} +1 -1
- package/dist/{chunk-TSPZOMHC.js → chunk-UJQN5N3I.js} +2 -2
- package/dist/{chunk-NDSQYIWT.js → chunk-W4ALF422.js} +2 -2
- package/dist/{chunk-3E2X7RIE.js → chunk-Z4GHE2HD.js} +5 -5
- package/dist/chunk-Z4GHE2HD.js.map +1 -0
- package/dist/{chunk-LB7OS35Q.js → chunk-Z6YZJ36C.js} +2 -2
- package/dist/{chunk-EMDQWNYR.js → chunk-ZK6GXM3J.js} +7 -7
- package/dist/chunk-ZK6GXM3J.js.map +1 -0
- package/dist/{chunk-FUHJCHS4.js → chunk-ZOGY2V3N.js} +3 -3
- package/dist/chunk-ZOGY2V3N.js.map +1 -0
- package/dist/{chunk-MBVNHJVN.js → chunk-ZQIIPFD7.js} +2 -2
- package/dist/cli.js +52 -52
- package/dist/cli.js.map +1 -1
- package/dist/{db-BxaevAyc.d.ts → db-BNVVZSfP.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +35 -35
- package/dist/queries/affected.d.ts +1 -1
- package/dist/queries/affected.js +2 -2
- package/dist/queries/bottlenecks.d.ts +1 -1
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +1 -1
- package/dist/queries/call-graph.d.ts +1 -1
- package/dist/queries/call-graph.js +2 -2
- package/dist/queries/change-surface.d.ts +1 -1
- package/dist/queries/change-surface.js +2 -2
- package/dist/queries/code.d.ts +1 -1
- package/dist/queries/code.js +2 -2
- package/dist/queries/complexity-hotspots.d.ts +1 -1
- package/dist/queries/complexity-hotspots.js +2 -2
- package/dist/queries/complexity.d.ts +1 -1
- package/dist/queries/complexity.js +2 -2
- package/dist/queries/convergence.d.ts +1 -1
- package/dist/queries/convergence.js +2 -2
- 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 +2 -2
- package/dist/queries/dataflow.d.ts +1 -1
- package/dist/queries/dataflow.js +2 -2
- package/dist/queries/dead.d.ts +1 -1
- package/dist/queries/dead.js +2 -2
- package/dist/queries/deep-chains.d.ts +1 -1
- package/dist/queries/deep-chains.js +2 -2
- package/dist/queries/deps.d.ts +1 -1
- package/dist/queries/diff-impact.d.ts +1 -1
- package/dist/queries/diff-impact.js +2 -2
- package/dist/queries/doc-coverage.d.ts +1 -1
- package/dist/queries/drift.d.ts +1 -1
- package/dist/queries/drift.js +2 -2
- package/dist/queries/extract-candidates.d.ts +1 -1
- package/dist/queries/extract-candidates.js +2 -2
- package/dist/queries/fan.d.ts +1 -1
- package/dist/queries/fan.js +1 -1
- 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/hotspots.d.ts +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +1 -1
- package/dist/queries/imports.js +1 -1
- package/dist/queries/index.d.ts +1 -1
- package/dist/queries/index.js +35 -35
- package/dist/queries/isolated.d.ts +1 -1
- package/dist/queries/isolated.js +2 -2
- package/dist/queries/members.d.ts +1 -1
- package/dist/queries/methods.d.ts +1 -1
- package/dist/queries/outline.d.ts +1 -1
- package/dist/queries/passthrough-candidates.d.ts +1 -1
- package/dist/queries/passthrough-candidates.js +2 -2
- package/dist/queries/redundant-reexports.d.ts +1 -1
- package/dist/queries/redundant-reexports.js +1 -1
- 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 +2 -2
- package/dist/queries/similar-files.d.ts +1 -1
- package/dist/queries/similar-files.js +2 -2
- package/dist/queries/similar-signatures.d.ts +1 -1
- package/dist/queries/similar.d.ts +1 -1
- package/dist/queries/similar.js +2 -2
- package/dist/queries/slice.d.ts +1 -1
- package/dist/queries/slice.js +2 -2
- package/dist/queries/stale-abstractions.d.ts +1 -1
- package/dist/queries/stale-abstractions.js +2 -2
- 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 +1 -1
- package/dist/queries/symbols.d.ts +1 -1
- package/dist/queries/system.d.ts +1 -1
- package/dist/queries/test-coverage.d.ts +1 -1
- package/dist/queries/test-coverage.js +2 -2
- package/dist/queries/trace.d.ts +1 -1
- package/dist/queries/trace.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +1 -1
- package/dist/queries/wrapper-candidates.js +2 -2
- package/package.json +1 -1
- package/src/queries/affected.ts +1 -1
- package/src/queries/bottlenecks.ts +2 -2
- package/src/queries/call-graph.ts +1 -1
- package/src/queries/change-surface.ts +2 -2
- package/src/queries/complexity-hotspots.ts +5 -5
- package/src/queries/complexity.ts +1 -1
- package/src/queries/coupling.ts +3 -3
- package/src/queries/dataflow.ts +4 -4
- package/src/queries/dead.ts +2 -2
- package/src/queries/diff-impact.ts +3 -3
- package/src/queries/drift.ts +1 -1
- package/src/queries/fan.ts +4 -4
- package/src/queries/hotspots.ts +1 -1
- package/src/queries/imports.ts +1 -1
- package/src/queries/isolated.ts +2 -2
- package/src/queries/redundant-reexports.ts +4 -4
- package/src/queries/refs.ts +1 -1
- package/src/queries/slice.ts +2 -2
- package/src/queries/stale-abstractions.ts +1 -1
- package/src/queries/stats.ts +1 -1
- package/src/queries/surface.ts +1 -1
- package/src/queries/test-coverage.ts +2 -2
- package/src/queries/trace.ts +1 -1
- package/src/queries/wrapper-candidates.ts +4 -4
- package/src/query-support.ts +2 -2
- package/src/types.ts +1 -1
- package/dist/chunk-2QZ23IBN.js.map +0 -1
- package/dist/chunk-3E2X7RIE.js.map +0 -1
- package/dist/chunk-3ZZJVBIO.js.map +0 -1
- package/dist/chunk-5FGUEU7N.js.map +0 -1
- package/dist/chunk-6NBLIDF4.js.map +0 -1
- package/dist/chunk-BP2ATLK2.js.map +0 -1
- package/dist/chunk-EMDQWNYR.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-KVSW5KYP.js.map +0 -1
- package/dist/chunk-T6ARFSBZ.js.map +0 -1
- package/dist/chunk-TDNNOR6D.js.map +0 -1
- package/dist/chunk-VRUJH4BO.js.map +0 -1
- package/dist/chunk-YZAA4LYG.js.map +0 -1
- /package/dist/{chunk-CM454WL3.js.map → chunk-2CKGIR6G.js.map} +0 -0
- /package/dist/{chunk-7OZPA5OO.js.map → chunk-63G7IQTD.js.map} +0 -0
- /package/dist/{chunk-JKP5GH6T.js.map → chunk-7LLPRPR5.js.map} +0 -0
- /package/dist/{chunk-VZ7AMAFL.js.map → chunk-H2MDONBU.js.map} +0 -0
- /package/dist/{chunk-5WTJAXY2.js.map → chunk-HMLMH7VZ.js.map} +0 -0
- /package/dist/{chunk-Z73NYSBZ.js.map → chunk-HPFZLISB.js.map} +0 -0
- /package/dist/{chunk-TSPZOMHC.js.map → chunk-UJQN5N3I.js.map} +0 -0
- /package/dist/{chunk-NDSQYIWT.js.map → chunk-W4ALF422.js.map} +0 -0
- /package/dist/{chunk-LB7OS35Q.js.map → chunk-Z6YZJ36C.js.map} +0 -0
- /package/dist/{chunk-MBVNHJVN.js.map → chunk-ZQIIPFD7.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
testFileExclusionSql
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZOGY2V3N.js";
|
|
4
4
|
import {
|
|
5
5
|
shortenSymbol
|
|
6
6
|
} from "./chunk-QOV2R2WT.js";
|
|
@@ -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-ZK6GXM3J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/queries/complexity-hotspots.ts"],"sourcesContent":["import type { ScipDatabase } from '../db.js';\nimport { testFileExclusionSql } from '../query-support.js';\nimport type { ComplexityHotspot } from '../types.js';\nimport { shortenSymbol } from '../symbol-parser.js';\n\n/**\n * Find complexity hotspots: symbols with a composite score based on\n * LOC, fan-in, fan-out, and callee count.\n *\n * Score = (loc / 50) * (fanIn / 5) * max(fanOut / 5, 1)\n *\n * High scores indicate symbols that are large, widely depended upon,\n * AND reach out to many other modules — the riskiest code to change.\n */\nexport function complexityHotspots(\n db: ScipDatabase,\n opts?: { scope?: string; minLoc?: number; limit?: number },\n): ComplexityHotspot[] {\n const { scope, minLoc = 10, limit = 30 } = opts ?? {};\n const scopeFilter = scope ? `AND d.relative_path LIKE '%${scope}%'` : '';\n\n const rows = db.all<{\n symbol: string;\n file: string;\n start_line: number;\n end_line: number;\n loc: number;\n fan_in: number;\n fan_out: number;\n callee_count: number;\n }>(\n `SELECT\n gs.symbol,\n d.relative_path AS file,\n der.start_line,\n der.end_line,\n (der.end_line - der.start_line + 1) AS loc,\n -- fanIn: distinct files that reference this symbol\n (SELECT COUNT(DISTINCT ref_c.document_id)\n FROM mentions ref_m\n JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id\n WHERE ref_m.symbol_id = gs.id AND ref_m.role != 1\n ) AS fan_in,\n -- fanOut: distinct symbols referenced within this definition range\n -- that are defined in different files\n (SELECT COUNT(DISTINCT out_gs.id)\n FROM mentions out_m\n JOIN chunks out_c ON out_m.chunk_id = out_c.id\n JOIN global_symbols out_gs ON out_m.symbol_id = out_gs.id\n JOIN defn_enclosing_ranges out_der ON out_gs.id = out_der.symbol_id\n WHERE out_c.document_id = der.document_id\n AND out_c.start_line >= der.start_line\n AND out_c.end_line <= der.end_line\n AND out_m.role != 1\n AND out_gs.id != gs.id\n AND out_der.document_id != der.document_id\n ) AS fan_out,\n -- calleeCount: total distinct callees within definition range\n (SELECT COUNT(DISTINCT callee_gs.id)\n FROM mentions callee_m\n JOIN chunks callee_c ON callee_m.chunk_id = callee_c.id\n JOIN global_symbols callee_gs ON callee_m.symbol_id = callee_gs.id\n WHERE callee_c.document_id = der.document_id\n AND callee_c.start_line >= der.start_line\n AND callee_c.end_line <= der.end_line\n AND callee_m.role != 1\n AND callee_gs.id != gs.id\n ) AS callee_count\n FROM global_symbols gs\n JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id\n JOIN documents d ON der.document_id = d.id\n WHERE 1 = 1\n ${db.pathExclusionsFor('d')}\n AND ${testFileExclusionSql('d')}\n ${db.symbolNoiseFor('gs')}\n AND (der.end_line - der.start_line + 1) >= ?\n ${scopeFilter}\n ORDER BY (\n CAST((der.end_line - der.start_line + 1) AS REAL) / 50.0\n * CAST((SELECT COUNT(DISTINCT ref_c2.document_id)\n FROM mentions ref_m2\n JOIN chunks ref_c2 ON ref_m2.chunk_id = ref_c2.id\n WHERE ref_m2.symbol_id = gs.id AND ref_m2.role != 1\n ) AS REAL) / 5.0\n * MAX(CAST((SELECT COUNT(DISTINCT out_gs2.id)\n FROM mentions out_m2\n JOIN chunks out_c2 ON out_m2.chunk_id = out_c2.id\n JOIN global_symbols out_gs2 ON out_m2.symbol_id = out_gs2.id\n JOIN defn_enclosing_ranges out_der2 ON out_gs2.id = out_der2.symbol_id\n WHERE out_c2.document_id = der.document_id\n AND out_c2.start_line >= der.start_line\n AND out_c2.end_line <= der.end_line\n AND out_m2.role != 1\n AND out_gs2.id != gs.id\n AND out_der2.document_id != der.document_id\n ) AS REAL) / 5.0, 1.0)\n ) DESC\n LIMIT ?`,\n minLoc, limit,\n );\n\n return rows\n .filter((r) => !db.isIgnored(r.file))\n .map((r) => ({\n symbol: r.symbol,\n shortName: shortenSymbol(r.symbol),\n file: r.file,\n startLine: r.start_line,\n endLine: r.end_line,\n loc: r.loc,\n fanIn: r.fan_in,\n fanOut: r.fan_out,\n calleeCount: r.callee_count,\n score:\n Math.round(\n (r.loc / 50) * (r.fan_in / 5) * Math.max(r.fan_out / 5, 1) * 100,\n ) / 100,\n }));\n}\n"],"mappings":";;;;;;;;AAcO,SAAS,mBACd,IACA,MACqB;AACrB,QAAM,EAAE,OAAO,SAAS,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACpD,QAAM,cAAc,QAAQ,8BAA8B,KAAK,OAAO;AAEtE,QAAM,OAAO,GAAG;AAAA,IAUd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAyCI,GAAG,kBAAkB,GAAG,CAAC;AAAA,YACrB,qBAAqB,GAAG,CAAC;AAAA,QAC7B,GAAG,eAAe,IAAI,CAAC;AAAA;AAAA,QAEvB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBf;AAAA,IAAQ;AAAA,EACV;AAEA,SAAO,KACJ,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,EACnC,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,EAAE;AAAA,IACV,WAAW,cAAc,EAAE,MAAM;AAAA,IACjC,MAAM,EAAE;AAAA,IACR,WAAW,EAAE;AAAA,IACb,SAAS,EAAE;AAAA,IACX,KAAK,EAAE;AAAA,IACP,OAAO,EAAE;AAAA,IACT,QAAQ,EAAE;AAAA,IACV,aAAa,EAAE;AAAA,IACf,OACE,KAAK;AAAA,MACF,EAAE,MAAM,MAAO,EAAE,SAAS,KAAK,KAAK,IAAI,EAAE,UAAU,GAAG,CAAC,IAAI;AAAA,IAC/D,IAAI;AAAA,EACR,EAAE;AACN;","names":[]}
|
|
@@ -33,7 +33,7 @@ function buildFileDepGraph(db, scope) {
|
|
|
33
33
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
34
34
|
JOIN documents d2 ON der.document_id = d2.id
|
|
35
35
|
WHERE d1.id != d2.id
|
|
36
|
-
AND m.role
|
|
36
|
+
AND m.role != 1
|
|
37
37
|
${db.pathExclusionsFor("d1", "d2")}
|
|
38
38
|
${scopeFilter}`
|
|
39
39
|
);
|
|
@@ -116,7 +116,7 @@ function getCalleeRowsForSymbol(db, symbol, opts = {}) {
|
|
|
116
116
|
WHERE c.document_id = ?
|
|
117
117
|
AND c.start_line >= ?
|
|
118
118
|
AND c.end_line <= ?
|
|
119
|
-
AND m.role
|
|
119
|
+
AND m.role != 1
|
|
120
120
|
AND callee_gs.id != ?
|
|
121
121
|
${db.symbolNoiseFor("callee_gs")}
|
|
122
122
|
${db.pathExclusionsFor("callee_d")}
|
|
@@ -155,4 +155,4 @@ export {
|
|
|
155
155
|
findFirstSymbolMatch,
|
|
156
156
|
getCalleeRowsForSymbol
|
|
157
157
|
};
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
158
|
+
//# sourceMappingURL=chunk-ZOGY2V3N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/query-support.ts"],"sourcesContent":["import type { ScipDatabase } from './db.js';\n\nexport interface SymbolLocation {\n documentId: number;\n startLine: number;\n endLine: number;\n symbolId: number;\n}\n\nexport interface SymbolMatch extends SymbolLocation {\n symbol: string;\n relativePath: string;\n}\n\nexport interface CalleeRow {\n symbol: string;\n file: string;\n chunkId: number;\n}\n\nexport const TEST_FILE_PATTERNS = [\n '%/__tests__/%',\n '%.test.%',\n '%.spec.%',\n '%/test/%',\n '%/tests/%',\n '%_test.%',\n '%_spec.%',\n '%/test_%.%',\n '%/spec_%.%',\n] as const;\n\nexport const TEST_SUPPORT_PATH_PATTERNS = [\n '%/test-utils/%',\n] as const;\n\nexport function testFileMatchSql(\n alias: string,\n patterns: readonly string[] = TEST_FILE_PATTERNS,\n): string {\n return `(${patterns.map((pattern) => `${alias}.relative_path LIKE '${pattern}'`).join(' OR ')})`;\n}\n\nexport function testFileExclusionSql(\n alias: string,\n extraPatterns: readonly string[] = [],\n): string {\n const patterns = uniquePatterns([...TEST_FILE_PATTERNS, ...extraPatterns]);\n return patterns\n .map((pattern) => `${alias}.relative_path NOT LIKE '${pattern}'`)\n .join('\\n AND ');\n}\n\nexport function buildFileDepGraph(\n db: ScipDatabase,\n scope?: string,\n): Map<string, Set<string>> {\n const scopeFilter = scope ? `AND d1.relative_path LIKE '%${scope}%'` : '';\n\n const edges = db.all<{ from_file: string; to_file: string }>(\n `SELECT DISTINCT\n d1.relative_path AS from_file,\n d2.relative_path AS to_file\n FROM mentions m\n JOIN chunks c ON m.chunk_id = c.id\n JOIN documents d1 ON c.document_id = d1.id\n JOIN global_symbols gs ON m.symbol_id = gs.id\n JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id\n JOIN documents d2 ON der.document_id = d2.id\n WHERE d1.id != d2.id\n AND m.role != 1\n ${db.pathExclusionsFor('d1', 'd2')}\n ${scopeFilter}`,\n );\n\n const graph = new Map<string, Set<string>>();\n for (const edge of edges) {\n if (db.isIgnored(edge.from_file) || db.isIgnored(edge.to_file)) continue;\n if (!graph.has(edge.from_file)) graph.set(edge.from_file, new Set());\n graph.get(edge.from_file)!.add(edge.to_file);\n }\n\n return graph;\n}\n\nexport function findFirstSymbolMatch(\n db: ScipDatabase,\n symbolPattern: string,\n): SymbolMatch | null {\n // Handle file:line-line syntax (e.g., \"src/foo.ts:10-50\")\n const fileLineMatch = symbolPattern.match(/^(.+):(\\d+)-(\\d+)$/);\n if (fileLineMatch) {\n const [, filePath, startStr, endStr] = fileLineMatch;\n const row = db.get<{\n id: number;\n symbol: string;\n document_id: number;\n start_line: number;\n end_line: number;\n relative_path: string;\n }>(\n `SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path\n FROM global_symbols gs\n JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id\n JOIN documents d ON der.document_id = d.id\n WHERE d.relative_path LIKE ?\n AND der.start_line <= ? AND der.end_line >= ?\n ${db.pathExclusionsFor('d')}\n ORDER BY (der.end_line - der.start_line) ASC\n LIMIT 1`,\n `%${filePath}%`, parseInt(startStr!, 10), parseInt(endStr!, 10),\n );\n if (row && !db.isIgnored(row.relative_path)) {\n return {\n symbolId: row.id,\n symbol: row.symbol,\n documentId: row.document_id,\n startLine: row.start_line,\n endLine: row.end_line,\n relativePath: row.relative_path,\n };\n }\n }\n\n // Strip parentheses from the pattern to avoid shell escaping issues.\n // Agents often pass \"functionName()\" — strip the () for matching.\n const cleaned = symbolPattern.replace(/\\(\\)$/, '').replace(/\\(.*$/, '');\n\n // Try exact-ish match first (with noise filter), then fallback without noise filter.\n // The noise filter excludes %().(% which can incorrectly match some symbols.\n for (const useNoiseFilter of [true, false]) {\n const noiseClause = useNoiseFilter ? db.symbolNoiseFor('gs') : '';\n const row = db.get<{\n id: number;\n symbol: string;\n document_id: number;\n start_line: number;\n end_line: number;\n relative_path: string;\n }>(\n `SELECT gs.id, gs.symbol, der.document_id, der.start_line, der.end_line, d.relative_path\n FROM global_symbols gs\n JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id\n JOIN documents d ON der.document_id = d.id\n WHERE gs.symbol LIKE ?\n ${db.pathExclusionsFor('d')}\n ${noiseClause}\n ORDER BY (der.end_line - der.start_line) DESC\n LIMIT 1`,\n `%${cleaned}%`,\n );\n\n if (row && !db.isIgnored(row.relative_path)) {\n return {\n symbolId: row.id,\n symbol: row.symbol,\n documentId: row.document_id,\n startLine: row.start_line,\n endLine: row.end_line,\n relativePath: row.relative_path,\n };\n }\n }\n\n return null;\n}\n\nexport function getCalleeRowsForSymbol(\n db: ScipDatabase,\n symbol: SymbolLocation,\n opts: { limit?: number } = {},\n): CalleeRow[] {\n const rows = db.all<{\n symbol: string;\n file: string;\n chunk_id: number;\n }>(\n `SELECT DISTINCT\n callee_gs.symbol AS symbol,\n callee_d.relative_path AS file,\n c.id AS chunk_id\n FROM mentions m\n JOIN chunks c ON m.chunk_id = c.id\n JOIN global_symbols callee_gs ON m.symbol_id = callee_gs.id\n JOIN defn_enclosing_ranges callee_der ON callee_gs.id = callee_der.symbol_id\n JOIN documents callee_d ON callee_der.document_id = callee_d.id\n WHERE c.document_id = ?\n AND c.start_line >= ?\n AND c.end_line <= ?\n AND m.role != 1\n AND callee_gs.id != ?\n ${db.symbolNoiseFor('callee_gs')}\n ${db.pathExclusionsFor('callee_d')}\n ORDER BY callee_d.relative_path\n ${opts.limit ? 'LIMIT ?' : ''}`,\n ...calleeQueryParams(symbol, opts.limit),\n );\n\n return rows.filter((row) => !db.isIgnored(row.file)).map((row) => ({\n symbol: row.symbol,\n file: row.file,\n chunkId: row.chunk_id,\n }));\n}\n\nfunction calleeQueryParams(\n symbol: SymbolLocation,\n limit?: number,\n): number[] {\n const params = [\n symbol.documentId,\n symbol.startLine,\n symbol.endLine,\n symbol.symbolId,\n ];\n\n if (typeof limit === 'number') {\n params.push(limit);\n }\n\n return params;\n}\n\nfunction uniquePatterns(patterns: readonly string[]): string[] {\n return [...new Set(patterns)];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildFileDepGraph
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZOGY2V3N.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-ZQIIPFD7.js.map
|
package/dist/cli.js
CHANGED
|
@@ -913,7 +913,7 @@ function stats(db) {
|
|
|
913
913
|
"SELECT COUNT(*) as c FROM mentions WHERE role = 1"
|
|
914
914
|
).c;
|
|
915
915
|
const references = db.get(
|
|
916
|
-
"SELECT COUNT(*) as c FROM mentions WHERE role
|
|
916
|
+
"SELECT COUNT(*) as c FROM mentions WHERE role != 1"
|
|
917
917
|
).c;
|
|
918
918
|
return {
|
|
919
919
|
documents,
|
|
@@ -1163,7 +1163,7 @@ function refs(db, symbolPattern) {
|
|
|
1163
1163
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1164
1164
|
WHERE gs.symbol LIKE ?
|
|
1165
1165
|
AND ${db.localSymbolPredicate}
|
|
1166
|
-
AND m.role
|
|
1166
|
+
AND m.role != 1
|
|
1167
1167
|
ORDER BY d.relative_path, c.start_line`,
|
|
1168
1168
|
`%${symbolPattern}%`
|
|
1169
1169
|
);
|
|
@@ -1203,7 +1203,7 @@ function trace(db, symbolPattern) {
|
|
|
1203
1203
|
WHERE gs.symbol LIKE ?
|
|
1204
1204
|
AND ${db.localSymbolPredicate}
|
|
1205
1205
|
${db.symbolNoise}
|
|
1206
|
-
AND m.role
|
|
1206
|
+
AND m.role != 1
|
|
1207
1207
|
ORDER BY d.relative_path`,
|
|
1208
1208
|
`%${symbolPattern}%`
|
|
1209
1209
|
);
|
|
@@ -1323,7 +1323,7 @@ function surface(db, modulePattern) {
|
|
|
1323
1323
|
WHERE d2.relative_path LIKE ?
|
|
1324
1324
|
AND d1.relative_path NOT LIKE ?
|
|
1325
1325
|
AND ${db.localSymbolPredicate}
|
|
1326
|
-
AND m.role
|
|
1326
|
+
AND m.role != 1
|
|
1327
1327
|
ORDER BY d1.relative_path`,
|
|
1328
1328
|
`%${modulePattern}%`,
|
|
1329
1329
|
`%${modulePattern}%`
|
|
@@ -1370,7 +1370,7 @@ function buildFileDepGraph(db, scope) {
|
|
|
1370
1370
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1371
1371
|
JOIN documents d2 ON der.document_id = d2.id
|
|
1372
1372
|
WHERE d1.id != d2.id
|
|
1373
|
-
AND m.role
|
|
1373
|
+
AND m.role != 1
|
|
1374
1374
|
${db.pathExclusionsFor("d1", "d2")}
|
|
1375
1375
|
${scopeFilter}`
|
|
1376
1376
|
);
|
|
@@ -1453,7 +1453,7 @@ function getCalleeRowsForSymbol(db, symbol, opts = {}) {
|
|
|
1453
1453
|
WHERE c.document_id = ?
|
|
1454
1454
|
AND c.start_line >= ?
|
|
1455
1455
|
AND c.end_line <= ?
|
|
1456
|
-
AND m.role
|
|
1456
|
+
AND m.role != 1
|
|
1457
1457
|
AND callee_gs.id != ?
|
|
1458
1458
|
${db.symbolNoiseFor("callee_gs")}
|
|
1459
1459
|
${db.pathExclusionsFor("callee_d")}
|
|
@@ -1519,7 +1519,7 @@ function dead(db, opts = {}) {
|
|
|
1519
1519
|
gs.symbol,
|
|
1520
1520
|
(SELECT COUNT(*) FROM mentions m2
|
|
1521
1521
|
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
1522
|
-
WHERE m2.symbol_id = gs.id AND m2.role
|
|
1522
|
+
WHERE m2.symbol_id = gs.id AND m2.role != 1 AND c2.document_id = d.id
|
|
1523
1523
|
) AS same_file_refs
|
|
1524
1524
|
FROM global_symbols gs
|
|
1525
1525
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
@@ -1537,7 +1537,7 @@ function dead(db, opts = {}) {
|
|
|
1537
1537
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
1538
1538
|
JOIN documents ref_d ON ref_c.document_id = ref_d.id
|
|
1539
1539
|
WHERE ref_m.symbol_id = gs.id
|
|
1540
|
-
AND ref_m.role
|
|
1540
|
+
AND ref_m.role != 1
|
|
1541
1541
|
AND ref_d.id != d.id
|
|
1542
1542
|
${barrelExclusions}
|
|
1543
1543
|
)
|
|
@@ -1588,7 +1588,7 @@ function hotspots(db, opts = {}) {
|
|
|
1588
1588
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1589
1589
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1590
1590
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
1591
|
-
WHERE m.role
|
|
1591
|
+
WHERE m.role != 1
|
|
1592
1592
|
${db.pathExclusionsFor("def_d")}
|
|
1593
1593
|
${db.symbolNoiseFor("gs")}
|
|
1594
1594
|
${scopeFilter}
|
|
@@ -1659,7 +1659,7 @@ function unusedImports(db, filePattern) {
|
|
|
1659
1659
|
FROM mentions ref_m
|
|
1660
1660
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
1661
1661
|
WHERE ref_m.symbol_id = gs.id
|
|
1662
|
-
AND ref_m.role
|
|
1662
|
+
AND ref_m.role != 1
|
|
1663
1663
|
AND ref_c.document_id = d.id
|
|
1664
1664
|
)
|
|
1665
1665
|
ORDER BY d.relative_path, gs.symbol`,
|
|
@@ -1751,7 +1751,7 @@ function fanIn(db, symbolPattern) {
|
|
|
1751
1751
|
JOIN chunks c ON m.chunk_id = c.id
|
|
1752
1752
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1753
1753
|
WHERE gs.symbol LIKE ?
|
|
1754
|
-
AND m.role
|
|
1754
|
+
AND m.role != 1
|
|
1755
1755
|
GROUP BY gs.id
|
|
1756
1756
|
ORDER BY file_count DESC`,
|
|
1757
1757
|
`%${symbolPattern}%`
|
|
@@ -1771,7 +1771,7 @@ function fanOut(db, filePattern) {
|
|
|
1771
1771
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1772
1772
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
1773
1773
|
WHERE d.relative_path LIKE ?
|
|
1774
|
-
AND m.role
|
|
1774
|
+
AND m.role != 1
|
|
1775
1775
|
AND def_d.id != d.id
|
|
1776
1776
|
GROUP BY d.id
|
|
1777
1777
|
ORDER BY symbol_count DESC`,
|
|
@@ -1792,7 +1792,7 @@ function topFanIn(db, opts = {}) {
|
|
|
1792
1792
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1793
1793
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1794
1794
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
1795
|
-
WHERE m.role
|
|
1795
|
+
WHERE m.role != 1
|
|
1796
1796
|
${db.pathExclusionsFor("def_d")}
|
|
1797
1797
|
${db.symbolNoiseFor("gs")}
|
|
1798
1798
|
${scopeFilter}
|
|
@@ -1818,7 +1818,7 @@ function topFanOut(db, opts = {}) {
|
|
|
1818
1818
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1819
1819
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1820
1820
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
1821
|
-
WHERE m.role
|
|
1821
|
+
WHERE m.role != 1
|
|
1822
1822
|
AND def_d.id != d.id
|
|
1823
1823
|
${db.pathExclusionsFor("d")}
|
|
1824
1824
|
${db.symbolNoiseFor("gs")}
|
|
@@ -1850,7 +1850,7 @@ function coupling(db, file1, file2) {
|
|
|
1850
1850
|
SELECT 1 FROM mentions m
|
|
1851
1851
|
JOIN chunks c ON m.chunk_id = c.id
|
|
1852
1852
|
JOIN documents d ON c.document_id = d.id
|
|
1853
|
-
WHERE m.symbol_id = gs.id AND m.role
|
|
1853
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path LIKE ?
|
|
1854
1854
|
)
|
|
1855
1855
|
) OR (
|
|
1856
1856
|
-- Defined in file2, referenced in file1
|
|
@@ -1863,7 +1863,7 @@ function coupling(db, file1, file2) {
|
|
|
1863
1863
|
SELECT 1 FROM mentions m
|
|
1864
1864
|
JOIN chunks c ON m.chunk_id = c.id
|
|
1865
1865
|
JOIN documents d ON c.document_id = d.id
|
|
1866
|
-
WHERE m.symbol_id = gs.id AND m.role
|
|
1866
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND d.relative_path LIKE ?
|
|
1867
1867
|
)
|
|
1868
1868
|
)`,
|
|
1869
1869
|
`%${file1}%`,
|
|
@@ -1891,7 +1891,7 @@ function topCoupling(db, opts = {}) {
|
|
|
1891
1891
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
1892
1892
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
1893
1893
|
JOIN documents def_d ON der.document_id = def_d.id
|
|
1894
|
-
WHERE m.role
|
|
1894
|
+
WHERE m.role != 1
|
|
1895
1895
|
AND def_d.id != ref_d.id
|
|
1896
1896
|
${db.pathExclusionsFor("def_d", "ref_d")}
|
|
1897
1897
|
${scopeFilter}
|
|
@@ -1972,7 +1972,7 @@ function bottlenecks(db, opts = {}) {
|
|
|
1972
1972
|
(SELECT COUNT(DISTINCT ref_c.document_id)
|
|
1973
1973
|
FROM mentions ref_m
|
|
1974
1974
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
1975
|
-
WHERE ref_m.symbol_id = gs.id AND ref_m.role
|
|
1975
|
+
WHERE ref_m.symbol_id = gs.id AND ref_m.role != 1
|
|
1976
1976
|
) AS fan_in,
|
|
1977
1977
|
(SELECT COUNT(DISTINCT ref_gs.id)
|
|
1978
1978
|
FROM mentions ref_m
|
|
@@ -1980,7 +1980,7 @@ function bottlenecks(db, opts = {}) {
|
|
|
1980
1980
|
JOIN global_symbols ref_gs ON ref_m.symbol_id = ref_gs.id
|
|
1981
1981
|
JOIN defn_enclosing_ranges ref_der ON ref_gs.id = ref_der.symbol_id
|
|
1982
1982
|
WHERE ref_c.document_id = def_d.id
|
|
1983
|
-
AND ref_m.role
|
|
1983
|
+
AND ref_m.role != 1
|
|
1984
1984
|
AND ref_der.document_id != def_d.id
|
|
1985
1985
|
) AS fan_out
|
|
1986
1986
|
FROM global_symbols gs
|
|
@@ -2032,13 +2032,13 @@ function isolated(db, opts = {}) {
|
|
|
2032
2032
|
AND NOT EXISTS (
|
|
2033
2033
|
SELECT 1 FROM mentions m
|
|
2034
2034
|
JOIN chunks c ON m.chunk_id = c.id
|
|
2035
|
-
WHERE m.symbol_id = gs.id AND m.role
|
|
2035
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND c.document_id != d.id
|
|
2036
2036
|
)
|
|
2037
2037
|
-- No same-file references either
|
|
2038
2038
|
AND NOT EXISTS (
|
|
2039
2039
|
SELECT 1 FROM mentions m
|
|
2040
2040
|
JOIN chunks c ON m.chunk_id = c.id
|
|
2041
|
-
WHERE m.symbol_id = gs.id AND m.role
|
|
2041
|
+
WHERE m.symbol_id = gs.id AND m.role != 1 AND c.document_id = d.id
|
|
2042
2042
|
)
|
|
2043
2043
|
ORDER BY loc DESC, d.relative_path`,
|
|
2044
2044
|
minLoc
|
|
@@ -2237,7 +2237,7 @@ function testCoverage(db, symbolPattern) {
|
|
|
2237
2237
|
JOIN chunks c ON m.chunk_id = c.id
|
|
2238
2238
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
2239
2239
|
WHERE m.symbol_id = ?
|
|
2240
|
-
AND m.role
|
|
2240
|
+
AND m.role != 1
|
|
2241
2241
|
AND (${testPatternSql})
|
|
2242
2242
|
ORDER BY ref_d.relative_path`,
|
|
2243
2243
|
s.id
|
|
@@ -2276,7 +2276,7 @@ function testCoverageSummary(db, opts = {}) {
|
|
|
2276
2276
|
`SELECT COUNT(*) AS c FROM mentions m
|
|
2277
2277
|
JOIN chunks c ON m.chunk_id = c.id
|
|
2278
2278
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
2279
|
-
WHERE m.symbol_id = ? AND m.role
|
|
2279
|
+
WHERE m.symbol_id = ? AND m.role != 1 AND (${testRefSql})`,
|
|
2280
2280
|
s.id
|
|
2281
2281
|
);
|
|
2282
2282
|
if (hasTest && hasTest.c > 0) covered++;
|
|
@@ -2440,7 +2440,7 @@ function callGraph(db, symbolPattern) {
|
|
|
2440
2440
|
JOIN global_symbols caller_gs ON caller_der.symbol_id = caller_gs.id
|
|
2441
2441
|
JOIN documents caller_d ON caller_der.document_id = caller_d.id
|
|
2442
2442
|
WHERE m.symbol_id = ?
|
|
2443
|
-
AND m.role
|
|
2443
|
+
AND m.role != 1
|
|
2444
2444
|
AND caller_gs.id != ?
|
|
2445
2445
|
${db.symbolNoiseFor("caller_gs")}
|
|
2446
2446
|
${db.pathExclusionsFor("caller_d")}
|
|
@@ -3068,7 +3068,7 @@ function affected(db, symbolPattern, opts = {}) {
|
|
|
3068
3068
|
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
3069
3069
|
JOIN documents enc_d ON enc_der.document_id = enc_d.id
|
|
3070
3070
|
WHERE m.symbol_id IN (${placeholders})
|
|
3071
|
-
AND m.role
|
|
3071
|
+
AND m.role != 1
|
|
3072
3072
|
AND enc_gs.id NOT IN (${placeholders})
|
|
3073
3073
|
${db.symbolNoiseFor("enc_gs")}
|
|
3074
3074
|
${db.pathExclusionsFor("enc_d")}
|
|
@@ -3123,7 +3123,7 @@ function changeSurface(db, filePattern) {
|
|
|
3123
3123
|
FROM mentions m
|
|
3124
3124
|
JOIN chunks c ON m.chunk_id = c.id
|
|
3125
3125
|
WHERE m.symbol_id = ?
|
|
3126
|
-
AND m.role
|
|
3126
|
+
AND m.role != 1
|
|
3127
3127
|
AND c.document_id != ?`,
|
|
3128
3128
|
sym.symbol_id,
|
|
3129
3129
|
doc.id
|
|
@@ -3135,7 +3135,7 @@ function changeSurface(db, filePattern) {
|
|
|
3135
3135
|
JOIN chunks c ON m.chunk_id = c.id
|
|
3136
3136
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
3137
3137
|
WHERE m.symbol_id = ?
|
|
3138
|
-
AND m.role
|
|
3138
|
+
AND m.role != 1
|
|
3139
3139
|
AND (${testPatternSql})
|
|
3140
3140
|
ORDER BY ref_d.relative_path`,
|
|
3141
3141
|
sym.symbol_id
|
|
@@ -3260,7 +3260,7 @@ function diffImpact(db, opts = {}) {
|
|
|
3260
3260
|
FROM mentions m
|
|
3261
3261
|
JOIN chunks c ON m.chunk_id = c.id
|
|
3262
3262
|
WHERE m.symbol_id = ?
|
|
3263
|
-
AND m.role
|
|
3263
|
+
AND m.role != 1`,
|
|
3264
3264
|
sym.symbol_id
|
|
3265
3265
|
);
|
|
3266
3266
|
const fanIn2 = fanInRow?.fan_in ?? 0;
|
|
@@ -3277,7 +3277,7 @@ function diffImpact(db, opts = {}) {
|
|
|
3277
3277
|
JOIN chunks c ON m.chunk_id = c.id
|
|
3278
3278
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
3279
3279
|
WHERE m.symbol_id = ?
|
|
3280
|
-
AND m.role
|
|
3280
|
+
AND m.role != 1
|
|
3281
3281
|
AND ref_d.relative_path NOT IN (${changedFiles.map(() => "?").join(",")})
|
|
3282
3282
|
${db.pathExclusionsFor("ref_d")}`,
|
|
3283
3283
|
sym.symbol_id,
|
|
@@ -3296,7 +3296,7 @@ function diffImpact(db, opts = {}) {
|
|
|
3296
3296
|
JOIN chunks c ON m.chunk_id = c.id
|
|
3297
3297
|
JOIN documents ref_d ON c.document_id = ref_d.id
|
|
3298
3298
|
WHERE m.symbol_id = ?
|
|
3299
|
-
AND m.role
|
|
3299
|
+
AND m.role != 1
|
|
3300
3300
|
AND (${testPatternSql})`,
|
|
3301
3301
|
sym.symbol_id
|
|
3302
3302
|
);
|
|
@@ -3416,7 +3416,7 @@ function buildSymbolRefGraph(db, scope) {
|
|
|
3416
3416
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
3417
3417
|
JOIN documents d2 ON der.document_id = d2.id
|
|
3418
3418
|
WHERE d1.id != d2.id
|
|
3419
|
-
AND m.role
|
|
3419
|
+
AND m.role != 1
|
|
3420
3420
|
${db.pathExclusionsFor("d1", "d2")}
|
|
3421
3421
|
${scopeFilter}`
|
|
3422
3422
|
);
|
|
@@ -3486,7 +3486,7 @@ function wrapperCandidates(db, opts) {
|
|
|
3486
3486
|
AND ref_c.end_line <= caller_der.end_line
|
|
3487
3487
|
JOIN global_symbols caller_gs ON caller_der.symbol_id = caller_gs.id
|
|
3488
3488
|
WHERE ref_m.symbol_id = gs.id
|
|
3489
|
-
AND ref_m.role
|
|
3489
|
+
AND ref_m.role != 1
|
|
3490
3490
|
AND ref_c.document_id != der.document_id
|
|
3491
3491
|
LIMIT 1
|
|
3492
3492
|
) AS caller_symbol,
|
|
@@ -3503,11 +3503,11 @@ function wrapperCandidates(db, opts) {
|
|
|
3503
3503
|
AND ref_c2.start_line >= caller_der2.start_line
|
|
3504
3504
|
AND ref_c2.end_line <= caller_der2.end_line
|
|
3505
3505
|
WHERE ref_m2.symbol_id = gs.id
|
|
3506
|
-
AND ref_m2.role
|
|
3506
|
+
AND ref_m2.role != 1
|
|
3507
3507
|
AND ref_c2.document_id != der.document_id
|
|
3508
3508
|
LIMIT 1
|
|
3509
3509
|
)
|
|
3510
|
-
AND caller_ref_m.role
|
|
3510
|
+
AND caller_ref_m.role != 1
|
|
3511
3511
|
) AS caller_fan_in
|
|
3512
3512
|
FROM global_symbols gs
|
|
3513
3513
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
@@ -3527,7 +3527,7 @@ function wrapperCandidates(db, opts) {
|
|
|
3527
3527
|
FROM mentions ref_m
|
|
3528
3528
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
3529
3529
|
WHERE ref_m.symbol_id = gs.id
|
|
3530
|
-
AND ref_m.role
|
|
3530
|
+
AND ref_m.role != 1
|
|
3531
3531
|
AND ref_c.document_id != der.document_id
|
|
3532
3532
|
) = 1
|
|
3533
3533
|
) WHERE caller_symbol IS NOT NULL AND caller_fan_in > 3
|
|
@@ -3624,7 +3624,7 @@ function staleAbstractions(db, opts) {
|
|
|
3624
3624
|
FROM mentions ref_m
|
|
3625
3625
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
3626
3626
|
WHERE ref_m.symbol_id = gs.id
|
|
3627
|
-
AND ref_m.role
|
|
3627
|
+
AND ref_m.role != 1
|
|
3628
3628
|
AND ref_c.document_id != der.document_id
|
|
3629
3629
|
) AS consumers
|
|
3630
3630
|
FROM global_symbols gs
|
|
@@ -3676,7 +3676,7 @@ function complexityHotspots(db, opts) {
|
|
|
3676
3676
|
(SELECT COUNT(DISTINCT ref_c.document_id)
|
|
3677
3677
|
FROM mentions ref_m
|
|
3678
3678
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
3679
|
-
WHERE ref_m.symbol_id = gs.id AND ref_m.role
|
|
3679
|
+
WHERE ref_m.symbol_id = gs.id AND ref_m.role != 1
|
|
3680
3680
|
) AS fan_in,
|
|
3681
3681
|
-- fanOut: distinct symbols referenced within this definition range
|
|
3682
3682
|
-- that are defined in different files
|
|
@@ -3688,7 +3688,7 @@ function complexityHotspots(db, opts) {
|
|
|
3688
3688
|
WHERE out_c.document_id = der.document_id
|
|
3689
3689
|
AND out_c.start_line >= der.start_line
|
|
3690
3690
|
AND out_c.end_line <= der.end_line
|
|
3691
|
-
AND out_m.role
|
|
3691
|
+
AND out_m.role != 1
|
|
3692
3692
|
AND out_gs.id != gs.id
|
|
3693
3693
|
AND out_der.document_id != der.document_id
|
|
3694
3694
|
) AS fan_out,
|
|
@@ -3700,7 +3700,7 @@ function complexityHotspots(db, opts) {
|
|
|
3700
3700
|
WHERE callee_c.document_id = der.document_id
|
|
3701
3701
|
AND callee_c.start_line >= der.start_line
|
|
3702
3702
|
AND callee_c.end_line <= der.end_line
|
|
3703
|
-
AND callee_m.role
|
|
3703
|
+
AND callee_m.role != 1
|
|
3704
3704
|
AND callee_gs.id != gs.id
|
|
3705
3705
|
) AS callee_count
|
|
3706
3706
|
FROM global_symbols gs
|
|
@@ -3717,7 +3717,7 @@ function complexityHotspots(db, opts) {
|
|
|
3717
3717
|
* CAST((SELECT COUNT(DISTINCT ref_c2.document_id)
|
|
3718
3718
|
FROM mentions ref_m2
|
|
3719
3719
|
JOIN chunks ref_c2 ON ref_m2.chunk_id = ref_c2.id
|
|
3720
|
-
WHERE ref_m2.symbol_id = gs.id AND ref_m2.role
|
|
3720
|
+
WHERE ref_m2.symbol_id = gs.id AND ref_m2.role != 1
|
|
3721
3721
|
) AS REAL) / 5.0
|
|
3722
3722
|
* MAX(CAST((SELECT COUNT(DISTINCT out_gs2.id)
|
|
3723
3723
|
FROM mentions out_m2
|
|
@@ -3727,7 +3727,7 @@ function complexityHotspots(db, opts) {
|
|
|
3727
3727
|
WHERE out_c2.document_id = der.document_id
|
|
3728
3728
|
AND out_c2.start_line >= der.start_line
|
|
3729
3729
|
AND out_c2.end_line <= der.end_line
|
|
3730
|
-
AND out_m2.role
|
|
3730
|
+
AND out_m2.role != 1
|
|
3731
3731
|
AND out_gs2.id != gs.id
|
|
3732
3732
|
AND out_der2.document_id != der.document_id
|
|
3733
3733
|
) AS REAL) / 5.0, 1.0)
|
|
@@ -4120,7 +4120,7 @@ function complexity(db, symbolPattern) {
|
|
|
4120
4120
|
`SELECT COUNT(DISTINCT c.document_id) AS c
|
|
4121
4121
|
FROM mentions m
|
|
4122
4122
|
JOIN chunks c ON m.chunk_id = c.id
|
|
4123
|
-
WHERE m.symbol_id = ? AND m.role
|
|
4123
|
+
WHERE m.symbol_id = ? AND m.role != 1`,
|
|
4124
4124
|
match.symbolId
|
|
4125
4125
|
);
|
|
4126
4126
|
const fanOut2 = new Set(
|
|
@@ -4219,7 +4219,7 @@ function dataflow(db, symbolPattern) {
|
|
|
4219
4219
|
FROM mentions m
|
|
4220
4220
|
JOIN chunks c ON m.chunk_id = c.id
|
|
4221
4221
|
JOIN documents d ON c.document_id = d.id
|
|
4222
|
-
WHERE m.symbol_id = ? AND m.role
|
|
4222
|
+
WHERE m.symbol_id = ? AND m.role != 1
|
|
4223
4223
|
${db.pathExclusionsFor("d")}
|
|
4224
4224
|
ORDER BY d.relative_path, c.start_line`,
|
|
4225
4225
|
match.symbolId
|
|
@@ -4233,7 +4233,7 @@ function dataflow(db, symbolPattern) {
|
|
|
4233
4233
|
JOIN documents other_d ON other_der.document_id = other_d.id
|
|
4234
4234
|
WHERE other_c.document_id = ?
|
|
4235
4235
|
AND other_c.start_line >= ? AND other_c.end_line <= ?
|
|
4236
|
-
AND other_m.role
|
|
4236
|
+
AND other_m.role != 1
|
|
4237
4237
|
AND other_gs.id != ?
|
|
4238
4238
|
${db.symbolNoiseFor("other_gs")}
|
|
4239
4239
|
${db.pathExclusionsFor("other_d")}
|
|
@@ -4256,11 +4256,11 @@ function dataflow(db, symbolPattern) {
|
|
|
4256
4256
|
AND enc_der.end_line >= ref_c.end_line
|
|
4257
4257
|
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
4258
4258
|
-- Find other symbols defined by that enclosing function's file
|
|
4259
|
-
JOIN mentions consumer_m ON consumer_m.symbol_id = enc_gs.id AND consumer_m.role
|
|
4259
|
+
JOIN mentions consumer_m ON consumer_m.symbol_id = enc_gs.id AND consumer_m.role != 1
|
|
4260
4260
|
JOIN chunks consumer_c ON consumer_m.chunk_id = consumer_c.id
|
|
4261
4261
|
JOIN documents consumer_d ON consumer_c.document_id = consumer_d.id
|
|
4262
4262
|
JOIN global_symbols consumer_gs ON consumer_m.symbol_id = consumer_gs.id
|
|
4263
|
-
WHERE ref_m.symbol_id = ? AND ref_m.role
|
|
4263
|
+
WHERE ref_m.symbol_id = ? AND ref_m.role != 1
|
|
4264
4264
|
AND consumer_d.id != ref_d.id
|
|
4265
4265
|
${db.symbolNoiseFor("consumer_gs")}
|
|
4266
4266
|
${db.pathExclusionsFor("consumer_d")}
|
|
@@ -4359,7 +4359,7 @@ function forwardSlice(db, match) {
|
|
|
4359
4359
|
JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
|
|
4360
4360
|
JOIN documents enc_d ON enc_der.document_id = enc_d.id
|
|
4361
4361
|
-- Find other symbols referenced within that enclosing function
|
|
4362
|
-
JOIN mentions out_m ON out_m.role
|
|
4362
|
+
JOIN mentions out_m ON out_m.role != 1
|
|
4363
4363
|
JOIN chunks out_c ON out_m.chunk_id = out_c.id
|
|
4364
4364
|
AND out_c.document_id = enc_der.document_id
|
|
4365
4365
|
AND out_c.start_line >= enc_der.start_line
|
|
@@ -4367,7 +4367,7 @@ function forwardSlice(db, match) {
|
|
|
4367
4367
|
JOIN global_symbols out_gs ON out_m.symbol_id = out_gs.id
|
|
4368
4368
|
JOIN defn_enclosing_ranges out_der ON out_gs.id = out_der.symbol_id
|
|
4369
4369
|
JOIN documents out_d ON out_der.document_id = out_d.id
|
|
4370
|
-
WHERE ref_m.symbol_id = ? AND ref_m.role
|
|
4370
|
+
WHERE ref_m.symbol_id = ? AND ref_m.role != 1
|
|
4371
4371
|
AND out_gs.id != ? AND out_gs.id != enc_gs.id
|
|
4372
4372
|
AND out_d.id != ref_d.id
|
|
4373
4373
|
${db.symbolNoiseFor("out_gs")}
|
|
@@ -4415,7 +4415,7 @@ function redundantReexports(db, opts = {}) {
|
|
|
4415
4415
|
JOIN global_symbols gs ON m.symbol_id = gs.id
|
|
4416
4416
|
JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
|
|
4417
4417
|
JOIN documents orig_d ON der.document_id = orig_d.id
|
|
4418
|
-
WHERE m.role
|
|
4418
|
+
WHERE m.role != 1
|
|
4419
4419
|
AND (barrel_d.relative_path LIKE '%/index.ts'
|
|
4420
4420
|
OR barrel_d.relative_path LIKE '%/index.js'
|
|
4421
4421
|
OR barrel_d.relative_path = 'index.ts'
|
|
@@ -4443,20 +4443,20 @@ function redundantReexports(db, opts = {}) {
|
|
|
4443
4443
|
FROM mentions barrel_m
|
|
4444
4444
|
JOIN chunks barrel_c ON barrel_m.chunk_id = barrel_c.id
|
|
4445
4445
|
WHERE barrel_c.document_id = consumer_d.id
|
|
4446
|
-
AND barrel_m.role
|
|
4446
|
+
AND barrel_m.role != 1
|
|
4447
4447
|
AND barrel_m.symbol_id IN (
|
|
4448
4448
|
SELECT m2.symbol_id
|
|
4449
4449
|
FROM mentions m2
|
|
4450
4450
|
JOIN chunks c2 ON m2.chunk_id = c2.id
|
|
4451
4451
|
WHERE c2.document_id = ?
|
|
4452
|
-
AND m2.role
|
|
4452
|
+
AND m2.role != 1
|
|
4453
4453
|
)
|
|
4454
4454
|
) THEN 1 ELSE 0 END) AS uses_barrel
|
|
4455
4455
|
FROM mentions ref_m
|
|
4456
4456
|
JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
|
|
4457
4457
|
JOIN documents consumer_d ON ref_c.document_id = consumer_d.id
|
|
4458
4458
|
WHERE ref_m.symbol_id = ?
|
|
4459
|
-
AND ref_m.role
|
|
4459
|
+
AND ref_m.role != 1
|
|
4460
4460
|
AND consumer_d.id != ?
|
|
4461
4461
|
AND consumer_d.id != ?
|
|
4462
4462
|
${db.pathExclusionsFor("consumer_d")}
|