semantic-complexity 0.0.1-44fdea25
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/LICENSE +21 -0
- package/dist/ast/index.d.ts +2 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +2 -0
- package/dist/ast/index.js.map +1 -0
- package/dist/ast/parser.d.ts +27 -0
- package/dist/ast/parser.d.ts.map +1 -0
- package/dist/ast/parser.js +273 -0
- package/dist/ast/parser.js.map +1 -0
- package/dist/compare.d.ts +31 -0
- package/dist/compare.d.ts.map +1 -0
- package/dist/compare.js +354 -0
- package/dist/compare.js.map +1 -0
- package/dist/context/index.d.ts +41 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +253 -0
- package/dist/context/index.js.map +1 -0
- package/dist/graph/call.d.ts +63 -0
- package/dist/graph/call.d.ts.map +1 -0
- package/dist/graph/call.js +240 -0
- package/dist/graph/call.js.map +1 -0
- package/dist/graph/dependency.d.ts +52 -0
- package/dist/graph/dependency.d.ts.map +1 -0
- package/dist/graph/dependency.js +296 -0
- package/dist/graph/dependency.js.map +1 -0
- package/dist/graph/index.d.ts +3 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +3 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/cognitive.d.ts +42 -0
- package/dist/metrics/cognitive.d.ts.map +1 -0
- package/dist/metrics/cognitive.js +204 -0
- package/dist/metrics/cognitive.js.map +1 -0
- package/dist/metrics/cyclomatic.d.ts +31 -0
- package/dist/metrics/cyclomatic.d.ts.map +1 -0
- package/dist/metrics/cyclomatic.js +121 -0
- package/dist/metrics/cyclomatic.js.map +1 -0
- package/dist/metrics/dimensional.d.ts +32 -0
- package/dist/metrics/dimensional.d.ts.map +1 -0
- package/dist/metrics/dimensional.js +560 -0
- package/dist/metrics/dimensional.js.map +1 -0
- package/dist/metrics/index.d.ts +26 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +120 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/types.d.ts +341 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/compare.js
ADDED
|
@@ -0,0 +1,354 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|