eff-u-code 2.0.1 → 2.2.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 +27 -1
- package/bin/fuck-u-code.js +49 -1
- package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -1
- package/dist/analyzer/concurrent-analyzer.js +20 -8
- package/dist/analyzer/concurrent-analyzer.js.map +1 -1
- package/dist/analyzer/index.d.ts +0 -3
- package/dist/analyzer/index.d.ts.map +1 -1
- package/dist/analyzer/index.js +9 -7
- package/dist/analyzer/index.js.map +1 -1
- package/dist/cli/commands/analyze.js +1 -0
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts +11 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +195 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +53 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output/json.d.ts.map +1 -1
- package/dist/cli/output/json.js +64 -0
- package/dist/cli/output/json.js.map +1 -1
- package/dist/config/schema.js +2 -2
- package/dist/i18n/locales/en.json +73 -1
- package/dist/i18n/locales/ru.json +73 -1
- package/dist/i18n/locales/zh.json +75 -3
- package/dist/mcp/server.js +4 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/metrics/complexity/cognitive.d.ts +5 -7
- package/dist/metrics/complexity/cognitive.d.ts.map +1 -1
- package/dist/metrics/complexity/cognitive.js +47 -32
- package/dist/metrics/complexity/cognitive.js.map +1 -1
- package/dist/metrics/complexity/cyclomatic.d.ts +5 -7
- package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -1
- package/dist/metrics/complexity/cyclomatic.js +47 -40
- package/dist/metrics/complexity/cyclomatic.js.map +1 -1
- package/dist/metrics/complexity/nesting-depth.d.ts +5 -7
- package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -1
- package/dist/metrics/complexity/nesting-depth.js +19 -24
- package/dist/metrics/complexity/nesting-depth.js.map +1 -1
- package/dist/metrics/index.d.ts +3 -2
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +8 -8
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/naming/convention.d.ts.map +1 -1
- package/dist/metrics/naming/convention.js +4 -0
- package/dist/metrics/naming/convention.js.map +1 -1
- package/dist/metrics/size/file-length.d.ts +5 -7
- package/dist/metrics/size/file-length.d.ts.map +1 -1
- package/dist/metrics/size/file-length.js +18 -23
- package/dist/metrics/size/file-length.js.map +1 -1
- package/dist/metrics/size/function-length.d.ts +5 -8
- package/dist/metrics/size/function-length.d.ts.map +1 -1
- package/dist/metrics/size/function-length.js +45 -30
- package/dist/metrics/size/function-length.js.map +1 -1
- package/dist/metrics/size/parameter-count.d.ts +5 -7
- package/dist/metrics/size/parameter-count.d.ts.map +1 -1
- package/dist/metrics/size/parameter-count.js +19 -24
- package/dist/metrics/size/parameter-count.js.map +1 -1
- package/dist/metrics/thresholds/language-thresholds.d.ts +30 -0
- package/dist/metrics/thresholds/language-thresholds.d.ts.map +1 -0
- package/dist/metrics/thresholds/language-thresholds.js +247 -0
- package/dist/metrics/thresholds/language-thresholds.js.map +1 -0
- package/dist/parser/index.d.ts +1 -5
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +38 -22
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/tree-sitter-parser.d.ts +3 -0
- package/dist/parser/tree-sitter-parser.d.ts.map +1 -1
- package/dist/parser/tree-sitter-parser.js +170 -26
- package/dist/parser/tree-sitter-parser.js.map +1 -1
- package/dist/parser/types.d.ts +1 -1
- package/dist/parser/types.d.ts.map +1 -1
- package/dist/parser/types.js +10 -0
- package/dist/parser/types.js.map +1 -1
- package/dist/scoring/index.d.ts +0 -3
- package/dist/scoring/index.d.ts.map +1 -1
- package/dist/scoring/index.js +0 -3
- package/dist/scoring/index.js.map +1 -1
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyclomatic.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cyclomatic.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,qBAAa,0BAA2B,YAAW,MAAM;IACvD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAK9C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CA+FlD"}
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cyclomatic complexity metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 11-20: Moderate complexity, consider refactoring
|
|
7
|
-
* - 21-50: High complexity, should be refactored
|
|
8
|
-
* - 50+: Very high complexity, must be refactored
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*
|
|
10
7
|
* Formula: CC = 1 + (if) + (loops) + (case) + (catch) + (&&/||) + (ternary)
|
|
11
8
|
*/
|
|
12
9
|
import { t } from '../../i18n/index.js';
|
|
13
|
-
|
|
14
|
-
const THRESHOLDS = {
|
|
15
|
-
EXCELLENT: 5,
|
|
16
|
-
GOOD: 10,
|
|
17
|
-
ACCEPTABLE: 20,
|
|
18
|
-
POOR: 30,
|
|
19
|
-
};
|
|
10
|
+
import { getThresholds } from '../thresholds/language-thresholds.js';
|
|
20
11
|
export class CyclomaticComplexityMetric {
|
|
21
12
|
name = 'cyclomatic_complexity';
|
|
22
13
|
category = 'complexity';
|
|
23
14
|
weight;
|
|
24
|
-
|
|
15
|
+
language;
|
|
16
|
+
constructor(weight, language) {
|
|
25
17
|
this.weight = weight;
|
|
18
|
+
this.language = language;
|
|
26
19
|
}
|
|
27
20
|
calculate(parseResult) {
|
|
28
21
|
const { functions, filePath } = parseResult;
|
|
22
|
+
const thresholds = getThresholds(this.language, 'cyclomaticComplexity');
|
|
29
23
|
if (functions.length === 0) {
|
|
30
24
|
return {
|
|
31
25
|
name: this.name,
|
|
@@ -36,7 +30,6 @@ export class CyclomaticComplexityMetric {
|
|
|
36
30
|
details: t('detail_no_functions'),
|
|
37
31
|
};
|
|
38
32
|
}
|
|
39
|
-
// Calculate complexity statistics
|
|
40
33
|
let totalComplexity = 0;
|
|
41
34
|
let maxComplexity = 0;
|
|
42
35
|
const locations = [];
|
|
@@ -45,8 +38,7 @@ export class CyclomaticComplexityMetric {
|
|
|
45
38
|
if (func.complexity > maxComplexity) {
|
|
46
39
|
maxComplexity = func.complexity;
|
|
47
40
|
}
|
|
48
|
-
|
|
49
|
-
if (func.complexity > THRESHOLDS.GOOD) {
|
|
41
|
+
if (func.complexity > thresholds.good) {
|
|
50
42
|
locations.push({
|
|
51
43
|
filePath,
|
|
52
44
|
line: func.startLine,
|
|
@@ -56,42 +48,57 @@ export class CyclomaticComplexityMetric {
|
|
|
56
48
|
}
|
|
57
49
|
}
|
|
58
50
|
const avgComplexity = totalComplexity / functions.length;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
51
|
+
let avgScore;
|
|
52
|
+
if (avgComplexity <= thresholds.excellent) {
|
|
53
|
+
avgScore = 100;
|
|
54
|
+
}
|
|
55
|
+
else if (avgComplexity <= thresholds.good) {
|
|
56
|
+
avgScore =
|
|
57
|
+
100 -
|
|
58
|
+
((avgComplexity - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
|
|
59
|
+
}
|
|
60
|
+
else if (avgComplexity <= thresholds.acceptable) {
|
|
61
|
+
avgScore =
|
|
62
|
+
80 - ((avgComplexity - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 30;
|
|
63
|
+
}
|
|
64
|
+
else if (avgComplexity <= thresholds.poor) {
|
|
65
|
+
avgScore =
|
|
66
|
+
50 -
|
|
67
|
+
((avgComplexity - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 50;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
avgScore = 0;
|
|
71
|
+
}
|
|
72
|
+
let maxScore;
|
|
73
|
+
if (maxComplexity <= thresholds.excellent) {
|
|
74
|
+
maxScore = 100;
|
|
75
|
+
}
|
|
76
|
+
else if (maxComplexity <= thresholds.good) {
|
|
77
|
+
maxScore =
|
|
68
78
|
100 -
|
|
69
|
-
((
|
|
79
|
+
((maxComplexity - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
|
|
70
80
|
}
|
|
71
|
-
else if (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
80 - ((avgComplexity - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 30;
|
|
81
|
+
else if (maxComplexity <= thresholds.acceptable) {
|
|
82
|
+
maxScore =
|
|
83
|
+
80 - ((maxComplexity - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 30;
|
|
75
84
|
}
|
|
76
|
-
else if (
|
|
77
|
-
|
|
78
|
-
normalizedScore =
|
|
85
|
+
else if (maxComplexity <= thresholds.poor) {
|
|
86
|
+
maxScore =
|
|
79
87
|
50 -
|
|
80
|
-
((
|
|
88
|
+
((maxComplexity - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 50;
|
|
81
89
|
}
|
|
82
90
|
else {
|
|
83
|
-
|
|
84
|
-
normalizedScore = Math.max(0, 20 * Math.exp(-(avgComplexity - THRESHOLDS.POOR) / 20));
|
|
91
|
+
maxScore = 0;
|
|
85
92
|
}
|
|
86
|
-
|
|
93
|
+
const normalizedScore = avgScore * 0.5 + maxScore * 0.5;
|
|
87
94
|
let severity;
|
|
88
|
-
if (maxComplexity <=
|
|
95
|
+
if (maxComplexity <= thresholds.good) {
|
|
89
96
|
severity = 'info';
|
|
90
97
|
}
|
|
91
|
-
else if (maxComplexity <=
|
|
98
|
+
else if (maxComplexity <= thresholds.acceptable) {
|
|
92
99
|
severity = 'warning';
|
|
93
100
|
}
|
|
94
|
-
else if (maxComplexity <=
|
|
101
|
+
else if (maxComplexity <= thresholds.poor) {
|
|
95
102
|
severity = 'error';
|
|
96
103
|
}
|
|
97
104
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyclomatic.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cyclomatic.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Nesting depth metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 4-5: Good, acceptable
|
|
7
|
-
* - 6-7: Moderate, consider refactoring
|
|
8
|
-
* - 8+: Poor, must be refactored
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*/
|
|
10
7
|
import type { Metric, MetricResult, MetricCategory } from '../types.js';
|
|
11
|
-
import type { ParseResult } from '../../parser/types.js';
|
|
8
|
+
import type { ParseResult, Language } from '../../parser/types.js';
|
|
12
9
|
export declare class NestingDepthMetric implements Metric {
|
|
13
10
|
readonly name = "nesting_depth";
|
|
14
11
|
readonly category: MetricCategory;
|
|
15
12
|
readonly weight: number;
|
|
16
|
-
|
|
13
|
+
private readonly language;
|
|
14
|
+
constructor(weight: number, language: Language);
|
|
17
15
|
calculate(parseResult: ParseResult): MetricResult;
|
|
18
16
|
}
|
|
19
17
|
//# sourceMappingURL=nesting-depth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nesting-depth.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/nesting-depth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nesting-depth.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/nesting-depth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAK9C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAyElD"}
|
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Nesting depth metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 4-5: Good, acceptable
|
|
7
|
-
* - 6-7: Moderate, consider refactoring
|
|
8
|
-
* - 8+: Poor, must be refactored
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*/
|
|
10
7
|
import { t } from '../../i18n/index.js';
|
|
11
|
-
|
|
12
|
-
EXCELLENT: 3,
|
|
13
|
-
GOOD: 5,
|
|
14
|
-
ACCEPTABLE: 7,
|
|
15
|
-
POOR: 10,
|
|
16
|
-
};
|
|
8
|
+
import { getThresholds } from '../thresholds/language-thresholds.js';
|
|
17
9
|
export class NestingDepthMetric {
|
|
18
10
|
name = 'nesting_depth';
|
|
19
11
|
category = 'complexity';
|
|
20
12
|
weight;
|
|
21
|
-
|
|
13
|
+
language;
|
|
14
|
+
constructor(weight, language) {
|
|
22
15
|
this.weight = weight;
|
|
16
|
+
this.language = language;
|
|
23
17
|
}
|
|
24
18
|
calculate(parseResult) {
|
|
25
19
|
const { functions, filePath } = parseResult;
|
|
20
|
+
const thresholds = getThresholds(this.language, 'nestingDepth');
|
|
26
21
|
if (functions.length === 0) {
|
|
27
22
|
return {
|
|
28
23
|
name: this.name,
|
|
@@ -41,7 +36,7 @@ export class NestingDepthMetric {
|
|
|
41
36
|
if (func.nestingDepth > maxDepth) {
|
|
42
37
|
maxDepth = func.nestingDepth;
|
|
43
38
|
}
|
|
44
|
-
if (func.nestingDepth >
|
|
39
|
+
if (func.nestingDepth > thresholds.excellent) {
|
|
45
40
|
locations.push({
|
|
46
41
|
filePath,
|
|
47
42
|
line: func.startLine,
|
|
@@ -52,32 +47,32 @@ export class NestingDepthMetric {
|
|
|
52
47
|
}
|
|
53
48
|
const avgDepth = totalDepth / functions.length;
|
|
54
49
|
let normalizedScore;
|
|
55
|
-
if (maxDepth <=
|
|
50
|
+
if (maxDepth <= thresholds.excellent) {
|
|
56
51
|
normalizedScore = 100;
|
|
57
52
|
}
|
|
58
|
-
else if (maxDepth <=
|
|
53
|
+
else if (maxDepth <= thresholds.good) {
|
|
59
54
|
normalizedScore =
|
|
60
|
-
100 - ((maxDepth -
|
|
55
|
+
100 - ((maxDepth - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
|
|
61
56
|
}
|
|
62
|
-
else if (maxDepth <=
|
|
57
|
+
else if (maxDepth <= thresholds.acceptable) {
|
|
63
58
|
normalizedScore =
|
|
64
|
-
80 - ((maxDepth -
|
|
59
|
+
80 - ((maxDepth - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
|
|
65
60
|
}
|
|
66
|
-
else if (maxDepth <=
|
|
61
|
+
else if (maxDepth <= thresholds.poor) {
|
|
67
62
|
normalizedScore =
|
|
68
|
-
45 - ((maxDepth -
|
|
63
|
+
45 - ((maxDepth - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
|
|
69
64
|
}
|
|
70
65
|
else {
|
|
71
|
-
normalizedScore = Math.max(0, 15 * Math.exp(-(maxDepth -
|
|
66
|
+
normalizedScore = Math.max(0, 15 * Math.exp(-(maxDepth - thresholds.poor) / 3));
|
|
72
67
|
}
|
|
73
68
|
let severity;
|
|
74
|
-
if (maxDepth <=
|
|
69
|
+
if (maxDepth <= thresholds.excellent) {
|
|
75
70
|
severity = 'info';
|
|
76
71
|
}
|
|
77
|
-
else if (maxDepth <=
|
|
72
|
+
else if (maxDepth <= thresholds.good) {
|
|
78
73
|
severity = 'warning';
|
|
79
74
|
}
|
|
80
|
-
else if (maxDepth <=
|
|
75
|
+
else if (maxDepth <= thresholds.acceptable) {
|
|
81
76
|
severity = 'error';
|
|
82
77
|
}
|
|
83
78
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nesting-depth.js","sourceRoot":"","sources":["../../../src/metrics/complexity/nesting-depth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nesting-depth.js","sourceRoot":"","sources":["../../../src/metrics/complexity/nesting-depth.ts"],"names":[],"mappings":"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"}
|
package/dist/metrics/index.d.ts
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Metric } from './types.js';
|
|
5
5
|
import type { RuntimeConfig } from '../config/schema.js';
|
|
6
|
+
import type { Language } from '../parser/types.js';
|
|
6
7
|
/**
|
|
7
|
-
* Create all metrics with configured weights
|
|
8
|
+
* Create all metrics with configured weights and language-specific thresholds
|
|
8
9
|
*
|
|
9
10
|
* Weight distribution based on industry standards (SonarQube, CodeClimate, NASA, Microsoft):
|
|
10
11
|
* - Complexity: 32% (3 metrics, each gets 32%/3 = 10.67%)
|
|
@@ -16,6 +17,6 @@ import type { RuntimeConfig } from '../config/schema.js';
|
|
|
16
17
|
* - Naming: 5% (1 metric)
|
|
17
18
|
* Total: 100%
|
|
18
19
|
*/
|
|
19
|
-
export declare function createMetrics(config: RuntimeConfig): Metric[];
|
|
20
|
+
export declare function createMetrics(config: RuntimeConfig, language: Language): Metric[];
|
|
20
21
|
export type { Metric, MetricResult, MetricCategory, Severity } from './types.js';
|
|
21
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAwBjF;AAED,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/metrics/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { CodeDuplicationMetric } from './duplication/code-duplication.js';
|
|
|
13
13
|
import { ErrorHandlingMetric } from './error/error-handling.js';
|
|
14
14
|
import { StructureAnalysisMetric } from './structure/structure-analysis.js';
|
|
15
15
|
/**
|
|
16
|
-
* Create all metrics with configured weights
|
|
16
|
+
* Create all metrics with configured weights and language-specific thresholds
|
|
17
17
|
*
|
|
18
18
|
* Weight distribution based on industry standards (SonarQube, CodeClimate, NASA, Microsoft):
|
|
19
19
|
* - Complexity: 32% (3 metrics, each gets 32%/3 = 10.67%)
|
|
@@ -25,7 +25,7 @@ import { StructureAnalysisMetric } from './structure/structure-analysis.js';
|
|
|
25
25
|
* - Naming: 5% (1 metric)
|
|
26
26
|
* Total: 100%
|
|
27
27
|
*/
|
|
28
|
-
export function createMetrics(config) {
|
|
28
|
+
export function createMetrics(config, language) {
|
|
29
29
|
const weights = config.metrics.weights;
|
|
30
30
|
const complexityWeight = weights.complexity;
|
|
31
31
|
const complexityMetricsCount = 3;
|
|
@@ -34,12 +34,12 @@ export function createMetrics(config) {
|
|
|
34
34
|
const sizeMetricsCount = 3;
|
|
35
35
|
const sizePerMetric = sizeWeight / sizeMetricsCount;
|
|
36
36
|
return [
|
|
37
|
-
new CyclomaticComplexityMetric(complexityPerMetric),
|
|
38
|
-
new CognitiveComplexityMetric(complexityPerMetric),
|
|
39
|
-
new NestingDepthMetric(complexityPerMetric),
|
|
40
|
-
new FunctionLengthMetric(sizePerMetric),
|
|
41
|
-
new FileLengthMetric(sizePerMetric),
|
|
42
|
-
new ParameterCountMetric(sizePerMetric),
|
|
37
|
+
new CyclomaticComplexityMetric(complexityPerMetric, language),
|
|
38
|
+
new CognitiveComplexityMetric(complexityPerMetric, language),
|
|
39
|
+
new NestingDepthMetric(complexityPerMetric, language),
|
|
40
|
+
new FunctionLengthMetric(sizePerMetric, language),
|
|
41
|
+
new FileLengthMetric(sizePerMetric, language),
|
|
42
|
+
new ParameterCountMetric(sizePerMetric, language),
|
|
43
43
|
new CodeDuplicationMetric(weights.duplication),
|
|
44
44
|
new StructureAnalysisMetric(weights.structure),
|
|
45
45
|
new ErrorHandlingMetric(weights.error),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAK5E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,QAAkB;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAEvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAC5C,MAAM,sBAAsB,GAAG,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IAEtE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAChC,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,aAAa,GAAG,UAAU,GAAG,gBAAgB,CAAC;IAEpD,OAAO;QACL,IAAI,0BAA0B,CAAC,mBAAmB,EAAE,QAAQ,CAAC;QAC7D,IAAI,yBAAyB,CAAC,mBAAmB,EAAE,QAAQ,CAAC;QAC5D,IAAI,kBAAkB,CAAC,mBAAmB,EAAE,QAAQ,CAAC;QACrD,IAAI,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;QACjD,IAAI,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC;QAC7C,IAAI,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;QACjD,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9C,IAAI,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9C,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention.d.ts","sourceRoot":"","sources":["../../../src/metrics/naming/convention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"convention.d.ts","sourceRoot":"","sources":["../../../src/metrics/naming/convention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,uBAAuB,CAAC;AA8BnE,qBAAa,sBAAuB,YAAW,MAAM;IACnD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAY;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CA+ElD"}
|
|
@@ -30,6 +30,10 @@ const FUNCTION_RULES = {
|
|
|
30
30
|
rust: ['snake_case'],
|
|
31
31
|
csharp: ['PascalCase'],
|
|
32
32
|
lua: ['camelCase', 'snake_case'],
|
|
33
|
+
php: ['camelCase', 'snake_case'],
|
|
34
|
+
ruby: ['snake_case'],
|
|
35
|
+
swift: ['camelCase'],
|
|
36
|
+
shell: ['snake_case'],
|
|
33
37
|
unknown: ['camelCase', 'snake_case', 'PascalCase'],
|
|
34
38
|
};
|
|
35
39
|
export class NamingConventionMetric {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convention.js","sourceRoot":"","sources":["../../../src/metrics/naming/convention.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convention.js","sourceRoot":"","sources":["../../../src/metrics/naming/convention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* File length metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 201-400 lines: Good, manageable
|
|
7
|
-
* - 401-800 lines: Moderate, consider splitting
|
|
8
|
-
* - 800+ lines: Poor, should be split
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*/
|
|
10
7
|
import type { Metric, MetricResult, MetricCategory } from '../types.js';
|
|
11
|
-
import type { ParseResult } from '../../parser/types.js';
|
|
8
|
+
import type { ParseResult, Language } from '../../parser/types.js';
|
|
12
9
|
export declare class FileLengthMetric implements Metric {
|
|
13
10
|
readonly name = "file_length";
|
|
14
11
|
readonly category: MetricCategory;
|
|
15
12
|
readonly weight: number;
|
|
16
|
-
|
|
13
|
+
private readonly language;
|
|
14
|
+
constructor(weight: number, language: Language);
|
|
17
15
|
calculate(parseResult: ParseResult): MetricResult;
|
|
18
16
|
}
|
|
19
17
|
//# sourceMappingURL=file-length.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-length.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/file-length.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"file-length.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/file-length.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAY,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAK9C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAwClD"}
|
|
@@ -1,55 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* File length metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 201-400 lines: Good, manageable
|
|
7
|
-
* - 401-800 lines: Moderate, consider splitting
|
|
8
|
-
* - 800+ lines: Poor, should be split
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
9
6
|
*/
|
|
10
7
|
import { t } from '../../i18n/index.js';
|
|
11
|
-
|
|
12
|
-
EXCELLENT: 200,
|
|
13
|
-
GOOD: 400,
|
|
14
|
-
ACCEPTABLE: 800,
|
|
15
|
-
POOR: 1500,
|
|
16
|
-
};
|
|
8
|
+
import { getThresholds } from '../thresholds/language-thresholds.js';
|
|
17
9
|
export class FileLengthMetric {
|
|
18
10
|
name = 'file_length';
|
|
19
11
|
category = 'size';
|
|
20
12
|
weight;
|
|
21
|
-
|
|
13
|
+
language;
|
|
14
|
+
constructor(weight, language) {
|
|
22
15
|
this.weight = weight;
|
|
16
|
+
this.language = language;
|
|
23
17
|
}
|
|
24
18
|
calculate(parseResult) {
|
|
25
19
|
const { totalLines, codeLines } = parseResult;
|
|
20
|
+
const thresholds = getThresholds(this.language, 'fileLength');
|
|
26
21
|
let normalizedScore;
|
|
27
|
-
if (codeLines <=
|
|
22
|
+
if (codeLines <= thresholds.excellent) {
|
|
28
23
|
normalizedScore = 100;
|
|
29
24
|
}
|
|
30
|
-
else if (codeLines <=
|
|
25
|
+
else if (codeLines <= thresholds.good) {
|
|
31
26
|
normalizedScore =
|
|
32
|
-
100 - ((codeLines -
|
|
27
|
+
100 - ((codeLines - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 15;
|
|
33
28
|
}
|
|
34
|
-
else if (codeLines <=
|
|
29
|
+
else if (codeLines <= thresholds.acceptable) {
|
|
35
30
|
normalizedScore =
|
|
36
|
-
85 - ((codeLines -
|
|
31
|
+
85 - ((codeLines - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
|
|
37
32
|
}
|
|
38
|
-
else if (codeLines <=
|
|
33
|
+
else if (codeLines <= thresholds.poor) {
|
|
39
34
|
normalizedScore =
|
|
40
|
-
50 - ((codeLines -
|
|
35
|
+
50 - ((codeLines - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 35;
|
|
41
36
|
}
|
|
42
37
|
else {
|
|
43
|
-
normalizedScore = Math.max(0, 15 * Math.exp(-(codeLines -
|
|
38
|
+
normalizedScore = Math.max(0, 15 * Math.exp(-(codeLines - thresholds.poor) / 500));
|
|
44
39
|
}
|
|
45
40
|
let severity;
|
|
46
|
-
if (codeLines <=
|
|
41
|
+
if (codeLines <= thresholds.excellent) {
|
|
47
42
|
severity = 'info';
|
|
48
43
|
}
|
|
49
|
-
else if (codeLines <=
|
|
44
|
+
else if (codeLines <= thresholds.good) {
|
|
50
45
|
severity = 'warning';
|
|
51
46
|
}
|
|
52
|
-
else if (codeLines <=
|
|
47
|
+
else if (codeLines <= thresholds.acceptable) {
|
|
53
48
|
severity = 'error';
|
|
54
49
|
}
|
|
55
50
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-length.js","sourceRoot":"","sources":["../../../src/metrics/size/file-length.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"file-length.js","sourceRoot":"","sources":["../../../src/metrics/size/file-length.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,aAAa,CAAC;IACrB,QAAQ,GAAmB,MAAM,CAAC;IAClC,MAAM,CAAS;IACP,QAAQ,CAAW;IAEpC,YAAY,MAAc,EAAE,QAAkB;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,WAAwB;QAChC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE9D,IAAI,eAAuB,CAAC;QAC5B,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACtC,eAAe,GAAG,GAAG,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,eAAe;gBACb,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/F,CAAC;aAAM,IAAI,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,eAAe;gBACb,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,CAAC;aAAM,IAAI,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,eAAe;gBACb,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;QAChG,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,IAAI,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;aAAM,IAAI,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,UAAU,CAAC;QACxB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,SAAS;YAChB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;YACtD,QAAQ;YACR,OAAO,EAAE,CAAC,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Function length metric
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 51-150 lines: Good, typical business logic
|
|
7
|
-
* - 151-300 lines: Acceptable, complex but manageable
|
|
8
|
-
* - 301-500 lines: Poor, consider refactoring
|
|
9
|
-
* - 500+ lines: Critical, needs refactoring
|
|
4
|
+
* Language-specific thresholds based on official linter defaults.
|
|
5
|
+
* See src/metrics/thresholds/language-thresholds.ts for sources.
|
|
10
6
|
*/
|
|
11
7
|
import type { Metric, MetricResult, MetricCategory } from '../types.js';
|
|
12
|
-
import type { ParseResult } from '../../parser/types.js';
|
|
8
|
+
import type { ParseResult, Language } from '../../parser/types.js';
|
|
13
9
|
export declare class FunctionLengthMetric implements Metric {
|
|
14
10
|
readonly name = "function_length";
|
|
15
11
|
readonly category: MetricCategory;
|
|
16
12
|
readonly weight: number;
|
|
17
|
-
|
|
13
|
+
private readonly language;
|
|
14
|
+
constructor(weight: number, language: Language);
|
|
18
15
|
calculate(parseResult: ParseResult): MetricResult;
|
|
19
16
|
}
|
|
20
17
|
//# sourceMappingURL=function-length.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-length.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/function-length.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"function-length.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/function-length.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAInE,qBAAa,oBAAqB,YAAW,MAAM;IACjD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAK9C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CA+FlD"}
|