use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct FormattingResult {
pub formatted_circuit: FormattedCircuit,
pub statistics: FormattingStatistics,
pub changes: Vec<FormattingChange>,
pub style_information: StyleInformation,
pub quality_metrics: QualityMetrics,
pub duration: Duration,
}
#[derive(Debug, Clone)]
pub struct FormattedCircuit {
pub code: String,
pub line_count: usize,
pub char_count: usize,
}
#[derive(Debug, Clone, Default)]
pub struct FormattingStatistics {
pub total_lines: usize,
pub lines_modified: usize,
pub characters_added: usize,
pub characters_removed: usize,
pub formatting_time: Duration,
}
#[derive(Debug, Clone)]
pub struct FormattingChange {
pub change_type: ChangeType,
pub start: Position,
pub end: Position,
pub old_text: String,
pub new_text: String,
}
#[derive(Debug, Clone)]
pub enum ChangeType {
Indentation,
Spacing,
LineBreak,
Alignment,
Comment,
Organization,
}
#[derive(Debug, Clone)]
pub struct Position {
pub line: usize,
pub column: usize,
}
#[derive(Debug, Clone)]
pub struct StyleInformation {
pub applied_rules: Vec<String>,
pub violations_fixed: Vec<String>,
pub compliance_score: f64,
pub consistency_metrics: ConsistencyMetrics,
}
#[derive(Debug, Clone)]
pub struct ConsistencyMetrics {
pub naming_consistency: f64,
pub indentation_consistency: f64,
pub spacing_consistency: f64,
pub comment_consistency: f64,
pub overall_consistency: f64,
}
#[derive(Debug, Clone)]
pub struct QualityMetrics {
pub readability_score: f64,
pub maintainability_score: f64,
pub complexity_score: f64,
pub overall_quality: f64,
}
#[derive(Debug, Clone)]
pub struct StyleCompliance {
pub compliance_level: ComplianceLevel,
pub issues: Vec<StyleIssue>,
pub score: f64,
}
#[derive(Debug, Clone)]
pub enum ComplianceLevel {
Excellent,
Good,
Fair,
Poor,
}
#[derive(Debug, Clone)]
pub struct StyleIssue {
pub issue_type: String,
pub description: String,
pub severity: String,
pub location: Option<Position>,
}
#[derive(Debug, Clone, Default)]
pub struct CodeStructure {
pub sections: Vec<CodeSection>,
pub dependencies: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct CodeSection {
pub name: String,
pub content: String,
pub start_line: usize,
pub end_line: usize,
}
#[derive(Debug, Clone)]
pub struct WhitespaceStatistics {
pub total_whitespace: usize,
pub indentation_chars: usize,
pub spacing_chars: usize,
pub line_breaks: usize,
pub consistency_score: f64,
}
#[derive(Debug, Clone)]
pub struct AlignmentStatistics {
pub total_alignments: usize,
pub successful_alignments: usize,
pub average_quality: f64,
pub consistency_score: f64,
}
#[derive(Debug, Clone)]
pub struct WhitespaceState {
pub indentation_level: usize,
pub line_length: usize,
pub pending_changes: Vec<FormattingChange>,
pub statistics: WhitespaceStatistics,
}
#[derive(Debug, Clone)]
pub struct AlignmentState {
pub active_alignments: Vec<AlignmentGroup>,
pub alignment_columns: Vec<usize>,
pub statistics: AlignmentStatistics,
}
#[derive(Debug, Clone)]
pub struct AlignmentGroup {
pub items: Vec<AlignmentItem>,
pub column: usize,
}
#[derive(Debug, Clone)]
pub struct AlignmentItem {
pub text: String,
pub position: Position,
}
#[derive(Debug, Clone)]
pub struct WhitespaceOptimization {
pub remove_trailing: bool,
pub normalize_indentation: bool,
pub optimize_line_breaks: bool,
pub compress_empty_lines: bool,
pub target_compression: f64,
}
#[derive(Debug, Clone)]
pub struct AlignmentOptimization {
pub auto_detect: bool,
pub quality_threshold: f64,
pub max_distance: usize,
pub prefer_compact: bool,
}
#[derive(Debug, Clone)]
pub struct CommentFormatterState {
pub rules: Vec<CommentRule>,
pub templates: HashMap<String, String>,
pub quality_threshold: f64,
}
#[derive(Debug, Clone)]
pub struct CommentRule {
pub name: String,
pub pattern: String,
pub replacement: String,
}