semantic-complexity 0.0.6-dd9be98d → 0.0.13-2aaf183b

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 (163) hide show
  1. package/dist/__tests__/analyzers.test.d.ts +5 -0
  2. package/dist/__tests__/analyzers.test.d.ts.map +1 -0
  3. package/dist/__tests__/analyzers.test.js +357 -0
  4. package/dist/__tests__/analyzers.test.js.map +1 -0
  5. package/dist/__tests__/gate.test.d.ts +5 -0
  6. package/dist/__tests__/gate.test.d.ts.map +1 -0
  7. package/dist/__tests__/gate.test.js +140 -0
  8. package/dist/__tests__/gate.test.js.map +1 -0
  9. package/dist/analyzers/bread.d.ts +63 -0
  10. package/dist/analyzers/bread.d.ts.map +1 -0
  11. package/dist/analyzers/bread.js +415 -0
  12. package/dist/analyzers/bread.js.map +1 -0
  13. package/dist/analyzers/cheese.d.ts +111 -0
  14. package/dist/analyzers/cheese.d.ts.map +1 -0
  15. package/dist/analyzers/cheese.js +881 -0
  16. package/dist/analyzers/cheese.js.map +1 -0
  17. package/dist/analyzers/ham.d.ts +33 -0
  18. package/dist/analyzers/ham.d.ts.map +1 -0
  19. package/dist/analyzers/ham.js +264 -0
  20. package/dist/analyzers/ham.js.map +1 -0
  21. package/dist/analyzers/index.d.ts +7 -0
  22. package/dist/analyzers/index.d.ts.map +1 -0
  23. package/dist/analyzers/index.js +7 -0
  24. package/dist/analyzers/index.js.map +1 -0
  25. package/dist/budget/index.d.ts +50 -0
  26. package/dist/budget/index.d.ts.map +1 -0
  27. package/dist/budget/index.js +138 -0
  28. package/dist/budget/index.js.map +1 -0
  29. package/dist/cli/index.d.ts +6 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +103 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/gate/index.d.ts +31 -0
  34. package/dist/gate/index.d.ts.map +1 -0
  35. package/dist/gate/index.js +117 -0
  36. package/dist/gate/index.js.map +1 -0
  37. package/dist/gate/waiver.d.ts +54 -0
  38. package/dist/gate/waiver.d.ts.map +1 -0
  39. package/dist/gate/waiver.js +280 -0
  40. package/dist/gate/waiver.js.map +1 -0
  41. package/dist/index.d.ts +8 -34
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +8 -49
  44. package/dist/index.js.map +1 -1
  45. package/dist/mcp/index.d.ts +5 -0
  46. package/dist/mcp/index.d.ts.map +1 -0
  47. package/dist/mcp/index.js +140 -0
  48. package/dist/mcp/index.js.map +1 -0
  49. package/dist/recommend/index.d.ts +32 -0
  50. package/dist/recommend/index.d.ts.map +1 -0
  51. package/dist/recommend/index.js +169 -0
  52. package/dist/recommend/index.js.map +1 -0
  53. package/dist/simplex/index.d.ts +26 -0
  54. package/dist/simplex/index.d.ts.map +1 -0
  55. package/dist/simplex/index.js +100 -0
  56. package/dist/simplex/index.js.map +1 -0
  57. package/dist/types/index.d.ts +39 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +5 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/package.json +27 -52
  62. package/LICENSE +0 -21
  63. package/README.md +0 -72
  64. package/dist/ast/index.d.ts +0 -2
  65. package/dist/ast/index.d.ts.map +0 -1
  66. package/dist/ast/index.js +0 -2
  67. package/dist/ast/index.js.map +0 -1
  68. package/dist/ast/parser.d.ts +0 -27
  69. package/dist/ast/parser.d.ts.map +0 -1
  70. package/dist/ast/parser.js +0 -273
  71. package/dist/ast/parser.js.map +0 -1
  72. package/dist/canonical/convergence.d.ts +0 -56
  73. package/dist/canonical/convergence.d.ts.map +0 -1
  74. package/dist/canonical/convergence.js +0 -149
  75. package/dist/canonical/convergence.js.map +0 -1
  76. package/dist/canonical/index.d.ts +0 -11
  77. package/dist/canonical/index.d.ts.map +0 -1
  78. package/dist/canonical/index.js +0 -11
  79. package/dist/canonical/index.js.map +0 -1
  80. package/dist/canonical/profiles.d.ts +0 -40
  81. package/dist/canonical/profiles.d.ts.map +0 -1
  82. package/dist/canonical/profiles.js +0 -182
  83. package/dist/canonical/profiles.js.map +0 -1
  84. package/dist/canonical/types.d.ts +0 -124
  85. package/dist/canonical/types.d.ts.map +0 -1
  86. package/dist/canonical/types.js +0 -46
  87. package/dist/canonical/types.js.map +0 -1
  88. package/dist/compare.d.ts +0 -31
  89. package/dist/compare.d.ts.map +0 -1
  90. package/dist/compare.js +0 -354
  91. package/dist/compare.js.map +0 -1
  92. package/dist/context/index.d.ts +0 -41
  93. package/dist/context/index.d.ts.map +0 -1
  94. package/dist/context/index.js +0 -253
  95. package/dist/context/index.js.map +0 -1
  96. package/dist/gates/delta.d.ts +0 -45
  97. package/dist/gates/delta.d.ts.map +0 -1
  98. package/dist/gates/delta.js +0 -260
  99. package/dist/gates/delta.js.map +0 -1
  100. package/dist/gates/index.d.ts +0 -9
  101. package/dist/gates/index.d.ts.map +0 -1
  102. package/dist/gates/index.js +0 -9
  103. package/dist/gates/index.js.map +0 -1
  104. package/dist/gates/types.d.ts +0 -96
  105. package/dist/gates/types.d.ts.map +0 -1
  106. package/dist/gates/types.js +0 -59
  107. package/dist/gates/types.js.map +0 -1
  108. package/dist/graph/call.d.ts +0 -63
  109. package/dist/graph/call.d.ts.map +0 -1
  110. package/dist/graph/call.js +0 -240
  111. package/dist/graph/call.js.map +0 -1
  112. package/dist/graph/dependency.d.ts +0 -52
  113. package/dist/graph/dependency.d.ts.map +0 -1
  114. package/dist/graph/dependency.js +0 -296
  115. package/dist/graph/dependency.js.map +0 -1
  116. package/dist/graph/index.d.ts +0 -3
  117. package/dist/graph/index.d.ts.map +0 -1
  118. package/dist/graph/index.js +0 -3
  119. package/dist/graph/index.js.map +0 -1
  120. package/dist/metrics/cognitive.d.ts +0 -42
  121. package/dist/metrics/cognitive.d.ts.map +0 -1
  122. package/dist/metrics/cognitive.js +0 -204
  123. package/dist/metrics/cognitive.js.map +0 -1
  124. package/dist/metrics/cyclomatic.d.ts +0 -31
  125. package/dist/metrics/cyclomatic.d.ts.map +0 -1
  126. package/dist/metrics/cyclomatic.js +0 -121
  127. package/dist/metrics/cyclomatic.js.map +0 -1
  128. package/dist/metrics/dimensional.d.ts +0 -32
  129. package/dist/metrics/dimensional.d.ts.map +0 -1
  130. package/dist/metrics/dimensional.js +0 -560
  131. package/dist/metrics/dimensional.js.map +0 -1
  132. package/dist/metrics/index.d.ts +0 -26
  133. package/dist/metrics/index.d.ts.map +0 -1
  134. package/dist/metrics/index.js +0 -120
  135. package/dist/metrics/index.js.map +0 -1
  136. package/dist/metrics/meta.d.ts +0 -90
  137. package/dist/metrics/meta.d.ts.map +0 -1
  138. package/dist/metrics/meta.js +0 -144
  139. package/dist/metrics/meta.js.map +0 -1
  140. package/dist/tensor/canonical.d.ts +0 -53
  141. package/dist/tensor/canonical.d.ts.map +0 -1
  142. package/dist/tensor/canonical.js +0 -192
  143. package/dist/tensor/canonical.js.map +0 -1
  144. package/dist/tensor/index.d.ts +0 -22
  145. package/dist/tensor/index.d.ts.map +0 -1
  146. package/dist/tensor/index.js +0 -22
  147. package/dist/tensor/index.js.map +0 -1
  148. package/dist/tensor/matrix.d.ts +0 -62
  149. package/dist/tensor/matrix.d.ts.map +0 -1
  150. package/dist/tensor/matrix.js +0 -187
  151. package/dist/tensor/matrix.js.map +0 -1
  152. package/dist/tensor/scoring.d.ts +0 -82
  153. package/dist/tensor/scoring.d.ts.map +0 -1
  154. package/dist/tensor/scoring.js +0 -233
  155. package/dist/tensor/scoring.js.map +0 -1
  156. package/dist/tensor/types.d.ts +0 -186
  157. package/dist/tensor/types.d.ts.map +0 -1
  158. package/dist/tensor/types.js +0 -15
  159. package/dist/tensor/types.js.map +0 -1
  160. package/dist/types.d.ts +0 -341
  161. package/dist/types.d.ts.map +0 -1
  162. package/dist/types.js +0 -22
  163. package/dist/types.js.map +0 -1
