scip-query 0.4.2 → 0.5.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.
Files changed (145) hide show
  1. package/dist/{chunk-OXX3QF24.js → chunk-2MQ5DPY6.js} +2 -2
  2. package/dist/{chunk-RL74LF47.js → chunk-2QTYIOJ5.js} +2 -2
  3. package/dist/{chunk-DUJNJQPO.js → chunk-3VI4YXCL.js} +3 -3
  4. package/dist/{chunk-XUVPQDXW.js → chunk-3VV2G6U7.js} +4 -4
  5. package/dist/{chunk-J47VSL6I.js → chunk-44PFXVXG.js} +3 -3
  6. package/dist/{chunk-SVLUJSY7.js → chunk-6SLFQR36.js} +4 -15
  7. package/dist/{chunk-JHVQB4Y5.js → chunk-7DBPRGMS.js} +12 -12
  8. package/dist/{chunk-A6XLXV6W.js → chunk-DTB724R3.js} +3 -3
  9. package/dist/{chunk-TWVXFKJA.js → chunk-FLOYI6I4.js} +4 -4
  10. package/dist/{chunk-MGNMHKX3.js → chunk-FO2CBB7U.js} +10 -2
  11. package/dist/{chunk-4TYLS5XX.js → chunk-GJT3MO2T.js} +9 -2
  12. package/dist/{chunk-EAGKJFDX.js → chunk-HAP4LJKX.js} +8 -29
  13. package/dist/{chunk-RE7POFGI.js → chunk-JCOJQ4I6.js} +2 -2
  14. package/dist/{chunk-VY2L4TP6.js → chunk-JGQMOS4V.js} +3 -3
  15. package/dist/{chunk-QMXSLHZP.js → chunk-JMD4WJ2Q.js} +2 -2
  16. package/dist/{chunk-43A4UCS7.js → chunk-JSQPZOPO.js} +11 -18
  17. package/dist/{chunk-PCU455MX.js → chunk-JSXGC2EH.js} +2 -2
  18. package/dist/chunk-JZN3DRCT.js +59 -0
  19. package/dist/{chunk-ZVZAIIB5.js → chunk-KMWYB3CX.js} +12 -36
  20. package/dist/{chunk-SYQR4QGK.js → chunk-MRM755FU.js} +8 -9
  21. package/dist/{chunk-R7HPHMRZ.js → chunk-N2XO3Z5F.js} +3 -3
  22. package/dist/{chunk-POLELLNM.js → chunk-OLW5UL36.js} +19 -25
  23. package/dist/{chunk-ALUFWH3U.js → chunk-OMCRXXDX.js} +187 -282
  24. package/dist/{chunk-Z5VSUOEE.js → chunk-OWJOHUZE.js} +2 -2
  25. package/dist/{chunk-RJ5GULL6.js → chunk-PEDH3D4G.js} +2 -2
  26. package/dist/{chunk-6UZU7DFL.js → chunk-POAN4SCR.js} +3 -3
  27. package/dist/{chunk-3NJSJ7TE.js → chunk-PTMGEBU3.js} +4 -15
  28. package/dist/{chunk-NXUIWD6K.js → chunk-PU44HK7P.js} +3 -3
  29. package/dist/{chunk-6CH23IAS.js → chunk-QJI7EECA.js} +22 -34
  30. package/dist/{chunk-KLNKDX6A.js → chunk-R5HICGMB.js} +4 -4
  31. package/dist/{chunk-6ECR2FLR.js → chunk-RJ2D6YWQ.js} +4 -15
  32. package/dist/{chunk-CBIWNZZZ.js → chunk-RZ5GYPBP.js} +3 -3
  33. package/dist/chunk-SRLQNO6O.js +101 -0
  34. package/dist/{chunk-JKXHHV4B.js → chunk-UGS7HJI4.js} +2 -2
  35. package/dist/{chunk-PU2254N2.js → chunk-VKUUXOE7.js} +5 -15
  36. package/dist/{chunk-W46L2BXT.js → chunk-VPUJSJCI.js} +2 -2
  37. package/dist/{chunk-UJWI5CBB.js → chunk-VRWVV3EP.js} +4 -7
  38. package/dist/{chunk-7BS4CPJX.js → chunk-WJWQEU4A.js} +3 -3
  39. package/dist/chunk-WJZHDUSB.js +40 -0
  40. package/dist/{chunk-FVJE4MQL.js → chunk-WWOCQ5W4.js} +5 -8
  41. package/dist/chunk-X3Q2OVRL.js +77 -0
  42. package/dist/chunk-Y3P7QKKN.js +27 -0
  43. package/dist/{chunk-VKBOLNYN.js → chunk-Y6FAHY4N.js} +10 -8
  44. package/dist/{chunk-TO3L4YNK.js → chunk-YMSJCSRG.js} +5 -1
  45. package/dist/{chunk-24LF6IZB.js → chunk-ZDL3U4W2.js} +3 -3
  46. package/dist/{chunk-KG4OFQEN.js → chunk-ZXNX5JRE.js} +3 -3
  47. package/dist/cli.js +368 -721
  48. package/dist/{db-C4rPbKkI.d.ts → db-6F9R9e_t.d.ts} +0 -4
  49. package/dist/index.d.ts +2 -4
  50. package/dist/index.js +46 -58
  51. package/dist/queries/affected.d.ts +1 -1
  52. package/dist/queries/affected.js +3 -3
  53. package/dist/queries/bottlenecks.d.ts +1 -1
  54. package/dist/queries/bottlenecks.js +3 -3
  55. package/dist/queries/by-kind.d.ts +1 -1
  56. package/dist/queries/by-kind.js +3 -3
  57. package/dist/queries/call-graph.d.ts +1 -1
  58. package/dist/queries/call-graph.js +3 -3
  59. package/dist/queries/change-surface.d.ts +4 -1
  60. package/dist/queries/change-surface.js +3 -3
  61. package/dist/queries/clean-signature.d.ts +9 -1
  62. package/dist/queries/clean-signature.js +5 -3
  63. package/dist/queries/code.d.ts +1 -1
  64. package/dist/queries/code.js +3 -3
  65. package/dist/queries/complexity-hotspots.d.ts +8 -1
  66. package/dist/queries/complexity-hotspots.js +3 -3
  67. package/dist/queries/complexity.d.ts +1 -1
  68. package/dist/queries/complexity.js +3 -3
  69. package/dist/queries/convergence.d.ts +1 -1
  70. package/dist/queries/convergence.js +3 -3
  71. package/dist/queries/coupling.d.ts +1 -1
  72. package/dist/queries/coupling.js +3 -3
  73. package/dist/queries/cycles.d.ts +1 -1
  74. package/dist/queries/cycles.js +3 -3
  75. package/dist/queries/dataflow.d.ts +1 -1
  76. package/dist/queries/dataflow.js +3 -3
  77. package/dist/queries/dead.d.ts +1 -1
  78. package/dist/queries/dead.js +4 -4
  79. package/dist/queries/deep-chains.d.ts +1 -1
  80. package/dist/queries/deep-chains.js +3 -3
  81. package/dist/queries/deps.d.ts +1 -1
  82. package/dist/queries/deps.js +3 -3
  83. package/dist/queries/diff-impact.d.ts +1 -1
  84. package/dist/queries/diff-impact.js +2 -2
  85. package/dist/queries/drift.d.ts +1 -1
  86. package/dist/queries/drift.js +3 -3
  87. package/dist/queries/extract-candidates.d.ts +1 -1
  88. package/dist/queries/extract-candidates.js +3 -3
  89. package/dist/queries/fan.d.ts +1 -1
  90. package/dist/queries/fan.js +3 -3
  91. package/dist/queries/files.d.ts +1 -1
  92. package/dist/queries/files.js +1 -1
  93. package/dist/queries/health.d.ts +1 -1
  94. package/dist/queries/health.js +14 -14
  95. package/dist/queries/hierarchy.d.ts +1 -1
  96. package/dist/queries/hierarchy.js +3 -3
  97. package/dist/queries/hotspots.d.ts +1 -1
  98. package/dist/queries/hotspots.js +3 -3
  99. package/dist/queries/imports.d.ts +1 -1
  100. package/dist/queries/imports.js +3 -3
  101. package/dist/queries/index.d.ts +1 -1
  102. package/dist/queries/index.js +46 -46
  103. package/dist/queries/isolated.d.ts +1 -1
  104. package/dist/queries/isolated.js +4 -4
  105. package/dist/queries/members.d.ts +4 -1
  106. package/dist/queries/members.js +3 -3
  107. package/dist/queries/methods.d.ts +1 -1
  108. package/dist/queries/methods.js +3 -3
  109. package/dist/queries/outline.d.ts +4 -1
  110. package/dist/queries/outline.js +3 -3
  111. package/dist/queries/passthrough-candidates.d.ts +1 -1
  112. package/dist/queries/passthrough-candidates.js +3 -3
  113. package/dist/queries/redundant-reexports.d.ts +1 -1
  114. package/dist/queries/redundant-reexports.js +4 -4
  115. package/dist/queries/refs.d.ts +1 -1
  116. package/dist/queries/refs.js +3 -3
  117. package/dist/queries/similar-chains.d.ts +1 -1
  118. package/dist/queries/similar-chains.js +3 -3
  119. package/dist/queries/similar-files.d.ts +1 -1
  120. package/dist/queries/similar-files.js +3 -3
  121. package/dist/queries/similar-signatures.d.ts +1 -1
  122. package/dist/queries/similar-signatures.js +3 -3
  123. package/dist/queries/similar.d.ts +2 -1
  124. package/dist/queries/similar.js +3 -3
  125. package/dist/queries/slice.d.ts +4 -3
  126. package/dist/queries/slice.js +3 -3
  127. package/dist/queries/stale-abstractions.d.ts +1 -1
  128. package/dist/queries/stale-abstractions.js +3 -3
  129. package/dist/queries/stats.d.ts +1 -1
  130. package/dist/queries/surface.d.ts +1 -1
  131. package/dist/queries/surface.js +3 -3
  132. package/dist/queries/symbols.d.ts +1 -1
  133. package/dist/queries/symbols.js +4 -4
  134. package/dist/queries/system.d.ts +6 -2
  135. package/dist/queries/system.js +4 -4
  136. package/dist/queries/trace.d.ts +1 -1
  137. package/dist/queries/trace.js +4 -4
  138. package/dist/queries/wrapper-candidates.d.ts +1 -1
  139. package/dist/queries/wrapper-candidates.js +3 -3
  140. package/package.json +1 -1
  141. package/dist/chunk-5GCORUNV.js +0 -100
  142. package/dist/chunk-ELFGD5EW.js +0 -130
  143. package/dist/chunk-GNAMV3JC.js +0 -37
  144. package/dist/chunk-J6QXMYAQ.js +0 -115
  145. package/dist/chunk-KYPXKV64.js +0 -51
