53 lines
1.6 KiB
Rust
53 lines
1.6 KiB
Rust
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<FileId, ProjectId>,
|
|
|
|
// Os campos abaixo serão conectados conforme PR-03/04/05 (podem começar como None)
|
|
// pub ast: Option<AstArena>,
|
|
// pub symbols: Option<SymbolArena>,
|
|
// pub types: Option<TypeArena>,
|
|
// pub diagnostics: Vec<Diagnostic>,
|
|
|
|
/// Incrementa a cada rebuild concluído com sucesso
|
|
pub revision: u64,
|
|
|
|
/// Cancel token do último rebuild em progresso (se houver)
|
|
pub active_rebuild: Option<CancellationToken>,
|
|
|
|
/// Último snapshot bom (consultado pelos handlers LSP)
|
|
pub last_good: Option<AnalysisSnapshot>,
|
|
}
|
|
|
|
pub type SharedDb = Arc<RwLock<AnalysisDb>>;
|
|
|
|
impl AnalysisDb {
|
|
pub fn project_for_file(&self, file: FileId) -> Option<ProjectId> {
|
|
self.file_to_project.get(&file).copied()
|
|
}
|
|
|
|
/// Returns all known file ids in the FileDB.
|
|
pub fn file_ids(&self) -> Vec<FileId> {
|
|
// 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<String, Vec<LspDiagnostic>>,
|
|
/// Lista “flatten” de símbolos para workspaceSymbol/documentSymbol
|
|
pub symbols_flat: Vec<FlatSymbol>,
|
|
}
|