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
@@ -19,11 +19,11 @@
19
19
  "report_metrics_details": "评分指标详情",
20
20
  "report_worst_files": "最屎代码排行榜",
21
21
  "report_conclusion": "诊断结论",
22
- "report_file_score": "屎气指数: {score}",
22
+ "report_file_score": "糟糕指数: {score}",
23
23
  "report_more_issues": "...还有 {count} 个问题实在太屎,列不完了",
24
24
  "report_score_calc": "评分计算",
25
25
  "report_no_issues": "恭喜!没有特别多问题的文件!",
26
- "overallScore": "屎气指数",
26
+ "overallScore": "糟糕指数",
27
27
  "worstFiles": "最屎代码排行榜",
28
28
  "metricsSummary": "指标摘要",
29
29
  "file": "文件",
@@ -316,5 +316,34 @@
316
316
  "mcp_config_updated": "MCP Server 配置已更新至 {path}",
317
317
  "mcp_unknown_target": "未知目标:{target}。支持:claude, cursor",
318
318
  "mcp_install_example_claude": "配置到 Claude Code",
319
- "mcp_install_example_cursor": "配置到 Cursor"
319
+ "mcp_install_example_cursor": "配置到 Cursor",
320
+ "cmd_uninstall_description": "从本地系统移除 fuck-u-code",
321
+ "uninstall_example": "清理所有本地文件",
322
+ "uninstall_warning": "⚠️ 这将从您的系统中移除 fuck-u-code",
323
+ "uninstall_items": "以下内容将被删除:",
324
+ "uninstall_item_config": "全局配置文件 (~/.fuckucoderc.json)",
325
+ "uninstall_item_mcp": "MCP 服务器配置 (Claude Code, Cursor)",
326
+ "uninstall_item_npm": "全局 npm 包 (eff-u-code)",
327
+ "uninstall_confirm": "确定要继续吗?",
328
+ "uninstall_cancelled": "已取消卸载",
329
+ "uninstall_processing": "正在移除 fuck-u-code...",
330
+ "uninstall_removed_config": "已删除全局配置文件",
331
+ "uninstall_no_config": "未找到全局配置文件",
332
+ "uninstall_removed_claude": "已从 Claude Code 移除 MCP 配置",
333
+ "uninstall_no_claude": "Claude Code 中无 MCP 配置",
334
+ "uninstall_removed_cursor": "已从 Cursor 移除 MCP 配置",
335
+ "uninstall_no_cursor": "Cursor 中无 MCP 配置",
336
+ "uninstall_removed_npm": "已卸载全局 npm 包",
337
+ "uninstall_no_npm": "未找到全局 npm 包",
338
+ "uninstall_complete": "✓ 卸载完成。再见!",
339
+ "cmd_update_description": "更新 eff-u-code 到最新版本",
340
+ "cmd_update_example": "更新到最新版本",
341
+ "update_checking": "正在检查更新...",
342
+ "update_current_version": "当前版本",
343
+ "update_latest_version": "最新版本",
344
+ "update_already_latest": "已经是最新版本",
345
+ "update_updating": "正在更新 eff-u-code...",
346
+ "update_success": "更新成功!",
347
+ "update_updated_to": "已更新到版本",
348
+ "update_failed": "更新失败"
320
349
  }
@@ -15,9 +15,10 @@ import { createAIManager } from '../ai/index.js';
15
15
  import { MarkdownOutput } from '../cli/output/markdown.js';
16
16
  import { JsonOutput } from '../cli/output/json.js';
17
17
  import { setLocale } from '../i18n/index.js';
18
+ import { VERSION } from '../version.js';
18
19
  const server = new McpServer({
19
20
  name: 'fuck-u-code',
20
- version: '2.0.0',
21
+ version: VERSION,
21
22
  });
