Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/lib.rs')
| -rw-r--r-- | crates/ide-db/src/lib.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/crates/ide-db/src/lib.rs b/crates/ide-db/src/lib.rs index 2516a9d0aa..414cc6cd18 100644 --- a/crates/ide-db/src/lib.rs +++ b/crates/ide-db/src/lib.rs @@ -51,9 +51,8 @@ use salsa::Durability; use std::{fmt, mem::ManuallyDrop}; use base_db::{ - query_group::{self}, - FileSourceRootInput, FileText, Files, RootQueryDb, SourceDatabase, SourceRoot, SourceRootId, - SourceRootInput, Upcast, + query_group, CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Files, RootQueryDb, + SourceDatabase, SourceRoot, SourceRootId, SourceRootInput, Upcast, }; use hir::{ db::{DefDatabase, ExpandDatabase, HirDatabase}, @@ -85,6 +84,7 @@ pub struct RootDatabase { // compile times of all `ide_*` and downstream crates suffer greatly. storage: ManuallyDrop<salsa::Storage<Self>>, files: Arc<Files>, + crates_map: Arc<CratesMap>, } impl std::panic::RefUnwindSafe for RootDatabase {} @@ -102,7 +102,11 @@ impl Drop for RootDatabase { impl Clone for RootDatabase { fn clone(&self) -> Self { - Self { storage: self.storage.clone(), files: self.files.clone() } + Self { + storage: self.storage.clone(), + files: self.files.clone(), + crates_map: self.crates_map.clone(), + } } } @@ -194,6 +198,10 @@ impl SourceDatabase for RootDatabase { let files = Arc::clone(&self.files); files.set_file_source_root_with_durability(self, id, source_root_id, durability); } + + fn crates_map(&self) -> Arc<CratesMap> { + self.crates_map.clone() + } } impl Default for RootDatabase { @@ -207,8 +215,11 @@ impl RootDatabase { let mut db = RootDatabase { storage: ManuallyDrop::new(salsa::Storage::default()), files: Default::default(), + crates_map: Default::default(), }; - db.set_crate_graph_with_durability(Default::default(), Durability::HIGH); + // This needs to be here otherwise `CrateGraphBuilder` will panic. + db.set_all_crates(Arc::new(Box::new([]))); + CrateGraphBuilder::default().set_in_db(&mut db); db.set_proc_macros_with_durability(Default::default(), Durability::HIGH); db.set_local_roots_with_durability(Default::default(), Durability::HIGH); db.set_library_roots_with_durability(Default::default(), Durability::HIGH); @@ -258,7 +269,11 @@ impl RootDatabase { } pub fn snapshot(&self) -> Self { - Self { storage: self.storage.clone(), files: self.files.clone() } + Self { + storage: self.storage.clone(), + files: self.files.clone(), + crates_map: self.crates_map.clone(), + } } } |