File tree Expand file tree Collapse file tree 3 files changed +25
-0
lines changed Expand file tree Collapse file tree 3 files changed +25
-0
lines changed Original file line number Diff line number Diff line change 13
13
pub mod mock_analysis;
14
14
mod source_change;
15
15
16
+ mod prime_caches;
16
17
mod status;
17
18
mod completion;
18
19
mod runnables;
@@ -227,6 +228,10 @@ impl Analysis {
227
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
235
/// Gets the text of the source file.
231
236
pub fn file_text ( & self , file_id : FileId ) -> Cancelable < Arc < String > > {
232
237
self . with_db ( |db| db. file_text ( file_id) )
Original file line number Diff line number Diff line change
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
+
6
+ use hir:: Semantics ;
7
+
8
+ use crate :: { FileId , RootDatabase } ;
9
+
10
+ pub ( 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
+ }
Original file line number Diff line number Diff line change @@ -426,6 +426,11 @@ fn loop_turn(
426
426
show_message ( req:: MessageType :: Info , msg, & connection. sender ) ;
427
427
}
428
428
world_state. check_watcher . update ( ) ;
429
+ pool. execute ( {
430
+ let subs = loop_state. subscriptions . subscriptions ( ) ;
431
+ let snap = world_state. snapshot ( ) ;
432
+ move || snap. analysis ( ) . prime_caches ( subs) . unwrap_or_else ( |_: Canceled | ( ) )
433
+ } ) ;
429
434
}
430
435
431
436
if state_changed {
You can’t perform that action at this time.
0 commit comments