22
23
  /**
23
24
  * Build a RuntimeConfig from MCP tool parameters.
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -7,19 +7,17 @@
7
7
  * - Breaks in linear flow (continue, break, goto)
8
8
  * - Recursion
9
9
  *
10
- * Industry thresholds (SonarQube):
11
- * - 0-8: Low cognitive load
12
- * - 9-15: Moderate cognitive load
13
- * - 16-25: High cognitive load
14
- * - 25+: Very high cognitive load
10
+ * Language-specific thresholds based on official linter defaults.
11
+ * See src/metrics/thresholds/language-thresholds.ts for sources.
15
12
  */
16
13
  import type { Metric, MetricResult, MetricCategory } from '../types.js';
17
- import type { ParseResult } from '../../parser/types.js';
14
+ import type { ParseResult, Language } from '../../parser/types.js';
18
15
  export declare class CognitiveComplexityMetric implements Metric {
19
16
  readonly name = "cognitive_complexity";
20
17
  readonly category: MetricCategory;
21
18
  readonly weight: number;
22
- constructor(weight: number);
19
+ private readonly language;
20
+ constructor(weight: number, language: Language);
23
21
  calculate(parseResult: ParseResult): MetricResult;
24
22
  }
25
23
  //# sourceMappingURL=cognitive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,qBAAa,yBAA0B,YAAW,MAAM;IACtD,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CA8ElD"}
1
+ {"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,yBAA0B,YAAW,MAAM;IACtD,QAAQ,CAAC,IAAI,0BAA0B;IACvC,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;CA4ElD"}
@@ -7,28 +7,23 @@
7
7
  * - Breaks in linear flow (continue, break, goto)
8
8
  * - Recursion
9
9
  *
10
- * Industry thresholds (SonarQube):
11
- * - 0-8: Low cognitive load
12
- * - 9-15: Moderate cognitive load
13
- * - 16-25: High cognitive load
14
- * - 25+: Very high cognitive load
10
+ * Language-specific thresholds based on official linter defaults.
11
+ * See src/metrics/thresholds/language-thresholds.ts for sources.
15
12
  */
16
13
  import { t } from '../../i18n/index.js';
