tech-debt-score 0.1.10 → 0.1.11
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/application/services/AnalysisService.d.ts.map +1 -1
- package/dist/application/services/AnalysisService.js +3 -1
- package/dist/application/services/AnalysisService.js.map +1 -1
- package/dist/domain/entities/Rule.d.ts +5 -2
- package/dist/domain/entities/Rule.d.ts.map +1 -1
- package/dist/domain/entities/Rule.js.map +1 -1
- package/dist/domain/rules/CircularDependencyRule.d.ts +3 -1
- package/dist/domain/rules/CircularDependencyRule.d.ts.map +1 -1
- package/dist/domain/rules/CircularDependencyRule.js +14 -4
- package/dist/domain/rules/CircularDependencyRule.js.map +1 -1
- package/dist/domain/rules/ComplexityRule.d.ts +3 -1
- package/dist/domain/rules/ComplexityRule.d.ts.map +1 -1
- package/dist/domain/rules/ComplexityRule.js +14 -3
- package/dist/domain/rules/ComplexityRule.js.map +1 -1
- package/dist/domain/rules/DuplicationRule.d.ts +3 -1
- package/dist/domain/rules/DuplicationRule.d.ts.map +1 -1
- package/dist/domain/rules/DuplicationRule.js +10 -3
- package/dist/domain/rules/DuplicationRule.js.map +1 -1
- package/dist/domain/rules/SizeRule.d.ts +3 -1
- package/dist/domain/rules/SizeRule.d.ts.map +1 -1
- package/dist/domain/rules/SizeRule.js +8 -3
- package/dist/domain/rules/SizeRule.js.map +1 -1
- package/dist/domain/rules/TypeSafetyRule.d.ts +3 -1
- package/dist/domain/rules/TypeSafetyRule.d.ts.map +1 -1
- package/dist/domain/rules/TypeSafetyRule.js +12 -3
- package/dist/domain/rules/TypeSafetyRule.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAM1D,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHR,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,SAAS;IAGtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAM1D,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHR,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,SAAS;IAGtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAqJ9D,OAAO,CAAC,iBAAiB;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAkBzB"}
|
|
@@ -89,7 +89,9 @@ export class AnalysisService {
|
|
|
89
89
|
for (const rule of this.rules) {
|
|
90
90
|
const findings = rule.evaluate(allMetrics);
|
|
91
91
|
allFindings.push(...findings);
|
|
92
|
-
const score = rule.calculateScore(findings
|
|
92
|
+
const score = rule.calculateScore(findings, {
|
|
93
|
+
totalFiles: filePaths.length,
|
|
94
|
+
});
|
|
93
95
|
rawCategoryScores.push({
|
|
94
96
|
name: rule.name,
|
|
95
97
|
score,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Metric } from './Metric.js';
|
|
6
6
|
import type { Finding } from './Finding.js';
|
|
7
|
+
export interface ScoreContext {
|
|
8
|
+
totalFiles: number;
|
|
9
|
+
}
|
|
7
10
|
export interface Rule {
|
|
8
11
|
/**
|
|
9
12
|
* Unique identifier for this rule
|
|
@@ -25,7 +28,7 @@ export interface Rule {
|
|
|
25
28
|
* Calculate a score (0-100) based on findings
|
|
26
29
|
* where 100 = no issues, 0 = maximum issues
|
|
27
30
|
*/
|
|
28
|
-
calculateScore(findings: Finding[]): number;
|
|
31
|
+
calculateScore(findings: Finding[], context?: ScoreContext): number;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* Abstract base class for rules
|
|
@@ -36,6 +39,6 @@ export declare abstract class BaseRule implements Rule {
|
|
|
36
39
|
readonly description: string;
|
|
37
40
|
constructor(id: string, name: string, description: string);
|
|
38
41
|
abstract evaluate(metrics: Metric[]): Finding[];
|
|
39
|
-
abstract calculateScore(findings: Finding[]): number;
|
|
42
|
+
abstract calculateScore(findings: Finding[], context?: ScoreContext): number;
|
|
40
43
|
}
|
|
41
44
|
//# sourceMappingURL=Rule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACrE;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,IAAI;aAE1B,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;gBAFnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM;IAGrC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IAC/C,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;CAC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH;;GAEG;AACH,MAAM,OAAgB,QAAQ;IAC5B,YACkB,EAAU,EACV,IAAY,EACZ,WAAmB;QAFnB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;IAClC,CAAC;CAIL"}
|
|
@@ -8,6 +8,8 @@ import type { Finding } from '../entities/Finding.js';
|
|
|
8
8
|
export declare class CircularDependencyRule extends BaseRule {
|
|
9
9
|
constructor();
|
|
10
10
|
evaluate(metrics: Metric[]): Finding[];
|
|
11
|
-
calculateScore(findings: Finding[]
|
|
11
|
+
calculateScore(findings: Finding[], context?: {
|
|
12
|
+
totalFiles: number;
|
|
13
|
+
}): number;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=CircularDependencyRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircularDependencyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,sBAAuB,SAAQ,QAAQ;;IASlD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA6BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"CircularDependencyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,sBAAuB,SAAQ,QAAQ;;IASlD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA6BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CA4B9E"}
|
|
@@ -28,11 +28,12 @@ export class CircularDependencyRule extends BaseRule {
|
|
|
28
28
|
}
|
|
29
29
|
return findings;
|
|
30
30
|
}
|
|
31
|
-
calculateScore(findings) {
|
|
31
|
+
calculateScore(findings, context) {
|
|
32
32
|
if (findings.length === 0)
|
|
33
33
|
return 100;
|
|
34
|
-
// Circular dependencies are serious
|
|
35
|
-
|
|
34
|
+
// Circular dependencies are serious
|
|
35
|
+
// Calculate raw penalty
|
|
36
|
+
const rawPenalty = findings.reduce((sum, finding) => {
|
|
36
37
|
switch (finding.severity) {
|
|
37
38
|
case 'high': return sum + 20; // Very bad
|
|
38
39
|
case 'medium': return sum + 12;
|
|
@@ -40,7 +41,16 @@ export class CircularDependencyRule extends BaseRule {
|
|
|
40
41
|
default: return sum;
|
|
41
42
|
}
|
|
42
43
|
}, 0);
|
|
43
|
-
|
|
44
|
+
// Normalize by project size if context is available
|
|
45
|
+
let finalPenalty = rawPenalty;
|
|
46
|
+
if (context && context.totalFiles > 0) {
|
|
47
|
+
// Density: Penalty points per file
|
|
48
|
+
const density = rawPenalty / context.totalFiles;
|
|
49
|
+
// Scaling: 1 circular dep per 10 files is bad (density 2.0 -> score drop 40?)
|
|
50
|
+
// Let's say density of 5 (1 high severity per 4 files) = 100% deduction
|
|
51
|
+
finalPenalty = density * 20;
|
|
52
|
+
}
|
|
53
|
+
const score = Math.max(0, 100 - finalPenalty);
|
|
44
54
|
return Math.round(score * 100) / 100;
|
|
45
55
|
}
|
|
46
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircularDependencyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;QACE,KAAK,CACH,qBAAqB,EACrB,0BAA0B,EAC1B,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QAEjF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,yCAAyC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,QAAQ,CAAC,IAAI,CACX,IAAI,cAAc,EAAE;qBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,iCAAiC,MAAM,CAAC,OAAO,IAAI,cAAc,KAAK,WAAW,kBAAkB,CACpG;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,6FAA6F,CAAC;qBAC7G,KAAK,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;
|
|
1
|
+
{"version":3,"file":"CircularDependencyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;QACE,KAAK,CACH,qBAAqB,EACrB,0BAA0B,EAC1B,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QAEjF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,yCAAyC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,QAAQ,CAAC,IAAI,CACX,IAAI,cAAc,EAAE;qBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,iCAAiC,MAAM,CAAC,OAAO,IAAI,cAAc,KAAK,WAAW,kBAAkB,CACpG;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,6FAA6F,CAAC;qBAC7G,KAAK,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,oCAAoC;QACpC,wBAAwB;QACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,WAAW;gBACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,oDAAoD;QACpD,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,mCAAmC;YACnC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAEhD,8EAA8E;YAC9E,wEAAwE;YACxE,YAAY,GAAG,OAAO,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -10,6 +10,8 @@ export declare class ComplexityRule extends BaseRule {
|
|
|
10
10
|
private readonly NESTING_THRESHOLD;
|
|
11
11
|
constructor();
|
|
12
12
|
evaluate(metrics: Metric[]): Finding[];
|
|
13
|
-
calculateScore(findings: Finding[]
|
|
13
|
+
calculateScore(findings: Finding[], context?: {
|
|
14
|
+
totalFiles: number;
|
|
15
|
+
}): number;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=ComplexityRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;;IAUvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA+CtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"ComplexityRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;;IAUvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA+CtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CA8B9E"}
|
|
@@ -43,11 +43,11 @@ export class ComplexityRule extends BaseRule {
|
|
|
43
43
|
}
|
|
44
44
|
return findings;
|
|
45
45
|
}
|
|
46
|
-
calculateScore(findings) {
|
|
46
|
+
calculateScore(findings, context) {
|
|
47
47
|
if (findings.length === 0)
|
|
48
48
|
return 100;
|
|
49
49
|
// Penalty based on severity
|
|
50
|
-
const
|
|
50
|
+
const rawPenalty = findings.reduce((sum, finding) => {
|
|
51
51
|
switch (finding.severity) {
|
|
52
52
|
case 'high': return sum + 10;
|
|
53
53
|
case 'medium': return sum + 5;
|
|
@@ -55,8 +55,19 @@ export class ComplexityRule extends BaseRule {
|
|
|
55
55
|
default: return sum;
|
|
56
56
|
}
|
|
57
57
|
}, 0);
|
|
58
|
+
// Normalize by project size if context is available
|
|
59
|
+
let finalPenalty = rawPenalty;
|
|
60
|
+
if (context && context.totalFiles > 0) {
|
|
61
|
+
// Density: Penalty points per file
|
|
62
|
+
const density = rawPenalty / context.totalFiles;
|
|
63
|
+
// Scaling:
|
|
64
|
+
// If every file has medium complexity (5 pts), density is 5.
|
|
65
|
+
// We want that to be maybe 50% score? So multiply by 10.
|
|
66
|
+
// If every file has high complexity (10 pts), density 10 -> score 0?
|
|
67
|
+
finalPenalty = density * 10;
|
|
68
|
+
}
|
|
58
69
|
// Cap the penalty and invert to get score
|
|
59
|
-
const score = Math.max(0, 100 -
|
|
70
|
+
const score = Math.max(0, 100 - finalPenalty);
|
|
60
71
|
return Math.round(score * 100) / 100;
|
|
61
72
|
}
|
|
62
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityRule.js","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAK1C;QACE,KAAK,CACH,YAAY,EACZ,iBAAiB,EACjB,mFAAmF,CACpF,CAAC;QATJ,+CAA+C;QAC9B,yBAAoB,GAAG,EAAE,CAAC;QAC1B,sBAAiB,GAAG,CAAC,CAAC;IAQvC,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wCAAwC;QACxC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CACtE,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBACnD,WAAW,CACV,+BAA+B,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAClF;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,sEAAsE,CAAC,CAAC;gBAE1F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7E,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,iBAAiB,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAC3E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,+DAA+D,CAAC,CAAC;gBAEnF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;
|
|
1
|
+
{"version":3,"file":"ComplexityRule.js","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export declare class DuplicationRule extends BaseRule {
|
|
|
10
10
|
private readonly SIMILARITY_THRESHOLD;
|
|
11
11
|
constructor();
|
|
12
12
|
evaluate(metrics: Metric[]): Finding[];
|
|
13
|
-
calculateScore(findings: Finding[]
|
|
13
|
+
calculateScore(findings: Finding[], context?: {
|
|
14
|
+
totalFiles: number;
|
|
15
|
+
}): number;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=DuplicationRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuplicationRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,QAAQ;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;;IAU7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA8BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"DuplicationRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,QAAQ;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;;IAU7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA8BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAwB9E"}
|
|
@@ -32,11 +32,11 @@ export class DuplicationRule extends BaseRule {
|
|
|
32
32
|
}
|
|
33
33
|
return findings;
|
|
34
34
|
}
|
|
35
|
-
calculateScore(findings) {
|
|
35
|
+
calculateScore(findings, context) {
|
|
36
36
|
if (findings.length === 0)
|
|
37
37
|
return 100;
|
|
38
38
|
// Each duplication finding reduces score
|
|
39
|
-
const
|
|
39
|
+
const rawPenalty = findings.reduce((sum, finding) => {
|
|
40
40
|
switch (finding.severity) {
|
|
41
41
|
case 'high': return sum + 15;
|
|
42
42
|
case 'medium': return sum + 8;
|
|
@@ -44,7 +44,14 @@ export class DuplicationRule extends BaseRule {
|
|
|
44
44
|
default: return sum;
|
|
45
45
|
}
|
|
46
46
|
}, 0);
|
|
47
|
-
|
|
47
|
+
let finalPenalty = rawPenalty;
|
|
48
|
+
if (context && context.totalFiles > 0) {
|
|
49
|
+
const density = rawPenalty / context.totalFiles;
|
|
50
|
+
// If every file has low duplication (4pts), density 4.
|
|
51
|
+
// 4 * 8 = 32 penalty (Score 68). Reasonable.
|
|
52
|
+
finalPenalty = density * 8;
|
|
53
|
+
}
|
|
54
|
+
const score = Math.max(0, 100 - finalPenalty);
|
|
48
55
|
return Math.round(score * 100) / 100;
|
|
49
56
|
}
|
|
50
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuplicationRule.js","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAK3C;QACE,KAAK,CACH,aAAa,EACb,uBAAuB,EACvB,qEAAqE,CACtE,CAAC;QATJ,aAAa;QACI,yBAAoB,GAAG,EAAE,CAAC,CAAC,4CAA4C;QACvE,yBAAoB,GAAG,IAAI,CAAC,CAAC,iBAAiB;IAQ/D,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAE9E,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,+BAA+B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC/E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2DAA2D,CAAC,CAAC;gBAE/E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;
|
|
1
|
+
{"version":3,"file":"DuplicationRule.js","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAK3C;QACE,KAAK,CACH,aAAa,EACb,uBAAuB,EACvB,qEAAqE,CACtE,CAAC;QATJ,aAAa;QACI,yBAAoB,GAAG,EAAE,CAAC,CAAC,4CAA4C;QACvE,yBAAoB,GAAG,IAAI,CAAC,CAAC,iBAAiB;IAQ/D,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAE9E,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,+BAA+B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC/E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2DAA2D,CAAC,CAAC;gBAE/E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,yCAAyC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC7B,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChD,uDAAuD;YACvD,6CAA6C;YAC7C,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -11,6 +11,8 @@ export declare class SizeRule extends BaseRule {
|
|
|
11
11
|
private readonly MAX_PARAMETERS;
|
|
12
12
|
constructor();
|
|
13
13
|
evaluate(metrics: Metric[]): Finding[];
|
|
14
|
-
calculateScore(findings: Finding[]
|
|
14
|
+
calculateScore(findings: Finding[], context?: {
|
|
15
|
+
totalFiles: number;
|
|
16
|
+
}): number;
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=SizeRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SizeRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,QAAS,SAAQ,QAAQ;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAK;;IAUpC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA0DtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"SizeRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,QAAS,SAAQ,QAAQ;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAK;;IAUpC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA0DtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAqB9E"}
|
|
@@ -52,10 +52,10 @@ export class SizeRule extends BaseRule {
|
|
|
52
52
|
}
|
|
53
53
|
return findings;
|
|
54
54
|
}
|
|
55
|
-
calculateScore(findings) {
|
|
55
|
+
calculateScore(findings, context) {
|
|
56
56
|
if (findings.length === 0)
|
|
57
57
|
return 100;
|
|
58
|
-
const
|
|
58
|
+
const rawPenalty = findings.reduce((sum, finding) => {
|
|
59
59
|
switch (finding.severity) {
|
|
60
60
|
case 'high': return sum + 8;
|
|
61
61
|
case 'medium': return sum + 4;
|
|
@@ -63,7 +63,12 @@ export class SizeRule extends BaseRule {
|
|
|
63
63
|
default: return sum;
|
|
64
64
|
}
|
|
65
65
|
}, 0);
|
|
66
|
-
|
|
66
|
+
let finalPenalty = rawPenalty;
|
|
67
|
+
if (context && context.totalFiles > 0) {
|
|
68
|
+
const density = rawPenalty / context.totalFiles;
|
|
69
|
+
finalPenalty = density * 8;
|
|
70
|
+
}
|
|
71
|
+
const score = Math.max(0, 100 - finalPenalty);
|
|
67
72
|
return Math.round(score * 100) / 100;
|
|
68
73
|
}
|
|
69
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SizeRule.js","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SizeRule.js","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ import type { Finding } from '../entities/Finding.js';
|
|
|
8
8
|
export declare class TypeSafetyRule extends BaseRule {
|
|
9
9
|
constructor();
|
|
10
10
|
evaluate(metrics: Metric[]): Finding[];
|
|
11
|
-
calculateScore(findings: Finding[]
|
|
11
|
+
calculateScore(findings: Finding[], context?: {
|
|
12
|
+
totalFiles: number;
|
|
13
|
+
}): number;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=TypeSafetyRule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSafetyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;;IAS1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA2BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"TypeSafetyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;;IAS1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA2BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAyB9E"}
|
|
@@ -27,7 +27,7 @@ export class TypeSafetyRule extends BaseRule {
|
|
|
27
27
|
}
|
|
28
28
|
return findings;
|
|
29
29
|
}
|
|
30
|
-
calculateScore(findings) {
|
|
30
|
+
calculateScore(findings, context) {
|
|
31
31
|
if (findings.length === 0)
|
|
32
32
|
return 100;
|
|
33
33
|
// Each 'any' usage reduces the score
|
|
@@ -37,8 +37,17 @@ export class TypeSafetyRule extends BaseRule {
|
|
|
37
37
|
return sum + (match ? parseInt(match[1] ?? '0', 10) : 1);
|
|
38
38
|
}, 0);
|
|
39
39
|
// Each 'any' costs 3 points
|
|
40
|
-
const
|
|
41
|
-
|
|
40
|
+
const rawPenalty = totalAnyUsages * 3;
|
|
41
|
+
let finalPenalty = rawPenalty;
|
|
42
|
+
if (context && context.totalFiles > 0) {
|
|
43
|
+
const density = rawPenalty / context.totalFiles;
|
|
44
|
+
// Density of 3 (1 'any' per file) -> 3 * 5 = 15 penalty (85 score).
|
|
45
|
+
finalPenalty = density * 5;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
finalPenalty = Math.min(100, rawPenalty);
|
|
49
|
+
}
|
|
50
|
+
const score = Math.max(0, 100 - finalPenalty);
|
|
42
51
|
return Math.round(score * 100) / 100;
|
|
43
52
|
}
|
|
44
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSafetyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C;QACE,KAAK,CACH,aAAa,EACb,kBAAkB,EAClB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAEpE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,8BAA8B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC9E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2EAA2E,CAAC,CAAC;gBAE/F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;
|
|
1
|
+
{"version":3,"file":"TypeSafetyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C;QACE,KAAK,CACH,aAAa,EACb,kBAAkB,EAClB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAEpE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,8BAA8B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC9E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2EAA2E,CAAC,CAAC;gBAE/F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,qCAAqC;QACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACtD,uDAAuD;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,4BAA4B;QAC5B,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC,CAAC;QAEtC,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChD,oEAAoE;YACpE,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
|