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.
- package/dist/__tests__/analyzers.test.d.ts +5 -0
- package/dist/__tests__/analyzers.test.d.ts.map +1 -0
- package/dist/__tests__/analyzers.test.js +357 -0
- package/dist/__tests__/analyzers.test.js.map +1 -0
- package/dist/__tests__/gate.test.d.ts +5 -0
- package/dist/__tests__/gate.test.d.ts.map +1 -0
- package/dist/__tests__/gate.test.js +140 -0
- package/dist/__tests__/gate.test.js.map +1 -0
- package/dist/analyzers/bread.d.ts +63 -0
- package/dist/analyzers/bread.d.ts.map +1 -0
- package/dist/analyzers/bread.js +415 -0
- package/dist/analyzers/bread.js.map +1 -0
- package/dist/analyzers/cheese.d.ts +111 -0
- package/dist/analyzers/cheese.d.ts.map +1 -0
- package/dist/analyzers/cheese.js +881 -0
- package/dist/analyzers/cheese.js.map +1 -0
- package/dist/analyzers/ham.d.ts +33 -0
- package/dist/analyzers/ham.d.ts.map +1 -0
- package/dist/analyzers/ham.js +264 -0
- package/dist/analyzers/ham.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +7 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/budget/index.d.ts +50 -0
- package/dist/budget/index.d.ts.map +1 -0
- package/dist/budget/index.js +138 -0
- package/dist/budget/index.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +103 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/gate/index.d.ts +31 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/index.js +117 -0
- package/dist/gate/index.js.map +1 -0
- package/dist/gate/waiver.d.ts +54 -0
- package/dist/gate/waiver.d.ts.map +1 -0
- package/dist/gate/waiver.js +280 -0
- package/dist/gate/waiver.js.map +1 -0
- package/dist/index.d.ts +8 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -49
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +140 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/recommend/index.d.ts +32 -0
- package/dist/recommend/index.d.ts.map +1 -0
- package/dist/recommend/index.js +169 -0
- package/dist/recommend/index.js.map +1 -0
- package/dist/simplex/index.d.ts +26 -0
- package/dist/simplex/index.d.ts.map +1 -0
- package/dist/simplex/index.js +100 -0
- package/dist/simplex/index.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +27 -52
- package/LICENSE +0 -21
- package/README.md +0 -72
- package/dist/ast/index.d.ts +0 -2
- package/dist/ast/index.d.ts.map +0 -1
- package/dist/ast/index.js +0 -2
- package/dist/ast/index.js.map +0 -1
- package/dist/ast/parser.d.ts +0 -27
- package/dist/ast/parser.d.ts.map +0 -1
- package/dist/ast/parser.js +0 -273
- package/dist/ast/parser.js.map +0 -1
- package/dist/canonical/convergence.d.ts +0 -56
- package/dist/canonical/convergence.d.ts.map +0 -1
- package/dist/canonical/convergence.js +0 -149
- package/dist/canonical/convergence.js.map +0 -1
- package/dist/canonical/index.d.ts +0 -11
- package/dist/canonical/index.d.ts.map +0 -1
- package/dist/canonical/index.js +0 -11
- package/dist/canonical/index.js.map +0 -1
- package/dist/canonical/profiles.d.ts +0 -40
- package/dist/canonical/profiles.d.ts.map +0 -1
- package/dist/canonical/profiles.js +0 -182
- package/dist/canonical/profiles.js.map +0 -1
- package/dist/canonical/types.d.ts +0 -124
- package/dist/canonical/types.d.ts.map +0 -1
- package/dist/canonical/types.js +0 -46
- package/dist/canonical/types.js.map +0 -1
- package/dist/compare.d.ts +0 -31
- package/dist/compare.d.ts.map +0 -1
- package/dist/compare.js +0 -354
- package/dist/compare.js.map +0 -1
- package/dist/context/index.d.ts +0 -41
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -253
- package/dist/context/index.js.map +0 -1
- package/dist/gates/delta.d.ts +0 -45
- package/dist/gates/delta.d.ts.map +0 -1
- package/dist/gates/delta.js +0 -260
- package/dist/gates/delta.js.map +0 -1
- package/dist/gates/index.d.ts +0 -9
- package/dist/gates/index.d.ts.map +0 -1
- package/dist/gates/index.js +0 -9
- package/dist/gates/index.js.map +0 -1
- package/dist/gates/types.d.ts +0 -96
- package/dist/gates/types.d.ts.map +0 -1
- package/dist/gates/types.js +0 -59
- package/dist/gates/types.js.map +0 -1
- package/dist/graph/call.d.ts +0 -63
- package/dist/graph/call.d.ts.map +0 -1
- package/dist/graph/call.js +0 -240
- package/dist/graph/call.js.map +0 -1
- package/dist/graph/dependency.d.ts +0 -52
- package/dist/graph/dependency.d.ts.map +0 -1
- package/dist/graph/dependency.js +0 -296
- package/dist/graph/dependency.js.map +0 -1
- package/dist/graph/index.d.ts +0 -3
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js +0 -3
- package/dist/graph/index.js.map +0 -1
- package/dist/metrics/cognitive.d.ts +0 -42
- package/dist/metrics/cognitive.d.ts.map +0 -1
- package/dist/metrics/cognitive.js +0 -204
- package/dist/metrics/cognitive.js.map +0 -1
- package/dist/metrics/cyclomatic.d.ts +0 -31
- package/dist/metrics/cyclomatic.d.ts.map +0 -1
- package/dist/metrics/cyclomatic.js +0 -121
- package/dist/metrics/cyclomatic.js.map +0 -1
- package/dist/metrics/dimensional.d.ts +0 -32
- package/dist/metrics/dimensional.d.ts.map +0 -1
- package/dist/metrics/dimensional.js +0 -560
- package/dist/metrics/dimensional.js.map +0 -1
- package/dist/metrics/index.d.ts +0 -26
- package/dist/metrics/index.d.ts.map +0 -1
- package/dist/metrics/index.js +0 -120
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/meta.d.ts +0 -90
- package/dist/metrics/meta.d.ts.map +0 -1
- package/dist/metrics/meta.js +0 -144
- package/dist/metrics/meta.js.map +0 -1
- package/dist/tensor/canonical.d.ts +0 -53
- package/dist/tensor/canonical.d.ts.map +0 -1
- package/dist/tensor/canonical.js +0 -192
- package/dist/tensor/canonical.js.map +0 -1
- package/dist/tensor/index.d.ts +0 -22
- package/dist/tensor/index.d.ts.map +0 -1
- package/dist/tensor/index.js +0 -22
- package/dist/tensor/index.js.map +0 -1
- package/dist/tensor/matrix.d.ts +0 -62
- package/dist/tensor/matrix.d.ts.map +0 -1
- package/dist/tensor/matrix.js +0 -187
- package/dist/tensor/matrix.js.map +0 -1
- package/dist/tensor/scoring.d.ts +0 -82
- package/dist/tensor/scoring.d.ts.map +0 -1
- package/dist/tensor/scoring.js +0 -233
- package/dist/tensor/scoring.js.map +0 -1
- package/dist/tensor/types.d.ts +0 -186
- package/dist/tensor/types.d.ts.map +0 -1
- package/dist/tensor/types.js +0 -15
- package/dist/tensor/types.js.map +0 -1
- package/dist/types.d.ts +0 -341
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -22
- 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
|
package/dist/compare.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
|
package/dist/context/index.d.ts
DELETED
|
@@ -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"}
|