use crate::diagnostics::Span;
use super::analysis_types::{OptimizationType, OptimizationImpact};
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct QualityMetrics {
pub complexity: HashMap<String, usize>,
pub lines_of_code: usize,
pub function_count: usize,
pub avg_function_length: f64,
pub max_nesting_depth: usize,
pub duplication: Vec<DuplicationInfo>,
}
#[derive(Debug, Clone)]
pub struct DuplicationInfo {
pub blocks: Vec<Span>,
pub similarity: f64,
pub length: usize,
}
#[derive(Debug, Clone)]
pub struct OptimizationOpportunity {
pub optimization_type: OptimizationType,
pub description: String,
pub location: Option<Span>,
pub impact: OptimizationImpact,
pub suggestion: String,
}
impl QualityMetrics {
pub fn new() -> Self {
Self {
complexity: HashMap::new(),
lines_of_code: 0,
function_count: 0,
avg_function_length: 0.0,
max_nesting_depth: 0,
duplication: Vec::new(),
}
}
}
impl Default for QualityMetrics {
fn default() -> Self {
Self::new()
}
}