3474: Prime open files on load r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2020-03-05 12:47:39 +00:00 committed by GitHub
commit af50e4ff06
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 0 deletions

View file

@ -13,6 +13,7 @@
pub mod mock_analysis;
mod source_change;
mod prime_caches;
mod status;
mod completion;
mod runnables;
@ -227,6 +228,10 @@ impl Analysis {
self.with_db(|db| status::status(&*db))
}
pub fn prime_caches(&self, files: Vec<FileId>) -> Cancelable<()> {
self.with_db(|db| prime_caches::prime_caches(db, files))
}
/// Gets the text of the source file.
pub fn file_text(&self, file_id: FileId) -> Cancelable<Arc<String>> {
self.with_db(|db| db.file_text(file_id))

View file

@ -0,0 +1,15 @@
//! rust-analyzer is lazy and doesn't not compute anything unless asked. This
//! sometimes is counter productive when, for example, the first goto definition
//! request takes longer to compute. This modules implemented prepopulating of
//! various caches, it's not really advanced at the moment.
use hir::Semantics;
use crate::{FileId, RootDatabase};
pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) {
let sema = Semantics::new(db);
for file in files {
let _ = sema.to_module_def(file);
}
}

View file

@ -426,6 +426,11 @@ fn loop_turn(
show_message(req::MessageType::Info, msg, &connection.sender);
}
world_state.check_watcher.update();
pool.execute({
let subs = loop_state.subscriptions.subscriptions();
let snap = world_state.snapshot();
move || snap.analysis().prime_caches(subs).unwrap_or_else(|_: Canceled| ())
});
}
if state_changed {