aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-03-05 11:42:04 +0000
committerAleksey Kladov <[email protected]>2020-03-05 12:40:53 +0000
commitfc970d188e9eeca02bc189bbcc0082a0bbf13a57 (patch)
tree304421ba00a3172c94f05b470e2d16c9ffbab1f4 /crates/ra_ide
parent94c48980bbe51777c52b1d6154181c875f944616 (diff)
Prime open files on load
Diffstat (limited to 'crates/ra_ide')
-rw-r--r--crates/ra_ide/src/lib.rs5
-rw-r--r--crates/ra_ide/src/prime_caches.rs15
2 files changed, 20 insertions, 0 deletions
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs
index 5a41f702e..4dfe0553e 100644
--- a/crates/ra_ide/src/lib.rs
+++ b/crates/ra_ide/src/lib.rs
@@ -13,6 +13,7 @@
13pub mod mock_analysis; 13pub mod mock_analysis;
14mod source_change; 14mod source_change;
15 15
16mod prime_caches;
16mod status; 17mod status;
17mod completion; 18mod completion;
18mod runnables; 19mod runnables;
@@ -227,6 +228,10 @@ impl Analysis {
227 self.with_db(|db| status::status(&*db)) 228 self.with_db(|db| status::status(&*db))
228 } 229 }
229 230
231 pub fn prime_caches(&self, files: Vec<FileId>) -> Cancelable<()> {
232 self.with_db(|db| prime_caches::prime_caches(db, files))
233 }
234
230 /// Gets the text of the source file. 235 /// Gets the text of the source file.
231 pub fn file_text(&self, file_id: FileId) -> Cancelable<Arc<String>> { 236 pub fn file_text(&self, file_id: FileId) -> Cancelable<Arc<String>> {
232 self.with_db(|db| db.file_text(file_id)) 237 self.with_db(|db| db.file_text(file_id))
diff --git a/crates/ra_ide/src/prime_caches.rs b/crates/ra_ide/src/prime_caches.rs
new file mode 100644
index 000000000..628c989bf
--- /dev/null
+++ b/crates/ra_ide/src/prime_caches.rs
@@ -0,0 +1,15 @@
1//! rust-analyzer is lazy and doesn't not compute anything unless asked. This
2//! sometimes is counter productive when, for example, the first goto definition
3//! request takes longer to compute. This modules implemented prepopulating of
4//! various caches, it's not really advanced at the moment.
5
6use hir::Semantics;
7
8use crate::{FileId, RootDatabase};
9
10pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) {
11 let sema = Semantics::new(db);
12 for file in files {
13 let _ = sema.to_module_def(file);
14 }
15}