use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExclusionReason {
NonRust,
IgnorePattern(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SkippedFile {
pub path: PathBuf,
pub reason: ExclusionReason,
}
impl SkippedFile {
pub fn new(path: PathBuf, reason: ExclusionReason) -> Self {
Self { path, reason }
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct AnalysisScope {
pub analyzed_files: Vec<PathBuf>,
pub skipped_files: Vec<SkippedFile>,
pub exclusion_patterns: Vec<String>,
}
impl AnalysisScope {
pub fn new() -> Self {
Self::default()
}
pub fn add_analyzed(&mut self, path: PathBuf) {
self.analyzed_files.push(path);
}
pub fn add_skipped(&mut self, path: PathBuf, reason: ExclusionReason) {
self.skipped_files.push(SkippedFile::new(path, reason));
}
pub fn set_patterns(&mut self, patterns: Vec<String>) {
self.exclusion_patterns = patterns;
}
pub fn non_rust_count(&self) -> usize {
self.skipped_files
.iter()
.filter(|f| matches!(f.reason, ExclusionReason::NonRust))
.count()
}
pub fn ignored_count(&self) -> usize {
self.skipped_files
.iter()
.filter(|f| matches!(f.reason, ExclusionReason::IgnorePattern(_)))
.count()
}
}