eff-u-code 2.0.0 → 2.1.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.
Files changed (70) hide show
  1. package/README.md +30 -4
  2. package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -1
  3. package/dist/analyzer/concurrent-analyzer.js +4 -3
  4. package/dist/analyzer/concurrent-analyzer.js.map +1 -1
  5. package/dist/cli/commands/uninstall.d.ts +11 -0
  6. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  7. package/dist/cli/commands/uninstall.js +195 -0
  8. package/dist/cli/commands/uninstall.js.map +1 -0
  9. package/dist/cli/commands/update.d.ts +6 -0
  10. package/dist/cli/commands/update.d.ts.map +1 -0
  11. package/dist/cli/commands/update.js +53 -0
  12. package/dist/cli/commands/update.js.map +1 -0
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +7 -1
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/config/index.d.ts.map +1 -1
  17. package/dist/config/index.js +2 -0
  18. package/dist/config/index.js.map +1 -1
  19. package/dist/i18n/locales/en.json +30 -1
  20. package/dist/i18n/locales/ru.json +30 -1
  21. package/dist/i18n/locales/zh.json +32 -3
  22. package/dist/mcp/server.js +2 -1
  23. package/dist/mcp/server.js.map +1 -1
  24. package/dist/metrics/complexity/cognitive.d.ts +5 -7
  25. package/dist/metrics/complexity/cognitive.d.ts.map +1 -1
  26. package/dist/metrics/complexity/cognitive.js +19 -27
  27. package/dist/metrics/complexity/cognitive.js.map +1 -1
  28. package/dist/metrics/complexity/cyclomatic.d.ts +5 -7
  29. package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -1
  30. package/dist/metrics/complexity/cyclomatic.js +19 -34
  31. package/dist/metrics/complexity/cyclomatic.js.map +1 -1
  32. package/dist/metrics/complexity/nesting-depth.d.ts +5 -7
  33. package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -1
  34. package/dist/metrics/complexity/nesting-depth.js +19 -24
  35. package/dist/metrics/complexity/nesting-depth.js.map +1 -1
  36. package/dist/metrics/index.d.ts +3 -2
  37. package/dist/metrics/index.d.ts.map +1 -1
  38. package/dist/metrics/index.js +8 -8
  39. package/dist/metrics/index.js.map +1 -1
  40. package/dist/metrics/naming/convention.d.ts.map +1 -1
  41. package/dist/metrics/naming/convention.js +4 -0
  42. package/dist/metrics/naming/convention.js.map +1 -1
  43. package/dist/metrics/size/file-length.d.ts +5 -7
  44. package/dist/metrics/size/file-length.d.ts.map +1 -1
  45. package/dist/metrics/size/file-length.js +18 -23
  46. package/dist/metrics/size/file-length.js.map +1 -1
  47. package/dist/metrics/size/function-length.d.ts +5 -8
  48. package/dist/metrics/size/function-length.d.ts.map +1 -1
  49. package/dist/metrics/size/function-length.js +19 -25
  50. package/dist/metrics/size/function-length.js.map +1 -1
  51. package/dist/metrics/size/parameter-count.d.ts +5 -7
  52. package/dist/metrics/size/parameter-count.d.ts.map +1 -1
  53. package/dist/metrics/size/parameter-count.js +19 -24
  54. package/dist/metrics/size/parameter-count.js.map +1 -1
  55. package/dist/metrics/thresholds/language-thresholds.d.ts +30 -0
  56. package/dist/metrics/thresholds/language-thresholds.d.ts.map +1 -0
  57. package/dist/metrics/thresholds/language-thresholds.js +247 -0
  58. package/dist/metrics/thresholds/language-thresholds.js.map +1 -0
  59. package/dist/parser/tree-sitter-parser.d.ts.map +1 -1
  60. package/dist/parser/tree-sitter-parser.js +128 -0
  61. package/dist/parser/tree-sitter-parser.js.map +1 -1
  62. package/dist/parser/types.d.ts +1 -1
  63. package/dist/parser/types.d.ts.map +1 -1
  64. package/dist/parser/types.js +10 -0
  65. package/dist/parser/types.js.map +1 -1
  66. package/dist/version.d.ts +6 -0
  67. package/dist/version.d.ts.map +1 -0
  68. package/dist/version.js +6 -0
  69. package/dist/version.js.map +1 -0
  70. package/package.json +1 -1
