use crate::calibrate::{NgramModel, StyleProfile};
use crate::detectors::PrecomputedAnalysis;
use crate::graph::frozen::CodeGraph;
use crate::models::Finding;
use super::{AnalysisStats, ScoreResult};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
use std::sync::Arc;
pub(crate) const SESSION_VERSION: u32 = 3;
#[derive(Serialize, Deserialize)]
pub(crate) struct SessionMeta {
pub version: u32,
pub binary_version: String,
pub file_hashes: HashMap<PathBuf, u64>,
pub source_files: Vec<PathBuf>,
pub edge_fingerprint: u64,
pub findings_by_file: HashMap<PathBuf, Vec<Finding>>,
pub graph_wide_findings: HashMap<String, Vec<Finding>>,
pub last_findings: Vec<Finding>,
pub last_score: ScoreResult,
pub last_stats: AnalysisStats,
}
pub(crate) struct EngineState {
pub file_hashes: HashMap<PathBuf, u64>,
pub source_files: Vec<PathBuf>,
pub graph: Arc<CodeGraph>,
pub mutable_graph: Option<crate::graph::builder::GraphBuilder>,
pub edge_fingerprint: u64,
pub co_change: Option<Arc<crate::git::co_change::CoChangeMatrix>>,
pub precomputed: Option<PrecomputedAnalysis>,
pub style_profile: StyleProfile,
pub ngram_model: Option<NgramModel>,
pub findings_by_file: HashMap<PathBuf, Vec<Finding>>,
pub graph_wide_findings: HashMap<String, Vec<Finding>>,
pub last_findings: Vec<Finding>,
pub last_score: ScoreResult,
pub last_stats: AnalysisStats,
}