vtcode_core/code/code_quality/metrics/
mod.rs1pub mod complexity;
2pub mod coverage;
3
4pub use complexity::ComplexityAnalyzer;
5pub use coverage::CoverageAnalyzer;
6
7#[derive(Debug, Clone, Default)]
9pub struct QualityMetrics {
10 pub total_files: usize,
11 pub formatted_files: usize,
12 pub lint_errors: usize,
13 pub lint_warnings: usize,
14 pub lint_info: usize,
15 pub cyclomatic_complexity: f64,
16 pub test_coverage: f64,
17 pub maintainability_index: f64,
18}
19
20impl QualityMetrics {
21 pub fn quality_score(&self) -> f64 {
23 let format_score = if self.total_files > 0 {
24 (self.formatted_files as f64 / self.total_files as f64) * 25.0
25 } else {
26 25.0
27 };
28
29 let lint_score = if self.lint_errors == 0 {
30 25.0
31 } else {
32 (25.0 * (1.0 - (self.lint_errors as f64 / 10.0).min(1.0))).max(0.0)
33 };
34
35 let complexity_score =
36 (25.0 * (1.0 - (self.cyclomatic_complexity / 20.0).min(1.0))).max(0.0);
37 let coverage_score = self.test_coverage * 0.25;
38
39 format_score + lint_score + complexity_score + coverage_score
40 }
41}