@@ -1,12 +1,12 @@
1
- import { S as ScipDatabase, J as SliceResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, J as SliceResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  /**
5
5
  * Reference-level program slicing: track what affects a symbol (backward)
6
6
  * or what a symbol affects (forward).
7
7
  *
8
- * Backward slice: "What feeds into this?" — symbols referenced in the same
9
- * function that defines the target. These are the direct tracked inputs.
8
+ * Backward slice: "What feeds into this?" — transitive closure of callees.
9
+ * Depth 1 = direct callees, depth 2 = their callees, etc.
10
10
  *
11
11
  * Forward slice: "What does this feed into?" — at each site where the target
12
12
  * is referenced, find the enclosing function, then find what that function
@@ -16,6 +16,7 @@ import 'better-sqlite3';
16
16
  */
17
17
  declare function slice(db: ScipDatabase, symbolPattern: string, opts?: {
18
18
  direction?: 'backward' | 'forward';
19
+ maxDepth?: number;
19
20
  }): SliceResult | null;
20
21
 
21
22
  export { slice };
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  slice
3
- } from "../chunk-5GCORUNV.js";
4
- import "../chunk-ALUFWH3U.js";
5
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-SRLQNO6O.js";
4
+ import "../chunk-OMCRXXDX.js";
5
+ import "../chunk-YMSJCSRG.js";
6
6
  export {
7
7
  slice
8
8
  };
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, G as StaleAbstraction } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, G as StaleAbstraction } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  /**
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  staleAbstractions
3
- } from "../chunk-SVLUJSY7.js";
4
- import "../chunk-ALUFWH3U.js";
5
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-6SLFQR36.js";
4
+ import "../chunk-OMCRXXDX.js";
5
+ import "../chunk-YMSJCSRG.js";
6
6
  export {
7
7
  staleAbstractions
8
8
  };
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, t as StatsResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, t as StatsResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  declare function stats(db: ScipDatabase): StatsResult;
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, w as SurfaceResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, w as SurfaceResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  /** Public API surface: what symbols do external consumers actually use from this module? */
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  surface
3
- } from "../chunk-UJWI5CBB.js";
4
- import "../chunk-ALUFWH3U.js";
5
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-VRWVV3EP.js";
4
+ import "../chunk-OMCRXXDX.js";
5
+ import "../chunk-YMSJCSRG.js";
6
6
  export {
7
7
  surface
8
8
  };
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, u as SymbolResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, u as SymbolResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  declare function symbols(db: ScipDatabase, filePattern: string): SymbolResult[];
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  symbols
3
- } from "../chunk-SYQR4QGK.js";
4
- import "../chunk-4TYLS5XX.js";
5
- import "../chunk-ALUFWH3U.js";
6
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-MRM755FU.js";
4
+ import "../chunk-GJT3MO2T.js";
5
+ import "../chunk-OMCRXXDX.js";
6
+ import "../chunk-YMSJCSRG.js";
7
7
  export {
8
8
  symbols
9
9
  };
