ts-analyzer 1.3.7 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/bin/cli.ts +20 -4
- package/dist/bin/cli.js +17 -4
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/code-complexity.d.ts +27 -0
- package/dist/src/code-complexity.js +57 -4
- package/dist/src/code-complexity.js.map +1 -1
- package/dist/src/html-formatter.js +6 -0
- package/dist/src/html-formatter.js.map +1 -1
- package/package.json +1 -1
- package/src/code-complexity.ts +119 -47
- package/src/html-formatter.ts +6 -0
- package/test/complexity.test.ts +44 -2
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
- **Type Safety Checks**: It calculates your real type coverage. It tracks things like `any` usage, generics, and assertions.
|
|
14
14
|
- **Code Complexity**: It checks how hard your code is to read by measuring cyclomatic complexity and nested blocks.
|
|
15
|
-
- **Anti-patterns**: It spots bad practices like Magic Numbers, Callback Hell, huge files, and functions with too many parameters.
|
|
15
|
+
- **Anti-patterns**: It spots bad practices like Magic Numbers, Callback Hell, Duplicate Code, huge files, and functions with too many parameters.
|
|
16
16
|
- **Reports**: You can view the results as a nice HTML page, JSON, or just plain text in your terminal.
|
|
17
17
|
- **Tested**: The project has around 88% test coverage using Vitest.
|
|
18
18
|
|
|
@@ -68,6 +68,7 @@ It looks at your functions to see how complicated they are:
|
|
|
68
68
|
1. **Cyclomatic Complexity**: How many different paths your code can take.
|
|
69
69
|
2. **Nesting Depth**: How many blocks are inside each other (to avoid Callback Hell).
|
|
70
70
|
3. **Size**: How many lines and parameters your functions have.
|
|
71
|
+
4. **Duplicate Code**: It checks for structural clones and exactly repeated function logic across multiple files in your codebase.
|
|
71
72
|
|
|
72
73
|
Based on this, it gives a rating: <30 is simple, 30-60 is moderate, and >60 means it's too complex.
|
|
73
74
|
|
|
@@ -113,7 +114,13 @@ When you run `npx ts-analyzer /path -f json`, it generates structured data you c
|
|
|
113
114
|
"codeSmells": {
|
|
114
115
|
"magicNumbers": 0,
|
|
115
116
|
"callbackHell": 0,
|
|
117
|
+
"excessiveParameters": 0,
|
|
116
118
|
"godFiles": 0
|
|
119
|
+
},
|
|
120
|
+
"duplicateCode": {
|
|
121
|
+
"totalClones": 2,
|
|
122
|
+
"totalDuplicateLines": 24,
|
|
123
|
+
"clones": []
|
|
117
124
|
}
|
|
118
125
|
}
|
|
119
126
|
}
|
package/bin/cli.ts
CHANGED
|
@@ -24,7 +24,7 @@ interface ProgramOptions {
|
|
|
24
24
|
program
|
|
25
25
|
.name('ts-analyzer')
|
|
26
26
|
.description('Comprehensive TypeScript code analyzer with type safety and complexity metrics')
|
|
27
|
-
.version('1.
|
|
27
|
+
.version('1.4.0')
|
|
28
28
|
.argument('[dir]', 'project directory to analyze', '.')
|
|
29
29
|
.option('-e, --exclude <patterns>', 'additional patterns to exclude (comma-separated)')
|
|
30
30
|
.option('-i, --include <extensions>', 'additional file extensions to include (comma-separated)')
|
|
@@ -203,15 +203,25 @@ program
|
|
|
203
203
|
const hasSmells = stats.codeComplexity.codeSmells.callbackHell > 0 ||
|
|
204
204
|
stats.codeComplexity.codeSmells.godFiles > 0 ||
|
|
205
205
|
stats.codeComplexity.codeSmells.excessiveParameters > 0 ||
|
|
206
|
-
stats.codeComplexity.codeSmells.magicNumbers > 0
|
|
206
|
+
stats.codeComplexity.codeSmells.magicNumbers > 0 ||
|
|
207
|
+
(stats.codeComplexity.duplicateCode && stats.codeComplexity.duplicateCode.totalDuplicateLines > 0);
|
|
207
208
|
|
|
208
209
|
if (hasSmells) {
|
|
209
|
-
|
|
210
|
+
const smellsTable = [
|
|
210
211
|
{ metric: 'Callback Hell (Depth > 3)', value: stats.formatNumber(stats.codeComplexity.codeSmells.callbackHell) },
|
|
211
212
|
{ metric: 'God Files (> 500 lines)', value: stats.formatNumber(stats.codeComplexity.codeSmells.godFiles) },
|
|
212
213
|
{ metric: 'Excessive Params (> 4)', value: stats.formatNumber(stats.codeComplexity.codeSmells.excessiveParameters) },
|
|
213
214
|
{ metric: 'Magic Numbers', value: stats.formatNumber(stats.codeComplexity.codeSmells.magicNumbers) }
|
|
214
|
-
]
|
|
215
|
+
];
|
|
216
|
+
|
|
217
|
+
if (stats.codeComplexity.duplicateCode) {
|
|
218
|
+
smellsTable.push({
|
|
219
|
+
metric: 'Duplicate Code (Lines)',
|
|
220
|
+
value: `${stats.formatNumber(stats.codeComplexity.duplicateCode.totalDuplicateLines)} lines in ${stats.codeComplexity.duplicateCode.totalClones} clones`
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
formatTable(smellsTable);
|
|
215
225
|
} else {
|
|
216
226
|
console.log(useColors ? chalk.green('✓ No major code smells detected.') : '✓ No major code smells detected.');
|
|
217
227
|
}
|
|
@@ -284,6 +294,12 @@ program
|
|
|
284
294
|
? chalk.yellow(`• Address high complexity in ${stats.codeComplexity.complexFiles} files with potential technical debt`)
|
|
285
295
|
: `• Address high complexity in ${stats.codeComplexity.complexFiles} files with potential technical debt`);
|
|
286
296
|
}
|
|
297
|
+
|
|
298
|
+
if (stats.codeComplexity.duplicateCode && stats.codeComplexity.duplicateCode.totalDuplicateLines > 0) {
|
|
299
|
+
recommendations.push(useColors
|
|
300
|
+
? chalk.yellow(`• Extract duplicated code (${stats.codeComplexity.duplicateCode.totalDuplicateLines} duplicate lines) into shared helper functions or utilities`)
|
|
301
|
+
: `• Extract duplicated code (${stats.codeComplexity.duplicateCode.totalDuplicateLines} duplicate lines) into shared helper functions or utilities`);
|
|
302
|
+
}
|
|
287
303
|
}
|
|
288
304
|
|
|
289
305
|
if (recommendations.length > 0) {
|
package/dist/bin/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ const program = new Command();
|
|
|
13
13
|
program
|
|
14
14
|
.name('ts-analyzer')
|
|
15
15
|
.description('Comprehensive TypeScript code analyzer with type safety and complexity metrics')
|
|
16
|
-
.version('1.
|
|
16
|
+
.version('1.4.0')
|
|
17
17
|
.argument('[dir]', 'project directory to analyze', '.')
|
|
18
18
|
.option('-e, --exclude <patterns>', 'additional patterns to exclude (comma-separated)')
|
|
19
19
|
.option('-i, --include <extensions>', 'additional file extensions to include (comma-separated)')
|
|
@@ -183,14 +183,22 @@ program
|
|
|
183
183
|
const hasSmells = stats.codeComplexity.codeSmells.callbackHell > 0 ||
|
|
184
184
|
stats.codeComplexity.codeSmells.godFiles > 0 ||
|
|
185
185
|
stats.codeComplexity.codeSmells.excessiveParameters > 0 ||
|
|
186
|
-
stats.codeComplexity.codeSmells.magicNumbers > 0
|
|
186
|
+
stats.codeComplexity.codeSmells.magicNumbers > 0 ||
|
|
187
|
+
(stats.codeComplexity.duplicateCode && stats.codeComplexity.duplicateCode.totalDuplicateLines > 0);
|
|
187
188
|
if (hasSmells) {
|
|
188
|
-
|
|
189
|
+
const smellsTable = [
|
|
189
190
|
{ metric: 'Callback Hell (Depth > 3)', value: stats.formatNumber(stats.codeComplexity.codeSmells.callbackHell) },
|
|
190
191
|
{ metric: 'God Files (> 500 lines)', value: stats.formatNumber(stats.codeComplexity.codeSmells.godFiles) },
|
|
191
192
|
{ metric: 'Excessive Params (> 4)', value: stats.formatNumber(stats.codeComplexity.codeSmells.excessiveParameters) },
|
|
192
193
|
{ metric: 'Magic Numbers', value: stats.formatNumber(stats.codeComplexity.codeSmells.magicNumbers) }
|
|
193
|
-
]
|
|
194
|
+
];
|
|
195
|
+
if (stats.codeComplexity.duplicateCode) {
|
|
196
|
+
smellsTable.push({
|
|
197
|
+
metric: 'Duplicate Code (Lines)',
|
|
198
|
+
value: `${stats.formatNumber(stats.codeComplexity.duplicateCode.totalDuplicateLines)} lines in ${stats.codeComplexity.duplicateCode.totalClones} clones`
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
formatTable(smellsTable);
|
|
194
202
|
}
|
|
195
203
|
else {
|
|
196
204
|
console.log(useColors ? chalk.green('✓ No major code smells detected.') : '✓ No major code smells detected.');
|
|
@@ -256,6 +264,11 @@ program
|
|
|
256
264
|
? chalk.yellow(`• Address high complexity in ${stats.codeComplexity.complexFiles} files with potential technical debt`)
|
|
257
265
|
: `• Address high complexity in ${stats.codeComplexity.complexFiles} files with potential technical debt`);
|
|
258
266
|
}
|
|
267
|
+
if (stats.codeComplexity.duplicateCode && stats.codeComplexity.duplicateCode.totalDuplicateLines > 0) {
|
|
268
|
+
recommendations.push(useColors
|
|
269
|
+
? chalk.yellow(`• Extract duplicated code (${stats.codeComplexity.duplicateCode.totalDuplicateLines} duplicate lines) into shared helper functions or utilities`)
|
|
270
|
+
: `• Extract duplicated code (${stats.codeComplexity.duplicateCode.totalDuplicateLines} duplicate lines) into shared helper functions or utilities`);
|
|
271
|
+
}
|
|
259
272
|
}
|
|
260
273
|
if (recommendations.length > 0) {
|
|
261
274
|
console.log(recommendations.join('\n'));
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AACA,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAW9B,OAAO;KACF,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,gFAAgF,CAAC;KAC7F,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,OAAO,EAAE,8BAA8B,EAAE,GAAG,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,kDAAkD,CAAC;KACtF,MAAM,CAAC,4BAA4B,EAAE,yDAAyD,CAAC;KAC/F,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAuB,EAAE,EAAE;IACnD,IAAI,aAAa,GAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,aAAa,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC;IAEjG,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3F,IAAI,CAAC;QACD,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,aAAa,CAAC,OAAO;YAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,OAAO;YAAE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvE,IAAI,eAAe,GAAa,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YACxB,eAAe,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,aAAa,CAAC,MAAM,KAAK,KAAK,CAAC;QACjF,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,aAAa,CAAC,UAAU,KAAK,KAAK,CAAC;QAE7F,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE;YACpC,eAAe,EAAE,aAAa;YAC9B,oBAAoB,EAAE,eAAe;YACrC,aAAa;YACb,iBAAiB;SACpB,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAC7C,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,oBAAoB;oBAAE,OAAO,SAAS,CAAC;gBAC7E,OAAO,KAAK,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;YAC9E,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEvC,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5F,WAAW,CAAC;YACR,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACjE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YACtE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACpE,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YAC1E,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;SACzE,CAAC,CAAC;QAEH,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxF,WAAW,CAAC,KAAK,CAAC,kBAA2B,CAAC,CAAC;QAE/C,+CAA+C;QAC/C,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAEhG,4BAA4B;YAC5B,IAAI,eAAe,CAAC;YACpB,IAAI,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,IAAI,EAAE,EAAE,CAAC;gBAClD,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnE,CAAC;iBAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,IAAI,EAAE,EAAE,CAAC;gBACzD,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACJ,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjE,CAAC;YAED,IAAI,YAAY,CAAC;YACjB,IAAI,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;gBACrD,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1D,CAAC;iBAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBAC/D,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACJ,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1D,CAAC;YAED,6BAA6B;YAC7B,IAAI,kBAAkB,CAAC;YACvB,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACxE,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBACrB,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAChF,CAAC;iBAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC5B,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtE,CAAC;iBAAM,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC5B,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACJ,kBAAkB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;YAC9F,CAAC;YAED,WAAW,CAAC;gBACR,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,gBAAgB,CAAC,YAAY,gBAAgB,EAAE;gBACxJ,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,eAAe,KAAK,kBAAkB,EAAE,EAAE;gBACtG,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE;gBAC7F,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE;gBAChG,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAAE;gBAC3G,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,SAAS,eAAe,GAAG,EAAE;gBAC/G,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAE;aACxD,CAAC,CAAC;YAEH,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,SAAS;gBACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,8EAA8E,CAAC;gBAC9F,CAAC,CAAC,8EAA8E,CAAC,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,SAAS;gBACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,4EAA4E,CAAC;gBAC5F,CAAC,CAAC,4EAA4E,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,SAAS;gBACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kEAAkE,CAAC;gBAClF,CAAC,CAAC,kEAAkE,CAAC,CAAC;YAE1E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,SAAS;gBACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,2FAA2F,CAAC;gBAC3G,CAAC,CAAC,2FAA2F,CAAC,CAAC;YACnG,OAAO,CAAC,GAAG,CAAC,SAAS;gBACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC;gBAC/E,CAAC,CAAC,+DAA+D,CAAC,CAAC;QAC3E,CAAC;QAED,6CAA6C;QAC7C,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAE5F,+BAA+B;YAC/B,IAAI,mBAAmB,CAAC;YACxB,IAAI,KAAK,CAAC,cAAc,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;gBACnD,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAC3E,CAAC;iBAAM,IAAI,KAAK,CAAC,cAAc,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBAC7D,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACJ,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3E,CAAC;YAED,WAAW,CAAC;gBACR,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;gBAC3F,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;gBAC7F,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE;gBAClF,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;gBACtG,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE;gBAC5E,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;gBAChG,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,QAAQ,EAAE;gBACvF,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;gBACzF,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,EAAE;aAC/D,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACtH,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC;gBAC9D,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC;gBAC5C,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,GAAG,CAAC;gBACvD,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC;gBAChD,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;YAEvG,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,WAAW,GAAG;oBAChB,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;oBAChH,EAAE,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC1G,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;oBACpH,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;iBACvG,CAAC;gBAEF,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;oBACrC,WAAW,CAAC,IAAI,CAAC;wBACb,MAAM,EAAE,wBAAwB;wBAChC,KAAK,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,aAAa,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,SAAS;qBAC3J,CAAC,CAAC;gBACP,CAAC;gBAED,WAAW,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;YAClH,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC3H,MAAM,eAAe,GAAa,EAAE,CAAC;YAErC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAExE,8DAA8D;gBAC9D,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;oBACpB,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kEAAkE,CAAC;wBAClF,CAAC,CAAC,kEAAkE,CAAC,CAAC;gBAC9E,CAAC;qBAAM,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;oBAC3B,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,wEAAwE,CAAC;wBACxF,CAAC,CAAC,wEAAwE,CAAC,CAAC;gBACpF,CAAC;gBAED,IAAI,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE,EAAE,CAAC;oBAC5C,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,KAAK,CAAC,gBAAgB,CAAC,aAAa,0CAA0C,CAAC;wBACrI,CAAC,CAAC,uCAAuC,KAAK,CAAC,gBAAgB,CAAC,aAAa,0CAA0C,CAAC,CAAC;gBACjI,CAAC;qBAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;oBAClD,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,KAAK,CAAC,gBAAgB,CAAC,aAAa,+CAA+C,CAAC;wBAC/H,CAAC,CAAC,4BAA4B,KAAK,CAAC,gBAAgB,CAAC,aAAa,+CAA+C,CAAC,CAAC;gBAC3H,CAAC;gBAED,IAAI,KAAK,CAAC,gBAAgB,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC7C,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,KAAK,CAAC,gBAAgB,CAAC,eAAe,4CAA4C,CAAC;wBAC/H,CAAC,CAAC,6BAA6B,KAAK,CAAC,gBAAgB,CAAC,eAAe,4CAA4C,CAAC,CAAC;gBAC3H,CAAC;gBAED,IAAI,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;oBACpD,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,qCAAqC,CAAC;wBACpI,CAAC,CAAC,kCAAkC,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,qCAAqC,CAAC,CAAC;gBAChI,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,kCAAkC;gBAClC,IAAI,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrD,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,iGAAiG,CAAC;wBACjH,CAAC,CAAC,iGAAiG,CAAC,CAAC;gBAC7G,CAAC;gBAED,IAAI,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,iFAAiF,CAAC;wBACjG,CAAC,CAAC,iFAAiF,CAAC,CAAC;gBAC7F,CAAC;gBAED,IAAI,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC;oBACxD,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mFAAmF,CAAC;wBACnG,CAAC,CAAC,mFAAmF,CAAC,CAAC;gBAC/F,CAAC;gBAED,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBACxC,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,KAAK,CAAC,cAAc,CAAC,YAAY,sCAAsC,CAAC;wBACvH,CAAC,CAAC,gCAAgC,KAAK,CAAC,cAAc,CAAC,YAAY,sCAAsC,CAAC,CAAC;gBACnH,CAAC;gBAED,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;oBACnG,eAAe,CAAC,IAAI,CAAC,SAAS;wBAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,6DAA6D,CAAC;wBACjK,CAAC,CAAC,8BAA8B,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,6DAA6D,CAAC,CAAC;gBAC7J,CAAC;YACL,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,SAAS;oBACjB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,2DAA2D,CAAC;oBAC1E,CAAC,CAAC,2DAA2D,CAAC,CAAC;YACvE,CAAC;QACL,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
interface FunctionData {
|
|
2
|
+
type: string;
|
|
3
|
+
name: string;
|
|
4
|
+
complexity: number;
|
|
5
|
+
nestingDepth: number;
|
|
6
|
+
paramCount: number;
|
|
7
|
+
lineCount: number;
|
|
8
|
+
startLine: number;
|
|
9
|
+
endLine: number;
|
|
10
|
+
hash?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DuplicateClone {
|
|
13
|
+
lines: number;
|
|
14
|
+
instances: Array<{
|
|
15
|
+
filePath: string;
|
|
16
|
+
startLine: number;
|
|
17
|
+
endLine: number;
|
|
18
|
+
functionName: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
1
21
|
export interface FileComplexityMetrics {
|
|
2
22
|
avgComplexity: string;
|
|
3
23
|
maxComplexity: number;
|
|
@@ -8,6 +28,7 @@ export interface FileComplexityMetrics {
|
|
|
8
28
|
functionCount: number;
|
|
9
29
|
complexityScore: number;
|
|
10
30
|
complexityRating: string;
|
|
31
|
+
functions: FunctionData[];
|
|
11
32
|
codeSmells: {
|
|
12
33
|
magicNumbers: number;
|
|
13
34
|
callbackHell: number;
|
|
@@ -31,6 +52,12 @@ export interface CodeComplexityMetrics {
|
|
|
31
52
|
godFiles: number;
|
|
32
53
|
excessiveParameters: number;
|
|
33
54
|
};
|
|
55
|
+
duplicateCode: {
|
|
56
|
+
totalClones: number;
|
|
57
|
+
totalDuplicateLines: number;
|
|
58
|
+
clones: DuplicateClone[];
|
|
59
|
+
};
|
|
34
60
|
}
|
|
35
61
|
export declare function analyzeFileComplexity(filePath: string): Promise<FileComplexityMetrics>;
|
|
36
62
|
export declare function calculateProjectComplexity(projectPath: string, fileList: string[]): Promise<CodeComplexityMetrics>;
|
|
63
|
+
export {};
|
|
@@ -102,8 +102,12 @@ function analyzeFunctions(ast) {
|
|
|
102
102
|
const paramCount = node.params ? node.params.length : 0;
|
|
103
103
|
// Estimate function size (lines)
|
|
104
104
|
let lineCount = 0;
|
|
105
|
+
let startLine = 0;
|
|
106
|
+
let endLine = 0;
|
|
105
107
|
if (node.loc) {
|
|
106
|
-
|
|
108
|
+
startLine = node.loc.start.line;
|
|
109
|
+
endLine = node.loc.end.line;
|
|
110
|
+
lineCount = endLine - startLine + 1;
|
|
107
111
|
}
|
|
108
112
|
functions.push({
|
|
109
113
|
type: node.type,
|
|
@@ -111,7 +115,9 @@ function analyzeFunctions(ast) {
|
|
|
111
115
|
complexity: node.complexity || complexity,
|
|
112
116
|
nestingDepth: node.nestingDepth || nestingDepth,
|
|
113
117
|
paramCount,
|
|
114
|
-
lineCount
|
|
118
|
+
lineCount,
|
|
119
|
+
startLine,
|
|
120
|
+
endLine
|
|
115
121
|
});
|
|
116
122
|
}
|
|
117
123
|
}
|
|
@@ -235,12 +241,25 @@ export async function analyzeFileComplexity(filePath) {
|
|
|
235
241
|
functionCount: 0,
|
|
236
242
|
complexityScore: 0,
|
|
237
243
|
complexityRating: 'N/A',
|
|
244
|
+
functions: [],
|
|
238
245
|
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
239
246
|
};
|
|
240
247
|
}
|
|
241
248
|
}
|
|
242
249
|
// Analyze the functions in the file
|
|
243
250
|
const functions = analyzeFunctions(ast);
|
|
251
|
+
const contentLines = content.split('\n');
|
|
252
|
+
// Generate duplicate code hashes
|
|
253
|
+
functions.forEach(fn => {
|
|
254
|
+
if (fn.lineCount >= 3 && fn.startLine > 0 && fn.endLine > 0) {
|
|
255
|
+
// Extract exact code and strip whitespace for agnostic comparison
|
|
256
|
+
let codeBlock = contentLines.slice(fn.startLine - 1, fn.endLine).join('\n');
|
|
257
|
+
// Strip out varying function names robustly using regex
|
|
258
|
+
codeBlock = codeBlock.replace(/function\s+[a-zA-Z0-9_$]+/g, 'function anon');
|
|
259
|
+
codeBlock = codeBlock.replace(/(const|let|var)\s+[a-zA-Z0-9_$]+\s*=\s*(async\s*)?\(/g, '$1 anon = $2(');
|
|
260
|
+
fn.hash = codeBlock.replace(/\s+/g, '');
|
|
261
|
+
}
|
|
262
|
+
});
|
|
244
263
|
let magicNumbers = 0;
|
|
245
264
|
estraverse.traverse(ast, {
|
|
246
265
|
enter(node) {
|
|
@@ -274,6 +293,7 @@ export async function analyzeFileComplexity(filePath) {
|
|
|
274
293
|
functionCount: 0,
|
|
275
294
|
complexityScore: 0,
|
|
276
295
|
complexityRating: 'N/A',
|
|
296
|
+
functions: [],
|
|
277
297
|
codeSmells: { magicNumbers, callbackHell, godFiles, excessiveParameters }
|
|
278
298
|
};
|
|
279
299
|
}
|
|
@@ -320,6 +340,7 @@ export async function analyzeFileComplexity(filePath) {
|
|
|
320
340
|
functionCount: functions.length,
|
|
321
341
|
complexityScore: Math.round(totalScore),
|
|
322
342
|
complexityRating,
|
|
343
|
+
functions,
|
|
323
344
|
codeSmells: { magicNumbers, callbackHell, godFiles, excessiveParameters }
|
|
324
345
|
};
|
|
325
346
|
}
|
|
@@ -335,6 +356,7 @@ export async function analyzeFileComplexity(filePath) {
|
|
|
335
356
|
functionCount: 0,
|
|
336
357
|
complexityScore: 0,
|
|
337
358
|
complexityRating: 'N/A',
|
|
359
|
+
functions: [],
|
|
338
360
|
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
339
361
|
};
|
|
340
362
|
}
|
|
@@ -353,7 +375,8 @@ export async function calculateProjectComplexity(projectPath, fileList) {
|
|
|
353
375
|
totalFunctions: 0,
|
|
354
376
|
complexFiles: 0,
|
|
355
377
|
overallComplexity: 'N/A',
|
|
356
|
-
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
378
|
+
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 },
|
|
379
|
+
duplicateCode: { totalClones: 0, totalDuplicateLines: 0, clones: [] }
|
|
357
380
|
};
|
|
358
381
|
}
|
|
359
382
|
let totalComplexity = 0;
|
|
@@ -364,9 +387,24 @@ export async function calculateProjectComplexity(projectPath, fileList) {
|
|
|
364
387
|
let totalFunctions = 0;
|
|
365
388
|
let complexFiles = 0;
|
|
366
389
|
let totalSmells = { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 };
|
|
390
|
+
const globalFunctionHashes = new Map();
|
|
367
391
|
for (const file of jsFiles) {
|
|
368
392
|
const filePath = path.join(projectPath, file);
|
|
369
393
|
const metrics = await analyzeFileComplexity(filePath);
|
|
394
|
+
// Track for clones
|
|
395
|
+
metrics.functions.forEach(fn => {
|
|
396
|
+
if (fn.hash) {
|
|
397
|
+
if (!globalFunctionHashes.has(fn.hash)) {
|
|
398
|
+
globalFunctionHashes.set(fn.hash, []);
|
|
399
|
+
}
|
|
400
|
+
globalFunctionHashes.get(fn.hash).push({
|
|
401
|
+
filePath: file,
|
|
402
|
+
startLine: fn.startLine,
|
|
403
|
+
endLine: fn.endLine,
|
|
404
|
+
functionName: fn.name
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
});
|
|
370
408
|
totalComplexity += parseFloat(metrics.avgComplexity) * metrics.functionCount;
|
|
371
409
|
totalNestingDepth += parseFloat(metrics.avgNestingDepth) * metrics.functionCount;
|
|
372
410
|
totalFunctionSize += parseFloat(metrics.avgFunctionSize) * metrics.functionCount;
|
|
@@ -397,6 +435,16 @@ export async function calculateProjectComplexity(projectPath, fileList) {
|
|
|
397
435
|
else {
|
|
398
436
|
overallComplexity = 'High';
|
|
399
437
|
}
|
|
438
|
+
// Calculate global duplication metrics
|
|
439
|
+
const clones = [];
|
|
440
|
+
let totalDuplicateLines = 0;
|
|
441
|
+
for (const instances of globalFunctionHashes.values()) {
|
|
442
|
+
if (instances.length > 1) {
|
|
443
|
+
const lines = instances[0].endLine - instances[0].startLine + 1;
|
|
444
|
+
clones.push({ lines, instances });
|
|
445
|
+
totalDuplicateLines += lines * (instances.length - 1);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
400
448
|
return {
|
|
401
449
|
analyzedFiles: jsFiles.length,
|
|
402
450
|
avgComplexity,
|
|
@@ -407,7 +455,12 @@ export async function calculateProjectComplexity(projectPath, fileList) {
|
|
|
407
455
|
totalFunctions,
|
|
408
456
|
complexFiles,
|
|
409
457
|
overallComplexity,
|
|
410
|
-
codeSmells: totalSmells
|
|
458
|
+
codeSmells: totalSmells,
|
|
459
|
+
duplicateCode: {
|
|
460
|
+
totalClones: clones.length,
|
|
461
|
+
totalDuplicateLines,
|
|
462
|
+
clones
|
|
463
|
+
}
|
|
411
464
|
};
|
|
412
465
|
}
|
|
413
466
|
//# sourceMappingURL=code-complexity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-complexity.js","sourceRoot":"","sources":["../../src/code-complexity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"code-complexity.js","sourceRoot":"","sources":["../../src/code-complexity.ts"],"names":[],"mappings":"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"}
|
|
@@ -142,6 +142,12 @@ export function generateHtmlReport(stats) {
|
|
|
142
142
|
<h3>Magic Numbers</h3>
|
|
143
143
|
<div class="value" style="color: ${stats.codeComplexity.codeSmells.magicNumbers > 0 ? '#ffc107' : '#28a745'}">${stats.formatNumber(stats.codeComplexity.codeSmells.magicNumbers)}</div>
|
|
144
144
|
</div>
|
|
145
|
+
${stats.codeComplexity.duplicateCode ? `
|
|
146
|
+
<div class="card">
|
|
147
|
+
<h3>Duplicate Code</h3>
|
|
148
|
+
<div class="value" style="color: ${stats.codeComplexity.duplicateCode.totalDuplicateLines > 0 ? '#dc3545' : '#28a745'}">${stats.formatNumber(stats.codeComplexity.duplicateCode.totalDuplicateLines)} <span style="font-size: 14px; font-weight: normal; color: #6c757d">lines</span></div>
|
|
149
|
+
</div>
|
|
150
|
+
` : ''}
|
|
145
151
|
</div>
|
|
146
152
|
` : ''}
|
|
147
153
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-formatter.js","sourceRoot":"","sources":["../../src/html-formatter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"html-formatter.js","sourceRoot":"","sources":["../../src/html-formatter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/code-complexity.ts
CHANGED
|
@@ -28,6 +28,14 @@ interface FunctionData {
|
|
|
28
28
|
nestingDepth: number;
|
|
29
29
|
paramCount: number;
|
|
30
30
|
lineCount: number;
|
|
31
|
+
startLine: number;
|
|
32
|
+
endLine: number;
|
|
33
|
+
hash?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface DuplicateClone {
|
|
37
|
+
lines: number;
|
|
38
|
+
instances: Array<{ filePath: string; startLine: number; endLine: number; functionName: string }>;
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
export interface FileComplexityMetrics {
|
|
@@ -40,6 +48,7 @@ export interface FileComplexityMetrics {
|
|
|
40
48
|
functionCount: number;
|
|
41
49
|
complexityScore: number;
|
|
42
50
|
complexityRating: string;
|
|
51
|
+
functions: FunctionData[];
|
|
43
52
|
codeSmells: {
|
|
44
53
|
magicNumbers: number;
|
|
45
54
|
callbackHell: number;
|
|
@@ -64,6 +73,11 @@ export interface CodeComplexityMetrics {
|
|
|
64
73
|
godFiles: number;
|
|
65
74
|
excessiveParameters: number;
|
|
66
75
|
};
|
|
76
|
+
duplicateCode: {
|
|
77
|
+
totalClones: number;
|
|
78
|
+
totalDuplicateLines: number;
|
|
79
|
+
clones: DuplicateClone[];
|
|
80
|
+
};
|
|
67
81
|
}
|
|
68
82
|
|
|
69
83
|
// Calculate cyclomatic complexity
|
|
@@ -147,8 +161,8 @@ function analyzeFunctions(ast: any): FunctionData[] {
|
|
|
147
161
|
estraverse.traverse(ast, {
|
|
148
162
|
enter(node: any) {
|
|
149
163
|
if (node.type === 'FunctionDeclaration' ||
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
node.type === 'FunctionExpression' ||
|
|
165
|
+
node.type === 'ArrowFunctionExpression') {
|
|
152
166
|
|
|
153
167
|
// Skip functions without a body
|
|
154
168
|
if (!node.body) return;
|
|
@@ -176,8 +190,12 @@ function analyzeFunctions(ast: any): FunctionData[] {
|
|
|
176
190
|
|
|
177
191
|
// Estimate function size (lines)
|
|
178
192
|
let lineCount = 0;
|
|
193
|
+
let startLine = 0;
|
|
194
|
+
let endLine = 0;
|
|
179
195
|
if (node.loc) {
|
|
180
|
-
|
|
196
|
+
startLine = node.loc.start.line;
|
|
197
|
+
endLine = node.loc.end.line;
|
|
198
|
+
lineCount = endLine - startLine + 1;
|
|
181
199
|
}
|
|
182
200
|
|
|
183
201
|
functions.push({
|
|
@@ -186,7 +204,9 @@ function analyzeFunctions(ast: any): FunctionData[] {
|
|
|
186
204
|
complexity: node.complexity || complexity,
|
|
187
205
|
nestingDepth: node.nestingDepth || nestingDepth,
|
|
188
206
|
paramCount,
|
|
189
|
-
lineCount
|
|
207
|
+
lineCount,
|
|
208
|
+
startLine,
|
|
209
|
+
endLine
|
|
190
210
|
});
|
|
191
211
|
}
|
|
192
212
|
}
|
|
@@ -200,10 +220,10 @@ function parseTypeScriptFile(content: string): SimplifiedProgram {
|
|
|
200
220
|
try {
|
|
201
221
|
// Create a source file
|
|
202
222
|
const sourceFile = ts.createSourceFile(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
223
|
+
'temp.ts',
|
|
224
|
+
content,
|
|
225
|
+
ts.ScriptTarget.Latest,
|
|
226
|
+
true
|
|
207
227
|
);
|
|
208
228
|
|
|
209
229
|
// Create a simplified program AST structure
|
|
@@ -215,16 +235,16 @@ function parseTypeScriptFile(content: string): SimplifiedProgram {
|
|
|
215
235
|
// Function to visit TypeScript nodes and extract function information
|
|
216
236
|
function visit(node: ts.Node) {
|
|
217
237
|
if (ts.isLiteralExpression(node) && node.kind === ts.SyntaxKind.NumericLiteral) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
238
|
+
simplifiedAst.body.push({
|
|
239
|
+
type: 'Literal',
|
|
240
|
+
value: parseFloat(node.text)
|
|
241
|
+
});
|
|
222
242
|
}
|
|
223
243
|
|
|
224
244
|
if (ts.isFunctionDeclaration(node) ||
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
245
|
+
ts.isMethodDeclaration(node) ||
|
|
246
|
+
ts.isArrowFunction(node) ||
|
|
247
|
+
ts.isFunctionExpression(node)) {
|
|
228
248
|
|
|
229
249
|
const startLine = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
230
250
|
const endLine = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1;
|
|
@@ -235,43 +255,43 @@ function parseTypeScriptFile(content: string): SimplifiedProgram {
|
|
|
235
255
|
let currentNesting = 0;
|
|
236
256
|
|
|
237
257
|
function checkNode(n: ts.Node) {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
258
|
+
// Complexity
|
|
259
|
+
if (ts.isIfStatement(n) || ts.isConditionalExpression(n) || ts.isCaseClause(n) ||
|
|
260
|
+
ts.isForStatement(n) || ts.isForInStatement(n) || ts.isForOfStatement(n) ||
|
|
261
|
+
ts.isWhileStatement(n) || ts.isDoStatement(n)) {
|
|
262
|
+
complexity++;
|
|
263
|
+
}
|
|
264
|
+
if (ts.isBinaryExpression(n)) {
|
|
265
|
+
if (n.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
|
|
266
|
+
n.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
|
|
267
|
+
complexity++;
|
|
249
268
|
}
|
|
269
|
+
}
|
|
250
270
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
271
|
+
// Nesting
|
|
272
|
+
const isNestingNode = ts.isBlock(n) || ts.isIfStatement(n) || ts.isSwitchStatement(n) ||
|
|
273
|
+
ts.isForStatement(n) || ts.isForInStatement(n) || ts.isForOfStatement(n) ||
|
|
274
|
+
ts.isWhileStatement(n) || ts.isDoStatement(n) || ts.isTryStatement(n);
|
|
255
275
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
276
|
+
if (isNestingNode) {
|
|
277
|
+
currentNesting++;
|
|
278
|
+
maxNesting = Math.max(maxNesting, currentNesting);
|
|
279
|
+
}
|
|
260
280
|
|
|
261
|
-
|
|
281
|
+
ts.forEachChild(n, checkNode);
|
|
262
282
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
283
|
+
if (isNestingNode) {
|
|
284
|
+
currentNesting--;
|
|
285
|
+
}
|
|
266
286
|
}
|
|
267
287
|
|
|
268
288
|
if (node.body) {
|
|
269
|
-
|
|
289
|
+
checkNode(node.body);
|
|
270
290
|
}
|
|
271
291
|
|
|
272
292
|
const functionNode: any = {
|
|
273
293
|
type: ts.isFunctionDeclaration(node) ? 'FunctionDeclaration' :
|
|
274
|
-
|
|
294
|
+
ts.isArrowFunction(node) ? 'ArrowFunctionExpression' : 'FunctionExpression',
|
|
275
295
|
id: ts.isFunctionDeclaration(node) && node.name ? { name: node.name.text } : undefined,
|
|
276
296
|
params: node.parameters ? node.parameters.map(() => ({})) : [],
|
|
277
297
|
body: { type: 'BlockStatement', body: [] as any[] },
|
|
@@ -334,6 +354,7 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
334
354
|
functionCount: 0,
|
|
335
355
|
complexityScore: 0,
|
|
336
356
|
complexityRating: 'N/A',
|
|
357
|
+
functions: [],
|
|
337
358
|
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
338
359
|
};
|
|
339
360
|
}
|
|
@@ -341,6 +362,21 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
341
362
|
|
|
342
363
|
// Analyze the functions in the file
|
|
343
364
|
const functions = analyzeFunctions(ast);
|
|
365
|
+
const contentLines = content.split('\n');
|
|
366
|
+
|
|
367
|
+
// Generate duplicate code hashes
|
|
368
|
+
functions.forEach(fn => {
|
|
369
|
+
if (fn.lineCount >= 3 && fn.startLine > 0 && fn.endLine > 0) {
|
|
370
|
+
// Extract exact code and strip whitespace for agnostic comparison
|
|
371
|
+
let codeBlock = contentLines.slice(fn.startLine - 1, fn.endLine).join('\n');
|
|
372
|
+
|
|
373
|
+
// Strip out varying function names robustly using regex
|
|
374
|
+
codeBlock = codeBlock.replace(/function\s+[a-zA-Z0-9_$]+/g, 'function anon');
|
|
375
|
+
codeBlock = codeBlock.replace(/(const|let|var)\s+[a-zA-Z0-9_$]+\s*=\s*(async\s*)?\(/g, '$1 anon = $2(');
|
|
376
|
+
|
|
377
|
+
fn.hash = codeBlock.replace(/\s+/g, '');
|
|
378
|
+
}
|
|
379
|
+
});
|
|
344
380
|
|
|
345
381
|
let magicNumbers = 0;
|
|
346
382
|
estraverse.traverse(ast, {
|
|
@@ -361,8 +397,8 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
361
397
|
let callbackHell = 0;
|
|
362
398
|
let excessiveParameters = 0;
|
|
363
399
|
functions.forEach(fn => {
|
|
364
|
-
|
|
365
|
-
|
|
400
|
+
if (fn.nestingDepth > 3) callbackHell++;
|
|
401
|
+
if (fn.paramCount > 4) excessiveParameters++;
|
|
366
402
|
});
|
|
367
403
|
|
|
368
404
|
if (functions.length === 0) {
|
|
@@ -376,6 +412,7 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
376
412
|
functionCount: 0,
|
|
377
413
|
complexityScore: 0,
|
|
378
414
|
complexityRating: 'N/A',
|
|
415
|
+
functions: [],
|
|
379
416
|
codeSmells: { magicNumbers, callbackHell, godFiles, excessiveParameters }
|
|
380
417
|
};
|
|
381
418
|
}
|
|
@@ -408,9 +445,9 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
408
445
|
const paramsScore = Math.min((avgParams / 6) * 100, 100);
|
|
409
446
|
|
|
410
447
|
const totalScore = (complexityScore * complexityWeight) +
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
448
|
+
(nestingScore * nestingWeight) +
|
|
449
|
+
(sizeScore * sizeWeight) +
|
|
450
|
+
(paramsScore * paramsWeight);
|
|
414
451
|
|
|
415
452
|
// Define complexity rating
|
|
416
453
|
let complexityRating: string;
|
|
@@ -428,6 +465,7 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
428
465
|
functionCount: functions.length,
|
|
429
466
|
complexityScore: Math.round(totalScore),
|
|
430
467
|
complexityRating,
|
|
468
|
+
functions,
|
|
431
469
|
codeSmells: { magicNumbers, callbackHell, godFiles, excessiveParameters }
|
|
432
470
|
};
|
|
433
471
|
} catch (error) {
|
|
@@ -442,6 +480,7 @@ export async function analyzeFileComplexity(filePath: string): Promise<FileCompl
|
|
|
442
480
|
functionCount: 0,
|
|
443
481
|
complexityScore: 0,
|
|
444
482
|
complexityRating: 'N/A',
|
|
483
|
+
functions: [],
|
|
445
484
|
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
446
485
|
};
|
|
447
486
|
}
|
|
@@ -462,7 +501,8 @@ export async function calculateProjectComplexity(projectPath: string, fileList:
|
|
|
462
501
|
totalFunctions: 0,
|
|
463
502
|
complexFiles: 0,
|
|
464
503
|
overallComplexity: 'N/A',
|
|
465
|
-
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 }
|
|
504
|
+
codeSmells: { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 },
|
|
505
|
+
duplicateCode: { totalClones: 0, totalDuplicateLines: 0, clones: [] }
|
|
466
506
|
};
|
|
467
507
|
}
|
|
468
508
|
|
|
@@ -475,11 +515,27 @@ export async function calculateProjectComplexity(projectPath: string, fileList:
|
|
|
475
515
|
let complexFiles = 0;
|
|
476
516
|
|
|
477
517
|
let totalSmells = { magicNumbers: 0, callbackHell: 0, godFiles: 0, excessiveParameters: 0 };
|
|
518
|
+
const globalFunctionHashes = new Map<string, Array<{ filePath: string; startLine: number; endLine: number; functionName: string }>>();
|
|
478
519
|
|
|
479
520
|
for (const file of jsFiles) {
|
|
480
521
|
const filePath = path.join(projectPath, file);
|
|
481
522
|
const metrics = await analyzeFileComplexity(filePath);
|
|
482
523
|
|
|
524
|
+
// Track for clones
|
|
525
|
+
metrics.functions.forEach(fn => {
|
|
526
|
+
if (fn.hash) {
|
|
527
|
+
if (!globalFunctionHashes.has(fn.hash)) {
|
|
528
|
+
globalFunctionHashes.set(fn.hash, []);
|
|
529
|
+
}
|
|
530
|
+
globalFunctionHashes.get(fn.hash)!.push({
|
|
531
|
+
filePath: file,
|
|
532
|
+
startLine: fn.startLine,
|
|
533
|
+
endLine: fn.endLine,
|
|
534
|
+
functionName: fn.name
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
|
|
483
539
|
totalComplexity += parseFloat(metrics.avgComplexity) * metrics.functionCount;
|
|
484
540
|
totalNestingDepth += parseFloat(metrics.avgNestingDepth) * metrics.functionCount;
|
|
485
541
|
totalFunctionSize += parseFloat(metrics.avgFunctionSize) * metrics.functionCount;
|
|
@@ -514,6 +570,17 @@ export async function calculateProjectComplexity(projectPath: string, fileList:
|
|
|
514
570
|
overallComplexity = 'High';
|
|
515
571
|
}
|
|
516
572
|
|
|
573
|
+
// Calculate global duplication metrics
|
|
574
|
+
const clones: DuplicateClone[] = [];
|
|
575
|
+
let totalDuplicateLines = 0;
|
|
576
|
+
for (const instances of globalFunctionHashes.values()) {
|
|
577
|
+
if (instances.length > 1) {
|
|
578
|
+
const lines = instances[0].endLine - instances[0].startLine + 1;
|
|
579
|
+
clones.push({ lines, instances });
|
|
580
|
+
totalDuplicateLines += lines * (instances.length - 1);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
517
584
|
return {
|
|
518
585
|
analyzedFiles: jsFiles.length,
|
|
519
586
|
avgComplexity,
|
|
@@ -524,6 +591,11 @@ export async function calculateProjectComplexity(projectPath: string, fileList:
|
|
|
524
591
|
totalFunctions,
|
|
525
592
|
complexFiles,
|
|
526
593
|
overallComplexity,
|
|
527
|
-
codeSmells: totalSmells
|
|
594
|
+
codeSmells: totalSmells,
|
|
595
|
+
duplicateCode: {
|
|
596
|
+
totalClones: clones.length,
|
|
597
|
+
totalDuplicateLines,
|
|
598
|
+
clones
|
|
599
|
+
}
|
|
528
600
|
};
|
|
529
601
|
}
|
package/src/html-formatter.ts
CHANGED
|
@@ -146,6 +146,12 @@ export function generateHtmlReport(stats: ProjectStats): string {
|
|
|
146
146
|
<h3>Magic Numbers</h3>
|
|
147
147
|
<div class="value" style="color: ${stats.codeComplexity.codeSmells.magicNumbers > 0 ? '#ffc107' : '#28a745'}">${stats.formatNumber(stats.codeComplexity.codeSmells.magicNumbers)}</div>
|
|
148
148
|
</div>
|
|
149
|
+
${stats.codeComplexity.duplicateCode ? `
|
|
150
|
+
<div class="card">
|
|
151
|
+
<h3>Duplicate Code</h3>
|
|
152
|
+
<div class="value" style="color: ${stats.codeComplexity.duplicateCode.totalDuplicateLines > 0 ? '#dc3545' : '#28a745'}">${stats.formatNumber(stats.codeComplexity.duplicateCode.totalDuplicateLines)} <span style="font-size: 14px; font-weight: normal; color: #6c757d">lines</span></div>
|
|
153
|
+
</div>
|
|
154
|
+
` : ''}
|
|
149
155
|
</div>
|
|
150
156
|
` : ''}
|
|
151
157
|
|
package/test/complexity.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import { analyzeFileComplexity } from '../src/code-complexity.js';
|
|
1
|
+
import { describe, it, expect, afterEach, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { analyzeFileComplexity, calculateProjectComplexity } from '../src/code-complexity.js';
|
|
3
3
|
import fs from 'fs/promises';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
|
|
@@ -74,3 +74,45 @@ function manyParams(a, b, c, d, e, f) {
|
|
|
74
74
|
expect(metrics.codeSmells.excessiveParameters).toBe(1);
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
|
+
|
|
78
|
+
describe('calculateProjectComplexity', () => {
|
|
79
|
+
const testDir = path.join(process.cwd(), 'temp_complexity_project_test_dir');
|
|
80
|
+
|
|
81
|
+
beforeAll(async () => {
|
|
82
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
83
|
+
|
|
84
|
+
const file1Content = `
|
|
85
|
+
export function helperFunc1(a: number, b: number) {
|
|
86
|
+
if (a > b) {
|
|
87
|
+
return a * 2;
|
|
88
|
+
}
|
|
89
|
+
return b * 2;
|
|
90
|
+
}
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
// Exact duplicate
|
|
94
|
+
const file2Content = `
|
|
95
|
+
export function redundantFunc(a: number, b: number) {
|
|
96
|
+
if (a > b) {
|
|
97
|
+
return a * 2;
|
|
98
|
+
}
|
|
99
|
+
return b * 2;
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
|
|
103
|
+
await fs.writeFile(path.join(testDir, 'file1.ts'), file1Content);
|
|
104
|
+
await fs.writeFile(path.join(testDir, 'file2.ts'), file2Content);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
afterAll(async () => {
|
|
108
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should detect duplicate code across files', async () => {
|
|
112
|
+
const metrics = await calculateProjectComplexity(testDir, ['file1.ts', 'file2.ts']);
|
|
113
|
+
|
|
114
|
+
expect(metrics).not.toBeNull();
|
|
115
|
+
expect(metrics.duplicateCode.totalClones).toBeGreaterThan(0);
|
|
116
|
+
expect(metrics.duplicateCode.totalDuplicateLines).toBeGreaterThan(4);
|
|
117
|
+
});
|
|
118
|
+
});
|