Skip to main content

tokmd_analysis_types/complexity/
file.rs

1//! File and function-level complexity DTOs.
2//!
3//! These serde-stable contract types remain re-exported from the crate root.
4
5use serde::{Deserialize, Serialize};
6
7use super::ComplexityRisk;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct FileComplexity {
11    pub path: String,
12    pub module: String,
13    pub function_count: usize,
14    pub max_function_length: usize,
15    pub cyclomatic_complexity: usize,
16    /// Cognitive complexity for this file.
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub cognitive_complexity: Option<usize>,
19    /// Maximum nesting depth in this file.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub max_nesting: Option<usize>,
22    pub risk_level: ComplexityRisk,
23    /// Function-level complexity details (only when --detail-functions is used).
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub functions: Option<Vec<FunctionComplexityDetail>>,
26}
27
28/// Function-level complexity details.
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct FunctionComplexityDetail {
31    /// Function name.
32    pub name: String,
33    /// Start line (1-indexed).
34    pub line_start: usize,
35    /// End line (1-indexed).
36    pub line_end: usize,
37    /// Function length in lines.
38    pub length: usize,
39    /// Cyclomatic complexity.
40    pub cyclomatic: usize,
41    /// Cognitive complexity (if computed).
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub cognitive: Option<usize>,
44    /// Maximum nesting depth within the function.
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub max_nesting: Option<usize>,
47    /// Number of parameters.
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub param_count: Option<usize>,
50}