use std::path::PathBuf;
use objects::object::{FileChangeSet, SemanticChange};
use crate::analysis::AggregationResult;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SemanticBudget {
pub max_changed_files: usize,
pub max_total_bytes: usize,
pub max_parsed_files: usize,
pub max_file_bytes: usize,
}
impl SemanticBudget {
pub fn unlimited() -> Self {
Self {
max_changed_files: usize::MAX,
max_total_bytes: usize::MAX,
max_parsed_files: usize::MAX,
max_file_bytes: usize::MAX,
}
}
}
impl Default for SemanticBudget {
fn default() -> Self {
Self {
max_changed_files: 2_048,
max_total_bytes: 16 * 1024 * 1024,
max_parsed_files: 512,
max_file_bytes: 1024 * 1024,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum SemanticFallbackReason {
ChangedFileBudgetExceeded { limit: usize, actual: usize },
TotalByteBudgetExceeded { limit: usize, actual: usize },
FileTooLarge {
path: PathBuf,
limit: usize,
actual: usize,
},
ParseBudgetExceeded { limit: usize, attempted: usize },
UnsupportedLanguage { path: PathBuf },
ParseFailed { path: PathBuf },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SemanticCheckStatus {
NoChanges,
HasChanges,
Fallback,
}
#[derive(Clone, Debug)]
pub struct SemanticCheckOnlyResult {
pub status: SemanticCheckStatus,
pub file_changes: FileChangeSet,
pub fallback_reasons: Vec<SemanticFallbackReason>,
}
#[derive(Clone, Debug, Default)]
pub struct SemanticSummaryResult {
pub file_renames: Vec<(PathBuf, PathBuf)>,
pub file_changes: FileChangeSet,
pub aggregated: Option<AggregationResult>,
pub fallback_reasons: Vec<SemanticFallbackReason>,
}
#[derive(Clone, Debug, Default)]
pub struct SemanticDiffResult {
pub changes: Vec<SemanticChange>,
pub file_renames: Vec<(PathBuf, PathBuf)>,
pub file_changes: FileChangeSet,
pub aggregated: Option<AggregationResult>,
pub fallback_reasons: Vec<SemanticFallbackReason>,
}