@@ -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
- * Industry thresholds (based on Clean Code, SonarQube):
5
- * - 1-200 lines: Excellent, focused file
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
- constructor(weight: number);
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;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAY,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAuClD"}
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
- * Industry thresholds (based on Clean Code, SonarQube):
5
- * - 1-200 lines: Excellent, focused file
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
- const THRESHOLDS = {
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
- constructor(weight) {
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 <= THRESHOLDS.EXCELLENT) {
22
+ if (codeLines <= thresholds.excellent) {
28
23
  normalizedScore = 100;
29
24
  }
30
- else if (codeLines <= THRESHOLDS.GOOD) {
25
+ else if (codeLines <= thresholds.good) {
31
26
  normalizedScore =
32
- 100 - ((codeLines - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 15;
27
+ 100 - ((codeLines - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 15;
33
28
  }
34
- else if (codeLines <= THRESHOLDS.ACCEPTABLE) {
29
+ else if (codeLines <= thresholds.acceptable) {
35
30
  normalizedScore =
36
- 85 - ((codeLines - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 35;
31
+ 85 - ((codeLines - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
37
32
  }
38
- else if (codeLines <= THRESHOLDS.POOR) {
33
+ else if (codeLines <= thresholds.poor) {
39
34
  normalizedScore =
40
- 50 - ((codeLines - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 35;
35
+ 50 - ((codeLines - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 35;
41
36
  }
42
37
  else {
43
- normalizedScore = Math.max(0, 15 * Math.exp(-(codeLines - THRESHOLDS.POOR) / 500));
38
+ normalizedScore = Math.max(0, 15 * Math.exp(-(codeLines - thresholds.poor) / 500));
44
39
  }
45
40
  let severity;
46
- if (codeLines <= THRESHOLDS.EXCELLENT) {
41
+ if (codeLines <= thresholds.excellent) {
47
42
  severity = 'info';
48
43
  }
49
- else if (codeLines <= THRESHOLDS.GOOD) {
44
+ else if (codeLines <= thresholds.good) {
50
45
  severity = 'warning';
51
46
  }
52
- else if (codeLines <= THRESHOLDS.ACCEPTABLE) {
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;;;;;;;;GAQG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,MAAM,UAAU,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,GAAG;IACf,IAAI,EAAE,IAAI;CACF,CAAC;AAEX,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,aAAa,CAAC;IACrB,QAAQ,GAAmB,MAAM,CAAC;IAClC,MAAM,CAAS;IAExB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,WAAwB;QAChC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAE9C,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
+ {"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
- * Industry thresholds (based on SonarQube, real-world projects):
5
- * - 1-50 lines: Excellent, concise and clear
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
- constructor(weight: number);
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;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,qBAAa,oBAAqB,YAAW,MAAM;IACjD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CA2ElD"}
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;CA4ElD"}
@@ -1,29 +1,23 @@
1
1
  /**
2
2
  * Function length metric
3
3
  *
4
- * Industry thresholds (based on SonarQube, real-world projects):
5
- * - 1-50 lines: Excellent, concise and clear
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 { t } from '../../i18n/index.js';
12
- const THRESHOLDS = {
13
- EXCELLENT: 50,
14
- GOOD: 150,
15
- ACCEPTABLE: 300,
16
- POOR: 500,
17
- };
8
+ import { getThresholds } from '../thresholds/language-thresholds.js';
18
9
  export class FunctionLengthMetric {
19
10
  name = 'function_length';
20
11
  category = 'size';
21
12
  weight;
22
- constructor(weight) {
13
+ language;
14
+ constructor(weight, language) {
23
15
  this.weight = weight;
16
+ this.language = language;
24
17
  }
25
18
  calculate(parseResult) {
26
19
  const { functions, filePath } = parseResult;
20
+ const thresholds = getThresholds(this.language, 'functionLength');
27
21
  if (functions.length === 0) {
28
22
  return {
29
23
  name: this.name,
@@ -42,7 +36,7 @@ export class FunctionLengthMetric {
42
36
  if (func.lineCount > maxLength) {
43
37
  maxLength = func.lineCount;
44
38
  }
45
- if (func.lineCount > THRESHOLDS.GOOD) {
39
+ if (func.lineCount > thresholds.good) {
46
40
  locations.push({
47
41
  filePath,
48
42
  line: func.startLine,
@@ -53,32 +47,32 @@ export class FunctionLengthMetric {
53
47
  }
54
48
  const avgLength = totalLength / functions.length;
55
49
  let normalizedScore;
56
- if (avgLength <= THRESHOLDS.EXCELLENT) {
50
+ if (avgLength <= thresholds.excellent) {
57
51
  normalizedScore = 100;
58
52
  }
59
- else if (avgLength <= THRESHOLDS.GOOD) {
53
+ else if (avgLength <= thresholds.good) {
60
54
  normalizedScore =
61
- 100 - ((avgLength - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 15;
55
+ 100 - ((avgLength - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 15;
62
56
  }
63
- else if (avgLength <= THRESHOLDS.ACCEPTABLE) {
57
+ else if (avgLength <= thresholds.acceptable) {
64
58
  normalizedScore =
65
- 85 - ((avgLength - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 35;
59
+ 85 - ((avgLength - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
66
60
  }
67
- else if (avgLength <= THRESHOLDS.POOR) {
61
+ else if (avgLength <= thresholds.poor) {
68
62
  normalizedScore =
69
- 50 - ((avgLength - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 35;
63
+ 50 - ((avgLength - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 35;
70
64
  }
71
65
  else {
72
- normalizedScore = Math.max(0, 15 * Math.exp(-(avgLength - THRESHOLDS.POOR) / 50));
66
+ normalizedScore = Math.max(0, 15 * Math.exp(-(avgLength - thresholds.poor) / 50));
73
67
  }
74
68
  let severity;
75
- if (maxLength <= THRESHOLDS.GOOD) {
69
+ if (maxLength <= thresholds.good) {
76
70
  severity = 'info';
77
71
  }
78
- else if (maxLength <= THRESHOLDS.ACCEPTABLE) {
72
+ else if (maxLength <= thresholds.acceptable) {
79
73
  severity = 'warning';
80
74
  }
81
- else if (maxLength <= THRESHOLDS.POOR) {
75
+ else if (maxLength <= thresholds.poor) {
82
76
  severity = 'error';
83
77
  }
84
78
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"function-length.js","sourceRoot":"","sources":["../../../src/metrics/size/function-length.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"function-length.js","sourceRoot":"","sources":["../../../src/metrics/size/function-length.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,17 @@
1
1
  /**
2
2
  * Parameter count metric
3
3
  *
4
- * Industry thresholds (based on Clean Code, SonarQube):
5
- * - 0-3: Excellent, easy to understand and test
6
- * - 4-5: Good, acceptable
7
- * - 6-7: Moderate, consider using object parameter
8
- * - 8+: Poor, should 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 ParameterCountMetric implements Metric {
13
10
  readonly name = "parameter_count";
14
11
  readonly category: MetricCategory;
15
12
  readonly weight: number;
16
- constructor(weight: number);
13
+ private readonly language;
14
+ constructor(weight: number, language: Language);
17
15
  calculate(parseResult: ParseResult): MetricResult;
18
16
  }
19
17
  //# sourceMappingURL=parameter-count.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter-count.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/parameter-count.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,qBAAa,oBAAqB,YAAW,MAAM;IACjD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAwElD"}
1
+ {"version":3,"file":"parameter-count.d.ts","sourceRoot":"","sources":["../../../src/metrics/size/parameter-count.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;CAyElD"}
@@ -1,28 +1,23 @@
1
1
  /**
2
2
  * Parameter count metric
3
3
  *
4
- * Industry thresholds (based on Clean Code, SonarQube):
5
- * - 0-3: Excellent, easy to understand and test
6
- * - 4-5: Good, acceptable
7
- * - 6-7: Moderate, consider using object parameter
8
- * - 8+: Poor, should 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
- const THRESHOLDS = {
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 ParameterCountMetric {
18
10
  name = 'parameter_count';
19
11
  category = 'size';
20
12
  weight;
21
- constructor(weight) {
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, 'parameterCount');
26
21
  if (functions.length === 0) {
27
22
  return {
28
23
  name: this.name,
@@ -41,7 +36,7 @@ export class ParameterCountMetric {
41
36
  if (func.parameterCount > maxParams) {
42
37
  maxParams = func.parameterCount;
43
38
  }
44
- if (func.parameterCount > THRESHOLDS.GOOD) {
39
+ if (func.parameterCount > thresholds.good) {
45
40
  locations.push({
46
41
  filePath,
47
42
  line: func.startLine,
@@ -52,32 +47,32 @@ export class ParameterCountMetric {
52
47
  }
53
48
  const avgParams = totalParams / functions.length;
54
49
  let normalizedScore;
55
- if (maxParams <= THRESHOLDS.EXCELLENT) {
50
+ if (maxParams <= thresholds.excellent) {
56
51
  normalizedScore = 100;
57
52
  }
58
- else if (maxParams <= THRESHOLDS.GOOD) {
53
+ else if (maxParams <= thresholds.good) {
59
54
  normalizedScore =
60
- 100 - ((maxParams - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 15;
55
+ 100 - ((maxParams - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 15;
61
56
  }
62
- else if (maxParams <= THRESHOLDS.ACCEPTABLE) {
57
+ else if (maxParams <= thresholds.acceptable) {
63
58
  normalizedScore =
64
- 85 - ((maxParams - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 35;
59
+ 85 - ((maxParams - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
65
60
  }
66
- else if (maxParams <= THRESHOLDS.POOR) {
61
+ else if (maxParams <= thresholds.poor) {
67
62
  normalizedScore =
68
- 50 - ((maxParams - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 35;
63
+ 50 - ((maxParams - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 35;
69
64
  }
70
65
  else {
71
- normalizedScore = Math.max(0, 15 * Math.exp(-(maxParams - THRESHOLDS.POOR) / 3));
66
+ normalizedScore = Math.max(0, 15 * Math.exp(-(maxParams - thresholds.poor) / 3));
72
67
  }
73
68
  let severity;
74
- if (maxParams <= THRESHOLDS.EXCELLENT) {
69
+ if (maxParams <= thresholds.excellent) {
75
70
  severity = 'info';
76
71
  }
77
- else if (maxParams <= THRESHOLDS.GOOD) {
72
+ else if (maxParams <= thresholds.good) {
78
73
  severity = 'warning';
79
74
  }
80
- else if (maxParams <= THRESHOLDS.ACCEPTABLE) {
75
+ else if (maxParams <= thresholds.acceptable) {
81
76
  severity = 'error';
82
77
  }
83
78
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"parameter-count.js","sourceRoot":"","sources":["../../../src/metrics/size/parameter-count.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parameter-count.js","sourceRoot":"","sources":["../../../src/metrics/size/parameter-count.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Language-specific code quality thresholds
3
+ *
4
+ * All thresholds are based on official linter defaults and industry standards.
5
+ * Sources are documented for each language.
6
+ */
7
+ import type { Language } from '../../parser/types.js';
8
+ export interface ThresholdConfig {
9
+ excellent: number;
10
+ good: number;
11
+ acceptable: number;
12
+ poor: number;
13
+ }
14
+ export interface LanguageThresholds {
15
+ cyclomaticComplexity: ThresholdConfig;
16
+ cognitiveComplexity: ThresholdConfig;
17
+ functionLength: ThresholdConfig;
18
+ fileLength: ThresholdConfig;
19
+ parameterCount: ThresholdConfig;
20
+ nestingDepth: ThresholdConfig;
21
+ }
22
+ /**
23
+ * Language-specific thresholds map
24
+ */
25
+ export declare const LANGUAGE_THRESHOLDS: Record<Exclude<Language, 'unknown'>, LanguageThresholds>;
26
+ /**
27
+ * Get thresholds for a specific language and metric
28
+ */
29
+ export declare function getThresholds(language: Language, metric: keyof LanguageThresholds): ThresholdConfig;
30
+ //# sourceMappingURL=language-thresholds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-thresholds.d.ts","sourceRoot":"","sources":["../../../src/metrics/thresholds/language-thresholds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,eAAe,CAAC;IACtC,mBAAmB,EAAE,eAAe,CAAC;IACrC,cAAc,EAAE,eAAe,CAAC;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,EAAE,eAAe,CAAC;IAChC,YAAY,EAAE,eAAe,CAAC;CAC/B;AAkOD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,kBAAkB,CAexF,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,kBAAkB,GAC/B,eAAe,CAMjB"}