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 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.2.0')
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
- formatTable([
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.2.0')
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
- formatTable([
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'));
@@ -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":"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"}
@@ -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
- lineCount = node.loc.end.line - node.loc.start.line + 1;
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":"AAIA,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IAClD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDA8B2C,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;;;;;;;qCAO5C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;;;;qCAI/B,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC;;;;4DAIb,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;;;;4DAInC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;kBAgBhF,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;sCAElB,IAAI,CAAC,WAAW,CAAC;8BACzB,IAAI,CAAC,OAAO,CAAC;8BACb,IAAI,CAAC,aAAa,CAAC;8BACnB,IAAI,CAAC,YAAY,CAAC;;;;uEAIuB,IAAI,CAAC,eAAe,CAAC;;8EAEd,IAAI,CAAC,eAAe,CAAC;;;;iBAIlF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;;;;UAIvB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;;;yCAKM,KAAK,CAAC,gBAAgB,CAAC,eAAe;;+CAEhC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,KAAK,CAAC,gBAAgB,CAAC,eAAe;;;;;yCAKvI,KAAK,CAAC,gBAAgB,CAAC,kBAAkB;;+CAEnC,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB;;;;;uDAKnH,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC;;;SAG5K,CAAC,CAAC,CAAC,EAAE;;UAEJ,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;;;;;uDAKsB,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc,CAAC,aAAa;;;;uDAIjH,KAAK,CAAC,cAAc,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;;;;uDAI1H,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;;;;;;;;uDAQvH,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC;;;;uDAI7I,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC;;;;uDAIrI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC;;;;uDAI3J,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC;;;SAG3L,CAAC,CAAC,CAAC,EAAE;;;;;;;;KAQT,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"html-formatter.js","sourceRoot":"","sources":["../../src/html-formatter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-analyzer",
3
- "version": "1.3.7",
3
+ "version": "1.4.0",
4
4
  "repository": "github:amir-valizadeh/ts-analyzer",
5
5
  "description": "Comprehensive TypeScript code analyzer with type safety and complexity metrics",
6
6
  "main": "dist/src/index.js",
@@ -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
- node.type === 'FunctionExpression' ||
151
- node.type === 'ArrowFunctionExpression') {
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
- lineCount = node.loc.end.line - node.loc.start.line + 1;
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
- 'temp.ts',
204
- content,
205
- ts.ScriptTarget.Latest,
206
- true
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
- simplifiedAst.body.push({
219
- type: 'Literal',
220
- value: parseFloat(node.text)
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
- ts.isMethodDeclaration(node) ||
226
- ts.isArrowFunction(node) ||
227
- ts.isFunctionExpression(node)) {
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
- // Complexity
239
- if (ts.isIfStatement(n) || ts.isConditionalExpression(n) || ts.isCaseClause(n) ||
240
- ts.isForStatement(n) || ts.isForInStatement(n) || ts.isForOfStatement(n) ||
241
- ts.isWhileStatement(n) || ts.isDoStatement(n)) {
242
- complexity++;
243
- }
244
- if (ts.isBinaryExpression(n)) {
245
- if (n.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
246
- n.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
247
- complexity++;
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
- // Nesting
252
- const isNestingNode = ts.isBlock(n) || ts.isIfStatement(n) || ts.isSwitchStatement(n) ||
253
- ts.isForStatement(n) || ts.isForInStatement(n) || ts.isForOfStatement(n) ||
254
- ts.isWhileStatement(n) || ts.isDoStatement(n) || ts.isTryStatement(n);
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
- if (isNestingNode) {
257
- currentNesting++;
258
- maxNesting = Math.max(maxNesting, currentNesting);
259
- }
276
+ if (isNestingNode) {
277
+ currentNesting++;
278
+ maxNesting = Math.max(maxNesting, currentNesting);
279
+ }
260
280
 
261
- ts.forEachChild(n, checkNode);
281
+ ts.forEachChild(n, checkNode);
262
282
 
263
- if (isNestingNode) {
264
- currentNesting--;
265
- }
283
+ if (isNestingNode) {
284
+ currentNesting--;
285
+ }
266
286
  }
267
287
 
268
288
  if (node.body) {
269
- checkNode(node.body);
289
+ checkNode(node.body);
270
290
  }
271
291
 
272
292
  const functionNode: any = {
273
293
  type: ts.isFunctionDeclaration(node) ? 'FunctionDeclaration' :
274
- ts.isArrowFunction(node) ? 'ArrowFunctionExpression' : 'FunctionExpression',
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
- if (fn.nestingDepth > 3) callbackHell++;
365
- if (fn.paramCount > 4) excessiveParameters++;
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
- (nestingScore * nestingWeight) +
412
- (sizeScore * sizeWeight) +
413
- (paramsScore * paramsWeight);
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
  }
@@ -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
 
@@ -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
+ });