@@ -1,7 +1,11 @@
1
- import { S as ScipDatabase, v as SystemResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, v as SystemResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
- /** Full system map for a module path: files, symbols, deps in/out */
4
+ /** Full system map for a module path: files, symbols, deps in/out.
5
+ *
6
+ * Exported-symbol ranges come from getDefinitionsForFile so they are
7
+ * source-corrected and match `scip symbols` output.
8
+ */
5
9
  declare function system(db: ScipDatabase, modulePattern: string): SystemResult;
6
10
 
7
11
  export { system };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  system
3
- } from "../chunk-POLELLNM.js";
4
- import "../chunk-4TYLS5XX.js";
5
- import "../chunk-ALUFWH3U.js";
6
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-OLW5UL36.js";
4
+ import "../chunk-GJT3MO2T.js";
5
+ import "../chunk-OMCRXXDX.js";
6
+ import "../chunk-YMSJCSRG.js";
7
7
  export {
8
8
  system
9
9
  };
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, T as TraceResult } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, T as TraceResult } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  declare function trace(db: ScipDatabase, symbolPattern: string): TraceResult;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trace
3
- } from "../chunk-ZVZAIIB5.js";
4
- import "../chunk-4TYLS5XX.js";
5
- import "../chunk-ALUFWH3U.js";
6
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-KMWYB3CX.js";
4
+ import "../chunk-GJT3MO2T.js";
5
+ import "../chunk-OMCRXXDX.js";
6
+ import "../chunk-YMSJCSRG.js";
7
7
  export {
8
8
  trace
9
9
  };