17
- const THRESHOLDS = {
18
- EXCELLENT: 8,
19
- GOOD: 15,
20
- ACCEPTABLE: 25,
21
- POOR: 40,
22
- };
14
+ import { getThresholds } from '../thresholds/language-thresholds.js';
23
15
  export class CognitiveComplexityMetric {
24
16
  name = 'cognitive_complexity';
25
17
  category = 'complexity';
26
18
  weight;
27
- constructor(weight) {
19
+ language;
20
+ constructor(weight, language) {
28
21
  this.weight = weight;
22
+ this.language = language;
29
23
  }
30
24
  calculate(parseResult) {
31
25
  const { functions, filePath } = parseResult;
26
+ const thresholds = getThresholds(this.language, 'cognitiveComplexity');
32
27
  if (functions.length === 0) {
33
28
  return {
34
29
  name: this.name,
@@ -39,8 +34,6 @@ export class CognitiveComplexityMetric {
39
34
  details: t('detail_no_functions'),
40
35
  };
41
36
  }
42
- // Calculate cognitive complexity for each function
43
- // Cognitive = base complexity + nesting penalty (nesting depth * 2)
44
37
  let totalCognitive = 0;
45
38
  let maxCognitive = 0;
46
39
  const locations = [];
@@ -50,7 +43,7 @@ export class CognitiveComplexityMetric {
50
43
  if (cognitive > maxCognitive) {
51
44
  maxCognitive = cognitive;
52
45
  }
53
- if (cognitive > THRESHOLDS.GOOD) {
46
+ if (cognitive > thresholds.good) {
54
47
  locations.push({
55
48
  filePath,
56
49
  line: func.startLine,
@@ -60,36 +53,35 @@ export class CognitiveComplexityMetric {
60
53
  }
61
54
  }
62
55
  const avgCognitive = totalCognitive / functions.length;
63
- // Non-linear scoring curve
64
56
  let normalizedScore;
65
- if (avgCognitive <= THRESHOLDS.EXCELLENT) {
57
+ if (avgCognitive <= thresholds.excellent) {
66
58
  normalizedScore = 100;
67
59
  }
68
- else if (avgCognitive <= THRESHOLDS.GOOD) {
60
+ else if (avgCognitive <= thresholds.good) {
69
61
  normalizedScore =
70
62
  100 -
71
- ((avgCognitive - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 20;
63
+ ((avgCognitive - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
72
64
  }
73
- else if (avgCognitive <= THRESHOLDS.ACCEPTABLE) {
65
+ else if (avgCognitive <= thresholds.acceptable) {
74
66
  normalizedScore =
75
- 80 - ((avgCognitive - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 35;
67
+ 80 - ((avgCognitive - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
76
68
  }
77
- else if (avgCognitive <= THRESHOLDS.POOR) {
69
+ else if (avgCognitive <= thresholds.poor) {
78
70
  normalizedScore =
79
71
  45 -
80
- ((avgCognitive - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 30;
72
+ ((avgCognitive - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
81
73
  }
82
74
  else {
83
- normalizedScore = Math.max(0, 15 * Math.exp(-(avgCognitive - THRESHOLDS.POOR) / 15));
75
+ normalizedScore = Math.max(0, 15 * Math.exp(-(avgCognitive - thresholds.poor) / 15));
84
76
  }
85
77
  let severity;
86
- if (maxCognitive <= THRESHOLDS.GOOD) {
78
+ if (maxCognitive <= thresholds.good) {
87
79
  severity = 'info';
88
80
  }
89
- else if (maxCognitive <= THRESHOLDS.ACCEPTABLE) {
81
+ else if (maxCognitive <= thresholds.acceptable) {
90
82
  severity = 'warning';
91
83
  }
92
- else if (maxCognitive <= THRESHOLDS.POOR) {
84
+ else if (maxCognitive <= thresholds.poor) {
93
85
  severity = 'error';
94
86
  }
95
87
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cognitive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,MAAM,OAAO,yBAAyB;IAC3B,IAAI,GAAG,sBAAsB,CAAC;IAC9B,QAAQ,GAAmB,YAAY,CAAC;IACxC,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,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAEvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,CAAC;gBACR,eAAe,EAAE,GAAG;gBACpB,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,qBAAqB,CAAC;aAClC,CAAC;QACJ,CAAC;QAED,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,SAAS,GAAqB,EAAE,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAC1D,cAAc,IAAI,SAAS,CAAC;YAC5B,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;gBAC7B,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YACD,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC;oBACb,QAAQ;oBACR,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,YAAY,EAAE,IAAI,CAAC,IAAI;oBACvB,OAAO,EAAE,GAAG,CAAC,CAAC,6BAA6B,CAAC,KAAK,SAAS,EAAE;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;QAEvD,IAAI,eAAuB,CAAC;QAC5B,IAAI,YAAY,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzC,eAAe,GAAG,GAAG,CAAC;QACxB,CAAC;aAAM,IAAI,YAAY,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAC3C,eAAe;gBACb,GAAG;oBACH,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5F,CAAC;aAAM,IAAI,YAAY,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACjD,eAAe;gBACb,EAAE,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7F,CAAC;aAAM,IAAI,YAAY,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAC3C,eAAe;gBACb,EAAE;oBACF,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,YAAY,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpC,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,IAAI,YAAY,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACjD,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;aAAM,IAAI,YAAY,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAC3C,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,YAAY;YACnB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;YACtD,QAAQ;YACR,OAAO,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACzF,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC;IACJ,CAAC;CACF"}
@@ -1,21 +1,19 @@
1
1
  /**
2
2
  * Cyclomatic complexity metric
3
3
  *
4
- * Industry standard thresholds (based on SonarQube, ESLint, CodeClimate):
5
- * - 1-10: Low complexity, easy to test and maintain
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 type { Metric, MetricResult, MetricCategory } from '../types.js';
13
- import type { ParseResult } from '../../parser/types.js';
10
+ import type { ParseResult, Language } from '../../parser/types.js';
14
11
  export declare class CyclomaticComplexityMetric implements Metric {
15
12
  readonly name = "cyclomatic_complexity";
16
13
  readonly category: MetricCategory;
17
14
  readonly weight: number;
18
- constructor(weight: number);
15
+ private readonly language;
16
+ constructor(weight: number, language: Language);
19
17
  calculate(parseResult: ParseResult): MetricResult;
20
18
  }
21
19
  //# sourceMappingURL=cyclomatic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cyclomatic.d.ts","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAA4B,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,qBAAa,0BAA2B,YAAW,MAAM;IACvD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAmFlD"}
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;CA2ElD"}
@@ -1,31 +1,25 @@
1
1
  /**
2
2
  * Cyclomatic complexity metric
3
3
  *
4
- * Industry standard thresholds (based on SonarQube, ESLint, CodeClimate):
5
- * - 1-10: Low complexity, easy to test and maintain
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
- // Industry-standard thresholds (SonarQube defaults)
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
- constructor(weight) {
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
- // Flag functions exceeding acceptable threshold
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,35 @@ export class CyclomaticComplexityMetric {
56
48
  }
57
49
  }
58
50
  const avgComplexity = totalComplexity / functions.length;
59
- // Calculate normalized score using non-linear curve
60
- // Score decreases more rapidly as complexity increases
61
51
  let normalizedScore;
62
- if (avgComplexity <= THRESHOLDS.EXCELLENT) {
52
+ if (avgComplexity <= thresholds.excellent) {
63
53
  normalizedScore = 100;
64
54
  }
65
- else if (avgComplexity <= THRESHOLDS.GOOD) {
66
- // Linear decrease from 100 to 80
55
+ else if (avgComplexity <= thresholds.good) {
67
56
  normalizedScore =
68
57
  100 -
69
- ((avgComplexity - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 20;
58
+ ((avgComplexity - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
70
59
  }
71
- else if (avgComplexity <= THRESHOLDS.ACCEPTABLE) {
72
- // Steeper decrease from 80 to 50
60
+ else if (avgComplexity <= thresholds.acceptable) {
73
61
  normalizedScore =
74
- 80 - ((avgComplexity - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 30;
62
+ 80 - ((avgComplexity - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 30;
75
63
  }
76
- else if (avgComplexity <= THRESHOLDS.POOR) {
77
- // Even steeper decrease from 50 to 20
64
+ else if (avgComplexity <= thresholds.poor) {
78
65
  normalizedScore =
79
66
  50 -
80
- ((avgComplexity - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 30;
67
+ ((avgComplexity - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
81
68
  }
82
69
  else {
83
- // Exponential decay for very high complexity
84
- normalizedScore = Math.max(0, 20 * Math.exp(-(avgComplexity - THRESHOLDS.POOR) / 20));
70
+ normalizedScore = Math.max(0, 20 * Math.exp(-(avgComplexity - thresholds.poor) / 20));
85
71
  }
86
- // Determine severity based on max complexity (worst case matters)
87
72
  let severity;
88
- if (maxComplexity <= THRESHOLDS.GOOD) {
73
+ if (maxComplexity <= thresholds.good) {
89
74
  severity = 'info';
90
75
  }
91
- else if (maxComplexity <= THRESHOLDS.ACCEPTABLE) {
76
+ else if (maxComplexity <= thresholds.acceptable) {
92
77
  severity = 'warning';
93
78
  }
94
- else if (maxComplexity <= THRESHOLDS.POOR) {
79
+ else if (maxComplexity <= thresholds.poor) {
95
80
  severity = 'error';
96
81
  }
97
82
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"cyclomatic.js","sourceRoot":"","sources":["../../../src/metrics/complexity/cyclomatic.ts"],"names":[],"mappings":"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"}
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
- * Industry thresholds:
5
- * - 1-3: Excellent, easy to follow
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
- constructor(weight: number);
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;;;;;;;;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,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAgB;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY;CAwElD"}
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
- * Industry thresholds:
5
- * - 1-3: Excellent, easy to follow
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
- 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 NestingDepthMetric {
18
10
  name = 'nesting_depth';
19
11
  category = 'complexity';
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, '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 > THRESHOLDS.EXCELLENT) {
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 <= THRESHOLDS.EXCELLENT) {
50
+ if (maxDepth <= thresholds.excellent) {
56
51
  normalizedScore = 100;
57
52
  }
58
- else if (maxDepth <= THRESHOLDS.GOOD) {
53
+ else if (maxDepth <= thresholds.good) {
59
54
  normalizedScore =
60
- 100 - ((maxDepth - THRESHOLDS.EXCELLENT) / (THRESHOLDS.GOOD - THRESHOLDS.EXCELLENT)) * 20;
55
+ 100 - ((maxDepth - thresholds.excellent) / (thresholds.good - thresholds.excellent)) * 20;
61
56
  }
62
- else if (maxDepth <= THRESHOLDS.ACCEPTABLE) {
57
+ else if (maxDepth <= thresholds.acceptable) {
63
58
  normalizedScore =
64
- 80 - ((maxDepth - THRESHOLDS.GOOD) / (THRESHOLDS.ACCEPTABLE - THRESHOLDS.GOOD)) * 35;
59
+ 80 - ((maxDepth - thresholds.good) / (thresholds.acceptable - thresholds.good)) * 35;
65
60
  }
66
- else if (maxDepth <= THRESHOLDS.POOR) {
61
+ else if (maxDepth <= thresholds.poor) {
67
62
  normalizedScore =
68
- 45 - ((maxDepth - THRESHOLDS.ACCEPTABLE) / (THRESHOLDS.POOR - THRESHOLDS.ACCEPTABLE)) * 30;
63
+ 45 - ((maxDepth - thresholds.acceptable) / (thresholds.poor - thresholds.acceptable)) * 30;
69
64
  }
70
65
  else {
71
- normalizedScore = Math.max(0, 15 * Math.exp(-(maxDepth - THRESHOLDS.POOR) / 3));
66
+ normalizedScore = Math.max(0, 15 * Math.exp(-(maxDepth - thresholds.poor) / 3));
72
67
  }
73
68
  let severity;
74
- if (maxDepth <= THRESHOLDS.EXCELLENT) {
69
+ if (maxDepth <= thresholds.excellent) {
75
70
  severity = 'info';
76
71
  }
77
- else if (maxDepth <= THRESHOLDS.GOOD) {
72
+ else if (maxDepth <= thresholds.good) {
78
73
  severity = 'warning';
79
74
  }
80
- else if (maxDepth <= THRESHOLDS.ACCEPTABLE) {
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":"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"}
1
+ {"version":3,"file":"nesting-depth.js","sourceRoot":"","sources":["../../../src/metrics/complexity/nesting-depth.ts"],"names":[],"mappings":"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"}
@@ -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;AAEzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAwB7D;AAED,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,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"}
@@ -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;AAI5E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,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,CAAC;QACnD,IAAI,yBAAyB,CAAC,mBAAmB,CAAC;QAClD,IAAI,kBAAkB,CAAC,mBAAmB,CAAC;QAC3C,IAAI,oBAAoB,CAAC,aAAa,CAAC;QACvC,IAAI,gBAAgB,CAAC,aAAa,CAAC;QACnC,IAAI,oBAAoB,CAAC,aAAa,CAAC;QACvC,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
+ {"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;AA0BnE,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"}
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"}