@@ -11,7 +11,7 @@ use std::{
1111use cfg:: { CfgAtom , CfgDiff } ;
1212use hir:: {
1313 Adt , AssocItem , Crate , DefWithBody , FindPathConfig , HasCrate , HasSource , HirDisplay , ModuleDef ,
14- Name ,
14+ Name , crate_lang_items ,
1515 db:: { DefDatabase , ExpandDatabase , HirDatabase } ,
1616 next_solver:: { DbInterner , GenericArgs } ,
1717} ;
@@ -200,7 +200,7 @@ impl flags::AnalysisStats {
200200 let mut num_crates = 0 ;
201201 let mut visited_modules = FxHashSet :: default ( ) ;
202202 let mut visit_queue = Vec :: new ( ) ;
203- for krate in krates {
203+ for & krate in & krates {
204204 let module = krate. root_module ( ) ;
205205 let file_id = module. definition_source_file_id ( db) ;
206206 let file_id = file_id. original_file ( db) ;
@@ -313,6 +313,10 @@ impl flags::AnalysisStats {
313313 }
314314
315315 hir:: attach_db ( db, || {
316+ if !self . skip_lang_items {
317+ self . run_lang_items ( db, & krates, verbosity) ;
318+ }
319+
316320 if !self . skip_lowering {
317321 self . run_body_lowering ( db, & vfs, & bodies, verbosity) ;
318322 }
@@ -1109,6 +1113,26 @@ impl flags::AnalysisStats {
11091113 report_metric ( "body lowering time" , body_lowering_time. time . as_millis ( ) as u64 , "ms" ) ;
11101114 }
11111115
1116+ fn run_lang_items ( & self , db : & RootDatabase , crates : & [ Crate ] , verbosity : Verbosity ) {
1117+ let mut bar = match verbosity {
1118+ Verbosity :: Quiet | Verbosity :: Spammy => ProgressReport :: hidden ( ) ,
1119+ _ if self . output . is_some ( ) => ProgressReport :: hidden ( ) ,
1120+ _ => ProgressReport :: new ( crates. len ( ) ) ,
1121+ } ;
1122+
1123+ let mut sw = self . stop_watch ( ) ;
1124+ bar. tick ( ) ;
1125+ for & krate in crates {
1126+ crate_lang_items ( db, krate. into ( ) ) ;
1127+ bar. inc ( 1 ) ;
1128+ }
1129+
1130+ bar. finish_and_clear ( ) ;
1131+ let time = sw. elapsed ( ) ;
1132+ eprintln ! ( "{:<20} {}" , "Crate lang items:" , time) ;
1133+ report_metric ( "crate lang items time" , time. time . as_millis ( ) as u64 , "ms" ) ;
1134+ }
1135+
11121136 /// Invariant: `file_ids` must be sorted and deduped before passing into here
11131137 fn run_ide_things (
11141138 & self ,
0 commit comments