package/dist/compare.js DELETED
@@ -1,354 +0,0 @@
1
- /**
2
- * McCabe 순환복잡도 vs 차원 복잡도 비교 분석기
3
- *
4
- * 사용법:
5
- * npx tsx src/compare.ts <파일경로>
6
- * npx tsx src/compare.ts <파일경로> --json
7
- * npx tsx src/compare.ts <파일경로> --threshold=10
8
- */
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import ts from 'typescript';
12
- import { parseSourceFile, extractFunctionInfo } from './ast/parser.js';
13
- import { analyzeFunctionExtended } from './metrics/index.js';
14
- // ─────────────────────────────────────────────────────────────────
15
- // 등급 판정
16
- // ─────────────────────────────────────────────────────────────────
17
- function getMcCabeGrade(complexity) {
18
- if (complexity <= 5)
19
- return 'low';
20
- if (complexity <= 10)
21
- return 'moderate';
22
- if (complexity <= 20)
23
- return 'high';
24
- return 'very-high';
25
- }
26
- function getCognitiveGrade(complexity) {
27
- if (complexity <= 5)
28
- return 'low';
29
- if (complexity <= 10)
30
- return 'moderate';
31
- if (complexity <= 15)
32
- return 'high';
33
- return 'very-high';
34
- }
35
- // ─────────────────────────────────────────────────────────────────
36
- // 스칼라 점수 계산 (dimensional.ts와 동일 로직)
37
- // ─────────────────────────────────────────────────────────────────
38
- function scoreState(result) {
39
- const s = result.dimensional.state;
40
- return (s.enumStates * 1 +
41
- s.stateMutations * 2 +
42
- s.stateReads * 0.5 +
43
- s.stateBranches * 3 +
44
- s.stateMachinePatterns.length * 5);
45
- }
46
- function scoreAsync(result) {
47
- const a = result.dimensional.async;
48
- return (a.asyncBoundaries * 1 +
49
- a.promiseChains * 2 +
50
- a.retryPatterns * 3 +
51
- a.timeouts * 2 +
52
- a.callbackDepth * 3 +
53
- a.concurrencyPatterns.length * 4 +
54
- a.asyncErrorBoundaries * 1);
55
- }
56
- function scoreCoupling(result) {
57
- const c = result.dimensional.coupling;
58
- return (c.globalAccess.length * 2 +
59
- c.implicitIO.length * 2 +
60
- c.sideEffects.length * 3 +
61
- c.envDependency.length * 2 +
62
- c.closureCaptures.length * 1);
63
- }
64
- // ─────────────────────────────────────────────────────────────────
65
- // 인사이트 생성
66
- // ─────────────────────────────────────────────────────────────────
67
- function generateInsights(result) {
68
- const insights = [];
69
- const d = result.dimensional;
70
- // McCabe vs 차원 복잡도 비교
71
- const mccabe = result.cyclomatic;
72
- const weighted = d.weighted;
73
- if (weighted > mccabe * 2) {
74
- insights.push(`⚠️ 차원 복잡도(${weighted.toFixed(1)})가 McCabe(${mccabe})의 2배 이상 - 숨은 복잡도 존재`);
75
- }
76
- // 차원별 분석
77
- const stateScore = scoreState(result);
78
- const asyncScore = scoreAsync(result);
79
- const couplingScore = scoreCoupling(result);
80
- // 3D 상태
81
- if (d.state.stateMutations > 3) {
82
- insights.push(`🔄 상태 변경 ${d.state.stateMutations}회 - 상태 관리 복잡도 높음`);
83
- }
84
- if (d.state.stateMachinePatterns.length > 0) {
85
- insights.push(`🎛️ 상태 머신 패턴 ${d.state.stateMachinePatterns.length}개 탐지`);
86
- }
87
- // 4D 비동기
88
- if (d.async.callbackDepth > 2) {
89
- insights.push(`📥 콜백 중첩 깊이 ${d.async.callbackDepth} - 콜백 지옥 위험`);
90
- }
91
- if (d.async.concurrencyPatterns.length > 1) {
92
- insights.push(`⚡ 동시성 패턴 ${d.async.concurrencyPatterns.length}개 - 레이스 컨디션 주의`);
93
- }
94
- if (d.async.asyncErrorBoundaries === 0 && d.async.asyncBoundaries > 0) {
95
- insights.push(`🚨 비동기 코드에 에러 처리 없음`);
96
- }
97
- // 5D 결합
98
- if (d.coupling.globalAccess.length > 2) {
99
- insights.push(`🌐 전역 접근 ${d.coupling.globalAccess.length}회 - 테스트 어려움`);
100
- }
101
- if (d.coupling.sideEffects.length > 2) {
102
- insights.push(`💥 부작용 ${d.coupling.sideEffects.length}개 - 예측 불가능성 증가`);
103
- }
104
- if (d.coupling.closureCaptures.length > 3) {
105
- insights.push(`🔒 클로저 캡처 ${d.coupling.closureCaptures.length}개 - 메모리 누수 주의`);
106
- }
107
- // 차원 불균형 분석
108
- const scores = [
109
- { name: '상태(3D)', score: stateScore },
110
- { name: '비동기(4D)', score: asyncScore },
111
- { name: '결합(5D)', score: couplingScore },
112
- ].filter((s) => s.score > 0);
113
- if (scores.length > 0) {
114
- const maxScore = Math.max(...scores.map((s) => s.score));
115
- const dominant = scores.find((s) => s.score === maxScore);
116
- if (dominant && maxScore > 5) {
117
- insights.push(`📊 주요 복잡도 원인: ${dominant.name} (점수: ${maxScore.toFixed(1)})`);
118
- }
119
- }
120
- return insights;
121
- }
122
- // ─────────────────────────────────────────────────────────────────
123
- // 파일 분석
124
- // ─────────────────────────────────────────────────────────────────
125
- export function analyzeFile(filePath) {
126
- const content = fs.readFileSync(filePath, 'utf-8');
127
- const sourceFile = parseSourceFile(filePath, content);
128
- const results = [];
129
- function visit(node) {
130
- const funcInfo = extractFunctionInfo(node, sourceFile);
131
- if (funcInfo) {
132
- const result = analyzeFunctionExtended(node, sourceFile, funcInfo);
133
- const loc = funcInfo.location;
134
- const stateScore = scoreState(result);
135
- const asyncScore = scoreAsync(result);
136
- const couplingScore = scoreCoupling(result);
137
- const comparison = {
138
- function: funcInfo.name,
139
- location: `${path.basename(filePath)}:${loc.startLine}`,
140
- mccabe: result.cyclomatic,
141
- mccabeGrade: getMcCabeGrade(result.cyclomatic),
142
- cognitive: result.cognitive,
143
- cognitiveGrade: getCognitiveGrade(result.cognitive),
144
- dimensional: {
145
- weighted: result.dimensional.weighted,
146
- control: result.dimensional.control,
147
- nesting: result.dimensional.nesting,
148
- state: stateScore,
149
- async: asyncScore,
150
- coupling: couplingScore,
151
- },
152
- insights: generateInsights(result),
153
- hotspots: result.dimensional.hotspots,
154
- dimensionalRatio: result.cyclomatic > 0
155
- ? Math.round((result.dimensional.weighted / result.cyclomatic) * 100) / 100
156
- : 0,
157
- };
158
- results.push(comparison);
159
- }
160
- ts.forEachChild(node, visit);
161
- }
162
- ts.forEachChild(sourceFile, visit);
163
- return results;
164
- }
165
- // ─────────────────────────────────────────────────────────────────
166
- // 콘솔 출력
167
- // ─────────────────────────────────────────────────────────────────
168
- function printComparison(results, threshold = 0) {
169
- const filtered = results.filter((r) => r.mccabe >= threshold || r.dimensional.weighted >= threshold);
170
- if (filtered.length === 0) {
171
- console.log(`\n임계값 ${threshold} 이상인 함수가 없습니다.\n`);
172
- return;
173
- }
174
- console.log('\n' + '═'.repeat(80));
175
- console.log(' McCabe vs 차원 복잡도 비교 분석');
176
- console.log('═'.repeat(80));
177
- // 헤더
178
- console.log('\n' +
179
- '함수명'.padEnd(30) +
180
- 'McCabe'.padStart(8) +
181
- 'Cognitive'.padStart(10) +
182
- 'Dimensional'.padStart(12) +
183
- 'Ratio'.padStart(8));
184
- console.log('-'.repeat(68));
185
- for (const r of filtered.sort((a, b) => b.dimensional.weighted - a.dimensional.weighted)) {
186
- console.log(r.function.slice(0, 28).padEnd(30) +
187
- `${r.mccabe}`.padStart(8) +
188
- `${r.cognitive}`.padStart(10) +
189
- `${r.dimensional.weighted.toFixed(1)}`.padStart(12) +
190
- `${r.dimensionalRatio}x`.padStart(8));
191
- // 차원별 분포
192
- const dims = r.dimensional;
193
- const bar = (score, max = 20) => {
194
- const filled = Math.min(Math.round((score / max) * 10), 10);
195
- return '█'.repeat(filled) + '░'.repeat(10 - filled);
196
- };
197
- console.log(` └─ 1D 제어: ${bar(dims.control)} ${dims.control.toFixed(1)}`);
198
- console.log(` 2D 중첩: ${bar(dims.nesting)} ${dims.nesting.toFixed(1)}`);
199
- console.log(` 3D 상태: ${bar(dims.state)} ${dims.state.toFixed(1)}`);
200
- console.log(` 4D 비동기: ${bar(dims.async)} ${dims.async.toFixed(1)}`);
201
- console.log(` 5D 결합: ${bar(dims.coupling)} ${dims.coupling.toFixed(1)}`);
202
- // 인사이트
203
- if (r.insights.length > 0) {
204
- console.log(' 인사이트:');
205
- for (const insight of r.insights) {
206
- console.log(` ${insight}`);
207
- }
208
- }
209
- console.log();
210
- }
211
- // 요약 통계
212
- console.log('─'.repeat(80));
213
- console.log('📊 요약 통계');
214
- console.log('─'.repeat(80));
215
- const avgMccabe = filtered.reduce((s, r) => s + r.mccabe, 0) / filtered.length;
216
- const avgDimensional = filtered.reduce((s, r) => s + r.dimensional.weighted, 0) / filtered.length;
217
- const avgRatio = filtered.reduce((s, r) => s + r.dimensionalRatio, 0) / filtered.length;
218
- console.log(` 분석 함수: ${filtered.length}개`);
219
- console.log(` 평균 McCabe: ${avgMccabe.toFixed(1)}`);
220
- console.log(` 평균 차원 복잡도: ${avgDimensional.toFixed(1)}`);
221
- console.log(` 평균 비율 (차원/McCabe): ${avgRatio.toFixed(2)}x`);
222
- // 고위험 함수
223
- const highRisk = filtered.filter((r) => r.dimensionalRatio > 2 || r.dimensional.weighted > 20);
224
- if (highRisk.length > 0) {
225
- console.log(`\n ⚠️ 고위험 함수 (ratio > 2x 또는 weighted > 20):`);
226
- for (const r of highRisk) {
227
- console.log(` - ${r.function} @ ${r.location}`);
228
- }
229
- }
230
- console.log('\n' + '═'.repeat(80));
231
- }
232
- // ─────────────────────────────────────────────────────────────────
233
- // 해석 가이드 출력
234
- // ─────────────────────────────────────────────────────────────────
235
- function printGuide() {
236
- console.log(`
237
- ╔════════════════════════════════════════════════════════════════════════════╗
238
- ║ McCabe vs 차원 복잡도 해석 가이드 ║
239
- ╠════════════════════════════════════════════════════════════════════════════╣
240
- ║ ║
241
- ║ 📐 McCabe 순환복잡도 (1976) ║
242
- ║ ───────────────────────────────────────────────────────────────────────── ║
243
- ║ • 정의: 분기점 개수 + 1 ║
244
- ║ • 측정: if, switch case, for, while, catch, &&, ||, ?: ║
245
- ║ • 한계: 중첩 무시, 상태/비동기/결합 미반영 ║
246
- ║ ║
247
- ║ 등급 기준: ║
248
- ║ 🟢 1-5: Low (단순, 테스트 용이) ║
249
- ║ 🟡 6-10: Moderate (적정) ║
250
- ║ 🟠 11-20: High (리팩토링 권장) ║
251
- ║ 🔴 21+: Very High (반드시 리팩토링) ║
252
- ║ ║
253
- ╠════════════════════════════════════════════════════════════════════════════╣
254
- ║ ║
255
- ║ 🧠 차원 복잡도 (Dimensional Complexity) ║
256
- ║ ───────────────────────────────────────────────────────────────────────── ║
257
- ║ ║
258
- ║ 1D 제어 (×1.0): 순환복잡도 기반 ║
259
- ║ 2D 중첩 (×1.5): 중첩으로 인한 인지 부하 ║
260
- ║ 3D 상태 (×2.0): 상태 변수, 상태 머신 패턴 ║
261
- ║ 4D 비동기 (×2.5): async/await, Promise, 콜백 ║
262
- ║ 5D 결합 (×3.0): 전역 접근, I/O, 부작용, 환경 의존 ║
263
- ║ ║
264
- ║ 가중치 근거: ║
265
- ║ • 상태: 버그 발생률 2배 (IBM 연구) ║
266
- ║ • 비동기: 디버깅 시간 2.5배 (Salesforce 연구) ║
267
- ║ • 결합: 테스트 커버리지 달성 3배 어려움 ║
268
- ║ ║
269
- ╠════════════════════════════════════════════════════════════════════════════╣
270
- ║ ║
271
- ║ 📊 비율 (Ratio) 해석 ║
272
- ║ ───────────────────────────────────────────────────────────────────────── ║
273
- ║ ║
274
- ║ Ratio = 차원 복잡도 / McCabe ║
275
- ║ ║
276
- ║ • < 1.5: 순수한 제어 흐름 중심 (McCabe로 충분) ║
277
- ║ • 1.5-2.0: 중첩/상태가 추가됨 (주의 필요) ║
278
- ║ • 2.0-3.0: 비동기/결합 복잡도 높음 (리팩토링 권장) ║
279
- ║ • > 3.0: 숨은 복잡도 심각 (McCabe가 과소평가) ║
280
- ║ ║
281
- ╠════════════════════════════════════════════════════════════════════════════╣
282
- ║ ║
283
- ║ 🎯 실무 권장 임계값 ║
284
- ║ ───────────────────────────────────────────────────────────────────────── ║
285
- ║ ║
286
- ║ PoC/MVP 단계: ║
287
- ║ • McCabe ≤ 15 ║
288
- ║ • 차원 복잡도 ≤ 30 ║
289
- ║ ║
290
- ║ Production 단계: ║
291
- ║ • McCabe ≤ 10 ║
292
- ║ • 차원 복잡도 ≤ 20 ║
293
- ║ • Ratio ≤ 2.0 ║
294
- ║ ║
295
- ║ Mission Critical: ║
296
- ║ • McCabe ≤ 5 ║
297
- ║ • 차원 복잡도 ≤ 10 ║
298
- ║ • 5D 결합 = 0 (순수 함수) ║
299
- ║ ║
300
- ╚════════════════════════════════════════════════════════════════════════════╝
301
- `);
302
- }
303
- // ─────────────────────────────────────────────────────────────────
304
- // CLI 엔트리포인트
305
- // ─────────────────────────────────────────────────────────────────
306
- function main() {
307
- const args = process.argv.slice(2);
308
- if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
309
- console.log(`
310
- 사용법:
311
- npx tsx src/compare.ts <파일경로> [옵션]
312
-
313
- 옵션:
314
- --json JSON 형식으로 출력
315
- --threshold=N 복잡도 N 이상인 함수만 표시 (기본: 0)
316
- --guide 해석 가이드 표시
317
- --help, -h 도움말
318
-
319
- 예제:
320
- npx tsx src/compare.ts ./src/components/Signup.tsx
321
- npx tsx src/compare.ts ./src/api/handler.ts --threshold=5
322
- npx tsx src/compare.ts ./src/utils.ts --json
323
- npx tsx src/compare.ts --guide
324
- `);
325
- return;
326
- }
327
- if (args.includes('--guide')) {
328
- printGuide();
329
- return;
330
- }
331
- const filePath = args.find((a) => !a.startsWith('--'));
332
- if (!filePath) {
333
- console.error('파일 경로를 지정해주세요.');
334
- process.exit(1);
335
- }
336
- const resolvedPath = path.resolve(filePath);
337
- if (!fs.existsSync(resolvedPath)) {
338
- console.error(`파일을 찾을 수 없습니다: ${resolvedPath}`);
339
- process.exit(1);
340
- }
341
- const isJson = args.includes('--json');
342
- const thresholdArg = args.find((a) => a.startsWith('--threshold='));
343
- const threshold = thresholdArg ? parseInt(thresholdArg.split('=')[1], 10) : 0;
344
- const results = analyzeFile(resolvedPath);
345
- if (isJson) {
346
- console.log(JSON.stringify(results, null, 2));
347
- }
348
- else {
349
- printGuide();
350
- printComparison(results, threshold);
351
- }
352
- }
353
- main();
354
- //# sourceMappingURL=compare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import type { AnalysisContext, AnalysisOptions } from '../types.js';
2
- /**
3
- * MCP용 분석 컨텍스트 수집기
4
- *
5
- * LLM이 인지복잡도를 정확히 판단할 수 있도록
6
- * 코드와 관련된 모든 컨텍스트를 수집합니다.
7
- */
8
- export declare class ContextCollector {
9
- private options;
10
- private projectRoot;
11
- private dependencyGraph;
12
- private projectInfo?;
13
- constructor(projectRoot: string, options?: Partial<AnalysisOptions>);
14
- /**
15
- * 파일에 대한 전체 분석 컨텍스트 수집
16
- */
17
- collectContext(filePath: string): Promise<AnalysisContext>;
18
- /**
19
- * MCP 응답용 프롬프트 생성
20
- *
21
- * LLM이 인지복잡도를 판단할 수 있도록
22
- * 구조화된 프롬프트를 생성합니다.
23
- */
24
- generatePrompt(context: AnalysisContext, functionName?: string): string;
25
- /**
26
- * 관련 파일 분석
27
- */
28
- private analyzeRelatedFiles;
29
- /**
30
- * 프로젝트 정보 감지
31
- */
32
- private detectProjectInfo;
33
- }
34
- /**
35
- * 단일 파일 빠른 분석 (MCP 도구용)
36
- */
37
- export declare function quickAnalyze(filePath: string, functionName?: string): Promise<{
38
- context: AnalysisContext;
39
- prompt: string;
40
- }>;
41
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAGhB,MAAM,aAAa,CAAC;AAMrB;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAc;gBAEtB,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAOnE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA8BhE;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IA6FvE;;OAEG;YACW,mBAAmB;IAuBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAsD1B;AAgBD;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvD"}