use serde::{Deserialize, Serialize};
use super::classification::ClassificationConfig;
use super::detection::{ErrorHandlingConfig, OrchestratorDetectionConfig};
use super::display::{DisplayConfig, GodObjectConfig};
use super::languages::{EntropyConfig, LanguagesConfig};
use super::scoring::{
ComplexityWeightsConfig, ContextMultipliers, NormalizationConfig, RebalancedScoringConfig,
RoleCoverageWeights, RoleMultiplierConfig, RoleMultipliers, ScoringWeights,
};
use super::thresholds::ThresholdsConfig;
use crate::complexity::pure_mapping_patterns::MappingPatternConfig;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DebtmapConfig {
#[serde(default)]
pub scoring: Option<ScoringWeights>,
#[serde(default)]
pub display: Option<DisplayConfig>,
#[serde(default)]
pub external_api: Option<crate::priority::external_api_detector::ExternalApiConfig>,
#[serde(default)]
pub god_object_detection: Option<GodObjectConfig>,
#[serde(default)]
pub thresholds: Option<ThresholdsConfig>,
#[serde(default)]
pub languages: Option<LanguagesConfig>,
#[serde(default)]
pub ignore: Option<IgnoreConfig>,
#[serde(default)]
pub output: Option<OutputConfig>,
#[serde(default)]
pub context: Option<crate::config::classification::ContextConfig>,
#[serde(default)]
pub entropy: Option<EntropyConfig>,
#[serde(default)]
pub role_multipliers: Option<RoleMultipliers>,
#[serde(default)]
pub complexity_thresholds: Option<crate::complexity::threshold_manager::ComplexityThresholds>,
#[serde(default)]
pub error_handling: Option<ErrorHandlingConfig>,
#[serde(default)]
pub normalization: Option<NormalizationConfig>,
#[serde(default)]
pub loc: Option<crate::metrics::LocCountingConfig>,
#[serde(default)]
pub tiers: Option<crate::priority::TierConfig>,
#[serde(default)]
pub role_coverage_weights: Option<RoleCoverageWeights>,
#[serde(default)]
pub role_multiplier_config: Option<RoleMultiplierConfig>,
#[serde(default)]
pub orchestrator_detection: Option<OrchestratorDetectionConfig>,
#[serde(default)]
pub orchestration_adjustment:
Option<crate::priority::scoring::orchestration_adjustment::OrchestrationAdjustmentConfig>,
#[serde(default, rename = "classification")]
pub classification: Option<ClassificationConfig>,
#[serde(default)]
pub mapping_patterns: Option<MappingPatternConfig>,
#[serde(default)]
pub coverage_expectations: Option<crate::priority::scoring::CoverageExpectations>,
#[serde(default)]
pub complexity_weights: Option<ComplexityWeightsConfig>,
#[serde(default)]
pub functional_analysis: Option<crate::analysis::FunctionalAnalysisConfig>,
#[serde(default)]
pub boilerplate_detection:
Option<crate::organization::boilerplate_detector::BoilerplateDetectionConfig>,
#[serde(default, rename = "scoring_rebalanced")]
pub scoring_rebalanced: Option<RebalancedScoringConfig>,
#[serde(default)]
pub context_multipliers: Option<ContextMultipliers>,
#[serde(default)]
pub batch_analysis: Option<super::parallel::BatchAnalysisConfig>,
#[serde(default)]
pub retry: Option<super::retry::RetryConfig>,
#[serde(default)]
pub analysis: Option<AnalysisSettings>,
#[serde(default)]
pub state_detection: Option<crate::analyzers::state_field_detector::StateDetectionConfig>,
#[serde(default)]
pub data_flow_scoring: Option<super::scoring::DataFlowScoringConfig>,
#[serde(default)]
pub context_suggestion: Option<crate::priority::context::ContextConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AnalysisSettings {
#[serde(default)]
pub enable_trait_analysis: Option<bool>,
#[serde(default)]
pub enable_function_pointer_tracking: Option<bool>,
#[serde(default)]
pub enable_framework_patterns: Option<bool>,
#[serde(default)]
pub enable_cross_module_analysis: Option<bool>,
#[serde(default)]
pub max_analysis_depth: Option<usize>,
}
impl DebtmapConfig {
pub fn get_ignore_patterns(&self) -> Vec<String> {
self.ignore
.as_ref()
.map(|ig| ig.patterns.clone())
.unwrap_or_default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IgnoreConfig {
pub patterns: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct OutputConfig {
#[serde(default)]
pub default_format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default)]
pub detail_level: Option<String>,
#[serde(default)]
pub use_color: Option<bool>,
#[serde(default)]
pub evidence_verbosity: Option<super::display::EvidenceVerbosity>,
#[serde(default)]
pub min_confidence_warning: Option<f64>,
#[serde(default)]
pub signal_filters: Option<super::display::SignalFilterConfig>,
}