vtcode_core/code/code_quality/metrics/
mod.rs

1pub mod complexity;
2pub mod coverage;
3
4pub use complexity::ComplexityAnalyzer;
5pub use coverage::CoverageAnalyzer;
6
7/// Code quality metrics
8#[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    /// Calculate overall quality score (0-100)
22    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}