tokmd_analysis_types/
complexity.rs1use serde::{Deserialize, Serialize};
7
8mod file;
9mod halstead;
10mod histogram;
11mod maintainability;
12mod risk;
13mod technical_debt;
14
15pub use file::{FileComplexity, FunctionComplexityDetail};
16pub use halstead::HalsteadMetrics;
17pub use histogram::ComplexityHistogram;
18pub use maintainability::MaintainabilityIndex;
19pub use risk::ComplexityRisk;
20pub use technical_debt::{TechnicalDebtLevel, TechnicalDebtRatio};
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct ComplexityReport {
24 pub total_functions: usize,
25 pub avg_function_length: f64,
26 pub max_function_length: usize,
27 pub avg_cyclomatic: f64,
28 pub max_cyclomatic: usize,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub avg_cognitive: Option<f64>,
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub max_cognitive: Option<usize>,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub avg_nesting_depth: Option<f64>,
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub max_nesting_depth: Option<usize>,
41 pub high_risk_files: usize,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub histogram: Option<ComplexityHistogram>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub halstead: Option<HalsteadMetrics>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub maintainability_index: Option<MaintainabilityIndex>,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub technical_debt: Option<TechnicalDebtRatio>,
54 pub files: Vec<FileComplexity>,
55}