@@ -1,4 +1,4 @@
1
- import { S as ScipDatabase, W as WrapperCandidate } from '../db-C4rPbKkI.js';
1
+ import { S as ScipDatabase, W as WrapperCandidate } from '../db-6F9R9e_t.js';
2
2
  import 'better-sqlite3';
3
3
 
4
4
  /**
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  wrapperCandidates
3
- } from "../chunk-PU2254N2.js";
4
- import "../chunk-ALUFWH3U.js";
5
- import "../chunk-TO3L4YNK.js";
3
+ } from "../chunk-VKUUXOE7.js";
4
+ import "../chunk-OMCRXXDX.js";
5
+ import "../chunk-YMSJCSRG.js";
6
6
  export {
7
7
  wrapperCandidates
8
8
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scip-query",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "Language-agnostic code intelligence CLI powered by SCIP indexes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,100 +0,0 @@
1
- import {
2
- findFirstSymbolMatch,
3
- getCalleeRowsForSymbol
4
- } from "./chunk-ALUFWH3U.js";
5
- import {
6
- shortenSymbol
7
- } from "./chunk-TO3L4YNK.js";
8
-
9
- // src/queries/slice.ts
10
- function slice(db, symbolPattern, opts = {}) {
11
- const { direction = "backward" } = opts;
12
- const match = findFirstSymbolMatch(db, symbolPattern);
13
- if (!match) return null;
14
- if (direction === "backward") {
15
- return backwardSlice(db, match);
16
- } else {
17
- return forwardSlice(db, match);
18
- }
19
- }
20
- function backwardSlice(db, match) {
21
- const callees = getCalleeRowsForSymbol(db, match);
22
- const seen = /* @__PURE__ */ new Set();
23
- const connected = [];
24
- for (const c of callees) {
25
- if (seen.has(c.symbol)) continue;
26
- seen.add(c.symbol);
27
- connected.push({
28
- symbol: c.symbol,
29
- shortName: shortenSymbol(c.symbol),
30
- file: c.file,
31
- relationship: "referenced within definition (callee)"
32
- });
33
- }
34
- return {
35
- symbol: match.symbol,
36
- shortName: shortenSymbol(match.symbol),
37
- direction: "backward",
38
- connectedSymbols: connected
39
- };
40
- }
41
- function forwardSlice(db, match) {
42
- const rows = db.all(
43
- `SELECT DISTINCT
44
- enc_gs.symbol AS enclosing_symbol,
45
- enc_d.relative_path AS enclosing_file,
46
- out_gs.symbol AS output_symbol,
47
- out_d.relative_path AS output_file
48
- FROM mentions ref_m
49
- JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
50
- JOIN documents ref_d ON ref_c.document_id = ref_d.id
51
- -- Find enclosing function at each reference site
52
- JOIN defn_enclosing_ranges enc_der
53
- ON enc_der.document_id = ref_d.id
54
- AND enc_der.start_line <= ref_c.start_line
55
- AND enc_der.end_line >= ref_c.end_line
56
- JOIN global_symbols enc_gs ON enc_der.symbol_id = enc_gs.id
57
- JOIN documents enc_d ON enc_der.document_id = enc_d.id
58
- -- Find other symbols referenced within that enclosing function
59
- JOIN mentions out_m ON out_m.role != 1
60
- JOIN chunks out_c ON out_m.chunk_id = out_c.id
61
- AND out_c.document_id = enc_der.document_id
62
- AND out_c.start_line >= enc_der.start_line
63
- AND out_c.end_line <= enc_der.end_line
64
- JOIN global_symbols out_gs ON out_m.symbol_id = out_gs.id
65
- JOIN defn_enclosing_ranges out_der ON out_gs.id = out_der.symbol_id
66
- JOIN documents out_d ON out_der.document_id = out_d.id
67
- WHERE ref_m.symbol_id = ? AND ref_m.role != 1
68
- AND out_gs.id != ? AND out_gs.id != enc_gs.id
69
- AND out_d.id != ref_d.id
70
- ${db.symbolNoiseFor("out_gs")}
71
- ${db.pathExclusionsFor("out_d")}
72
- ORDER BY out_d.relative_path
73
- LIMIT 30`,
74
- match.symbolId,
75
- match.symbolId
76
- );
77
- const seen = /* @__PURE__ */ new Set();
78
- const connected = [];
79
- for (const r of rows) {
80
- if (seen.has(r.output_symbol) || db.isIgnored(r.output_file)) continue;
81
- seen.add(r.output_symbol);
82
- connected.push({
83
- symbol: r.output_symbol,
84
- shortName: shortenSymbol(r.output_symbol),
85
- file: r.output_file,
86
- relationship: `used alongside target in ${shortenSymbol(r.enclosing_symbol)}`
87
- });
88
- }
89
- return {
90
- symbol: match.symbol,
91
- shortName: shortenSymbol(match.symbol),
92
- direction: "forward",
93
- connectedSymbols: connected
94
- };
95
- }
96
-
97
- export {
98
- slice
99
- };
100
- //# sourceMappingURL=chunk-5GCORUNV.js.map
@@ -1,130 +0,0 @@
1
- import {
2
- getAllDefinitions,
3
- getCalleeRowsForSymbol,
4
- getCallerRowsForSymbol,
5
- testFileExclusionSql
6
- } from "./chunk-ALUFWH3U.js";
7
- import {
8
- shortenSymbol
9
- } from "./chunk-TO3L4YNK.js";
10
-
11
- // src/queries/complexity-hotspots.ts
12
- function complexityHotspots(db, opts) {
13
- const { scope, minLoc = 10, limit = 30 } = opts ?? {};
14
- const scopeFilter = scope ? `AND d.relative_path LIKE '%${scope}%'` : "";
15
- const rows = db.all(
16
- `SELECT
17
- gs.symbol,
18
- d.relative_path AS file,
19
- der.start_line,
20
- der.end_line,
21
- (der.end_line - der.start_line + 1) AS loc,
22
- -- fanIn: distinct files that reference this symbol
23
- (SELECT COUNT(DISTINCT ref_c.document_id)
24
- FROM mentions ref_m
25
- JOIN chunks ref_c ON ref_m.chunk_id = ref_c.id
26
- WHERE ref_m.symbol_id = gs.id AND ref_m.role != 1
27
- ) AS fan_in,
28
- -- fanOut: distinct symbols referenced within this definition range
29
- -- that are defined in different files
30
- (SELECT COUNT(DISTINCT out_gs.id)
31
- FROM mentions out_m
32
- JOIN chunks out_c ON out_m.chunk_id = out_c.id
33
- JOIN global_symbols out_gs ON out_m.symbol_id = out_gs.id
34
- JOIN defn_enclosing_ranges out_der ON out_gs.id = out_der.symbol_id
35
- WHERE out_c.document_id = der.document_id
36
- AND out_c.start_line >= der.start_line
37
- AND out_c.end_line <= der.end_line
38
- AND out_m.role != 1
39
- AND out_gs.id != gs.id
40
- AND out_der.document_id != der.document_id
41
- ) AS fan_out,
42
- -- calleeCount: total distinct callees within definition range
43
- (SELECT COUNT(DISTINCT callee_gs.id)
44
- FROM mentions callee_m
45
- JOIN chunks callee_c ON callee_m.chunk_id = callee_c.id
46
- JOIN global_symbols callee_gs ON callee_m.symbol_id = callee_gs.id
47
- WHERE callee_c.document_id = der.document_id
48
- AND callee_c.start_line >= der.start_line
49
- AND callee_c.end_line <= der.end_line
50
- AND callee_m.role != 1
51
- AND callee_gs.id != gs.id
52
- ) AS callee_count
53
- FROM global_symbols gs
54
- JOIN defn_enclosing_ranges der ON gs.id = der.symbol_id
55
- JOIN documents d ON der.document_id = d.id
56
- WHERE 1 = 1
57
- ${db.pathExclusionsFor("d")}
58
- AND ${testFileExclusionSql("d")}
59
- ${db.symbolNoiseFor("gs")}
60
- AND (der.end_line - der.start_line + 1) >= ?
61
- ${scopeFilter}
62
- ORDER BY (
63
- CAST((der.end_line - der.start_line + 1) AS REAL) / 50.0
64
- * CAST((SELECT COUNT(DISTINCT ref_c2.document_id)
65
- FROM mentions ref_m2
66
- JOIN chunks ref_c2 ON ref_m2.chunk_id = ref_c2.id
67
- WHERE ref_m2.symbol_id = gs.id AND ref_m2.role != 1
68
- ) AS REAL) / 5.0
69
- * MAX(CAST((SELECT COUNT(DISTINCT out_gs2.id)
70
- FROM mentions out_m2
71
- JOIN chunks out_c2 ON out_m2.chunk_id = out_c2.id
72
- JOIN global_symbols out_gs2 ON out_m2.symbol_id = out_gs2.id
73
- JOIN defn_enclosing_ranges out_der2 ON out_gs2.id = out_der2.symbol_id
74
- WHERE out_c2.document_id = der.document_id
75
- AND out_c2.start_line >= der.start_line
76
- AND out_c2.end_line <= der.end_line
77
- AND out_m2.role != 1
78
- AND out_gs2.id != gs.id
79
- AND out_der2.document_id != der.document_id
80
- ) AS REAL) / 5.0, 1.0)
81
- ) DESC
82
- LIMIT ?`,
83
- minLoc,
84
- limit
85
- );
86
- const indexedResults = rows.filter((r) => !db.isIgnored(r.file)).map((r) => ({
87
- symbol: r.symbol,
88
- shortName: shortenSymbol(r.symbol),
89
- file: r.file,
90
- startLine: r.start_line,
91
- endLine: r.end_line,
92
- loc: r.loc,
93
- fanIn: r.fan_in,
94
- fanOut: r.fan_out,
95
- calleeCount: r.callee_count,
96
- score: Math.round(
97
- r.loc / 50 * (r.fan_in / 5) * Math.max(r.fan_out / 5, 1) * 100
98
- ) / 100
99
- }));
100
- if (indexedResults.length > 0) {
101
- return indexedResults;
102
- }
103
- return getAllDefinitions(db, { scope }).filter((definition) => !db.isIgnored(definition.relativePath)).map((definition) => {
104
- const loc = definition.endLine - definition.startLine + 1;
105
- const callerRows = getCallerRowsForSymbol(db, definition, { limit: 500 });
106
- const calleeRows = getCalleeRowsForSymbol(db, definition, { limit: 500 });
107
- const fanIn = new Set(callerRows.map((row) => row.file)).size;
108
- const fanOut = new Set(
109
- calleeRows.filter((row) => row.file !== definition.relativePath).map((row) => `${row.symbol}|${row.file}`)
110
- ).size;
111
- const calleeCount = new Set(calleeRows.map((row) => `${row.symbol}|${row.file}`)).size;
112
- return {
113
- symbol: definition.symbol,
114
- shortName: shortenSymbol(definition.symbol),
115
- file: definition.relativePath,
116
- startLine: definition.startLine,
117
- endLine: definition.endLine,
118
- loc,
119
- fanIn,
120
- fanOut,
121
- calleeCount,
122
- score: Math.round(loc / 50 * (fanIn / 5) * Math.max(fanOut / 5, 1) * 100) / 100
123
- };
124
- }).filter((row) => row.loc >= minLoc).sort((left, right) => right.score - left.score || right.loc - left.loc).slice(0, limit);
125
- }
126
-
127
- export {
128
- complexityHotspots
129
- };
130
- //# sourceMappingURL=chunk-ELFGD5EW.js.map
@@ -1,37 +0,0 @@
1
- import {
2
- findFirstSymbolMatch
3
- } from "./chunk-ALUFWH3U.js";
4
- import {
5
- isDirectChildSymbol,
6
- leafSuffix,
7
- shortenSymbol
8
- } from "./chunk-TO3L4YNK.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-GNAMV3JC.js.map
@@ -1,115 +0,0 @@
1
- import {
2
- findFirstSymbolMatch,
3
- getSourceReferenceSites,
4
- getSourceText
5
- } from "./chunk-ALUFWH3U.js";
6
- import {
7
- isFunctionLikeSymbol
8
- } from "./chunk-TO3L4YNK.js";
9
-
10
- // src/queries/refs.ts
11
- function refs(db, symbolPattern) {
12
- const match = findFirstSymbolMatch(db, symbolPattern);
13
- if (match) {
14
- const includeDefinitionSite = !isFunctionLikeSymbol(match.symbol);
15
- const definitionRows = includeDefinitionSite ? [{
16
- relativePath: match.relativePath,
17
- line: match.startLine
18
- }] : [];
19
- const sourceSites = getSourceReferenceSites(db, match).filter((site) => !db.isIgnored(site.file)).map((site) => ({
20
- relativePath: site.file,
21
- line: site.line
22
- }));
23
- if (sourceSites.length > 0) {
24
- const seen2 = /* @__PURE__ */ new Set();
25
- const rows2 = [...definitionRows, ...sourceSites, ...getRubySemanticRefs(db, match)].filter((site) => {
26
- const key = `${site.relativePath}:${site.line}`;
27
- if (seen2.has(key)) return false;
28
- seen2.add(key);
29
- return true;
30
- });
31
- return rows2;
32
- }
33
- }
34
- const rows = db.all(
35
- `SELECT DISTINCT d.relative_path, c.start_line
36
- FROM mentions m
37
- JOIN chunks c ON m.chunk_id = c.id
38
- JOIN documents d ON c.document_id = d.id
39
- JOIN global_symbols gs ON m.symbol_id = gs.id
40
- WHERE m.symbol_id = ?
41
- AND ${db.localSymbolPredicate}
42
- AND m.role != 1
43
- ORDER BY d.relative_path, c.start_line`,
44
- match?.symbolId ?? -1
45
- );
46
- const referenceRows = rows.filter((r) => !db.isIgnored(r.relative_path)).map((r) => ({
47
- relativePath: r.relative_path,
48
- line: r.start_line
49
- }));
50
- if (!match || db.isIgnored(match.relativePath) || isFunctionLikeSymbol(match.symbol)) {
51
- return referenceRows;
52
- }
53
- const seen = new Set(referenceRows.map((row) => `${row.relativePath}:${row.line}`));
54
- if (!seen.has(`${match.relativePath}:${match.startLine}`)) {
55
- referenceRows.unshift({
56
- relativePath: match.relativePath,
57
- line: match.startLine
58
- });
59
- }
60
- for (const row of getRubySemanticRefs(db, match)) {
61
- const key = `${row.relativePath}:${row.line}`;
62
- if (seen.has(key)) continue;
63
- seen.add(key);
64
- referenceRows.push(row);
65
- }
66
- return referenceRows;
67
- }
68
- function getRubySemanticRefs(db, match) {
69
- if (!match.relativePath.endsWith(".rb")) {
70
- return [];
71
- }
72
- const tokens = rubyReferenceTokens(match.symbol);
73
- if (tokens.length === 0) {
74
- return [];
75
- }
76
- const rows = db.all(
77
- `SELECT relative_path
78
- FROM documents
79
- WHERE relative_path LIKE '%.rb'
80
- ${db.pathExclusionsFor("documents")}
81
- ORDER BY relative_path`
82
- );
83
- const results = [];
84
- for (const row of rows) {
85
- if (db.isIgnored(row.relative_path)) continue;
86
- const source = getSourceText(db, row.relative_path);
87
- if (!source) continue;
88
- const lines = source.split("\n");
89
- for (let index = 0; index < lines.length; index++) {
90
- const line = lines[index] ?? "";
91
- if (tokens.some((token) => new RegExp(`@${token}\\b|\\b${token}:`).test(line))) {
92
- results.push({
93
- relativePath: row.relative_path,
94
- line: index
95
- });
96
- }
97
- }
98
- }
99
- return results;
100
- }
101
- function rubyReferenceTokens(rawSymbol) {
102
- const leaf = rawSymbol.split(":").pop() ?? rawSymbol;
103
- const snake = leaf.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[^A-Za-z0-9_]+/g, "_").toLowerCase().replace(/^_+|_+$/g, "");
104
- const parts = snake.split("_").filter(Boolean);
105
- const candidates = /* @__PURE__ */ new Set();
106
- if (snake) candidates.add(snake);
107
- if (parts.length >= 1) candidates.add(parts[parts.length - 1]);
108
- if (parts.length >= 2) candidates.add(parts.slice(-2).join("_"));
109
- return [...candidates];
110
- }
111
-
112
- export {
113
- refs
114
- };
115
- //# sourceMappingURL=chunk-J6QXMYAQ.js.map
@@ -1,51 +0,0 @@
1
- import {
2
- resolveIndexedPaths
3
- } from "./chunk-ALUFWH3U.js";
4
- import {
5
- shortenSymbol
6
- } from "./chunk-TO3L4YNK.js";
7
-
8
- // src/queries/outline.ts
9
- function outline(db, filePattern) {
10
- const resolvedPaths = resolveIndexedPaths(db, filePattern);
11
- if (resolvedPaths.length === 0) {
12
- return [];
13
- }
14
- const placeholders = resolvedPaths.map(() => "?").join(", ");
15
- const rows = db.all(
16
- `SELECT gs.symbol, gs.enclosing_symbol, der.start_line, der.end_line
17
- FROM defn_enclosing_ranges der
18
- JOIN global_symbols gs ON der.symbol_id = gs.id
19
- JOIN documents d ON der.document_id = d.id
20
- WHERE d.relative_path IN (${placeholders})
21
- ${db.symbolNoise}
22
- ORDER BY d.relative_path, der.start_line`,
23
- ...resolvedPaths
24
- );
25
- const nodeMap = /* @__PURE__ */ new Map();
26
- const roots = [];
27
- for (const r of rows) {
28
- const node = {
29
- symbol: r.symbol,
30
- shortName: shortenSymbol(r.symbol),
31
- startLine: r.start_line,
32
- endLine: r.end_line,
33
- children: []
34
- };
35
- nodeMap.set(r.symbol, node);
36
- }
37
- for (const r of rows) {
38
- const node = nodeMap.get(r.symbol);
39
- if (r.enclosing_symbol && nodeMap.has(r.enclosing_symbol)) {
40
- nodeMap.get(r.enclosing_symbol).children.push(node);
41
- } else {
42
- roots.push(node);
43
- }
44
- }
45
- return roots;
46
- }
47
-
48
- export {
49
- outline
50
- };
51
- //# sourceMappingURL=chunk-KYPXKV64.js.map