Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/base-db/src/change.rs')
| -rw-r--r-- | crates/base-db/src/change.rs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/crates/base-db/src/change.rs b/crates/base-db/src/change.rs index da2fb27571..c728f3e5ca 100644 --- a/crates/base-db/src/change.rs +++ b/crates/base-db/src/change.rs @@ -3,11 +3,14 @@ use std::fmt; -use salsa::Durability; +use rustc_hash::FxHashSet; +use salsa::{Durability, Setter as _}; use triomphe::Arc; use vfs::FileId; -use crate::{CrateGraphBuilder, CratesIdMap, RootQueryDb, SourceRoot, SourceRootId}; +use crate::{ + CrateGraphBuilder, CratesIdMap, LibraryRoots, LocalRoots, RootQueryDb, SourceRoot, SourceRootId, +}; /// Encapsulate a bunch of raw `.set` calls on the database. #[derive(Default)] @@ -49,8 +52,15 @@ impl FileChange { pub fn apply(self, db: &mut dyn RootQueryDb) -> Option<CratesIdMap> { let _p = tracing::info_span!("FileChange::apply").entered(); if let Some(roots) = self.roots { + let mut local_roots = FxHashSet::default(); + let mut library_roots = FxHashSet::default(); for (idx, root) in roots.into_iter().enumerate() { let root_id = SourceRootId(idx as u32); + if root.is_library { + library_roots.insert(root_id); + } else { + local_roots.insert(root_id); + } let durability = source_root_durability(&root); for file_id in root.iter() { db.set_file_source_root_with_durability(file_id, root_id, durability); @@ -58,6 +68,8 @@ impl FileChange { db.set_source_root_with_durability(root_id, Arc::new(root), durability); } + LocalRoots::get(db).set_roots(db).to(local_roots); + LibraryRoots::get(db).set_roots(db).to(library_roots); } for (file_id, text) in self.files_changed { |