use std::sync::Arc; use tokio::sync::RwLock; use tokio_util::sync::CancellationToken; use prometeu_analysis::FileDB; use prometeu_analysis::ids::{FileId, ProjectId}; use std::collections::HashMap; use crate::rebuild::LspDiagnostic; use crate::rebuild::FlatSymbol; #[derive(Default)] pub struct AnalysisDb { pub file_db: FileDB, pub file_to_project: HashMap, // Os campos abaixo serão conectados conforme PR-03/04/05 (podem começar como None) // pub ast: Option, // pub symbols: Option, // pub types: Option, // pub diagnostics: Vec, /// Incrementa a cada rebuild concluído com sucesso pub revision: u64, /// Cancel token do último rebuild em progresso (se houver) pub active_rebuild: Option, /// Último snapshot bom (consultado pelos handlers LSP) pub last_good: Option, } pub type SharedDb = Arc>; impl AnalysisDb { pub fn project_for_file(&self, file: FileId) -> Option { self.file_to_project.get(&file).copied() } /// Returns all known file ids in the FileDB. pub fn file_ids(&self) -> Vec { // delegate to FileDB helper (added in prometeu-analysis) self.file_db.all_files() } } #[derive(Default, Clone)] pub struct AnalysisSnapshot { /// Diagnostics por arquivo (URI LSP → diagnostics já convertidos) pub diagnostics_by_uri: HashMap>, /// Lista “flatten” de símbolos para workspaceSymbol/documentSymbol pub symbols_flat: Vec, }