@@ -656,22 +656,26 @@ impl flags::AnalysisStats {
656
656
let mut sw = self . stop_watch ( ) ;
657
657
let mut all = 0 ;
658
658
let mut fail = 0 ;
659
- for & body in bodies {
660
- if matches ! ( body, DefWithBody :: Variant ( _) ) {
659
+ for & body_id in bodies {
660
+ if matches ! ( body_id, DefWithBody :: Variant ( _) ) {
661
+ continue ;
662
+ }
663
+ let module = body_id. module ( db) ;
664
+ if !self . should_process ( db, body_id, module) {
661
665
continue ;
662
666
}
667
+
663
668
all += 1 ;
664
- let Err ( e) = db. mir_body ( body . into ( ) ) else {
669
+ let Err ( e) = db. mir_body ( body_id . into ( ) ) else {
665
670
continue ;
666
671
} ;
667
672
if verbosity. is_spammy ( ) {
668
- let full_name = body
669
- . module ( db)
673
+ let full_name = module
670
674
. path_to_root ( db)
671
675
. into_iter ( )
672
676
. rev ( )
673
677
. filter_map ( |it| it. name ( db) )
674
- . chain ( Some ( body . name ( db) . unwrap_or_else ( Name :: missing) ) )
678
+ . chain ( Some ( body_id . name ( db) . unwrap_or_else ( Name :: missing) ) )
675
679
. map ( |it| it. display ( db, Edition :: LATEST ) . to_string ( ) )
676
680
. join ( "::" ) ;
677
681
bar. println ( format ! ( "Mir body for {full_name} failed due {e:?}" ) ) ;
@@ -727,26 +731,9 @@ impl flags::AnalysisStats {
727
731
let name = body_id. name ( db) . unwrap_or_else ( Name :: missing) ;
728
732
let module = body_id. module ( db) ;
729
733
let display_target = module. krate ( ) . to_display_target ( db) ;
730
- let full_name = move || {
731
- module
732
- . krate ( )
733
- . display_name ( db)
734
- . map ( |it| it. canonical_name ( ) . as_str ( ) . to_owned ( ) )
735
- . into_iter ( )
736
- . chain (
737
- module
738
- . path_to_root ( db)
739
- . into_iter ( )
740
- . filter_map ( |it| it. name ( db) )
741
- . rev ( )
742
- . chain ( Some ( body_id. name ( db) . unwrap_or_else ( Name :: missing) ) )
743
- . map ( |it| it. display ( db, Edition :: LATEST ) . to_string ( ) ) ,
744
- )
745
- . join ( "::" )
746
- } ;
747
734
if let Some ( only_name) = self . only . as_deref ( ) {
748
735
if name. display ( db, Edition :: LATEST ) . to_string ( ) != only_name
749
- && full_name ( ) != only_name
736
+ && full_name ( db , body_id , module ) != only_name
750
737
{
751
738
continue ;
752
739
}
@@ -763,12 +750,17 @@ impl flags::AnalysisStats {
763
750
let original_file = src. file_id . original_file ( db) ;
764
751
let path = vfs. file_path ( original_file. file_id ( db) ) ;
765
752
let syntax_range = src. text_range ( ) ;
766
- format ! ( "processing: {} ({} {:?})" , full_name( ) , path, syntax_range)
753
+ format ! (
754
+ "processing: {} ({} {:?})" ,
755
+ full_name( db, body_id, module) ,
756
+ path,
757
+ syntax_range
758
+ )
767
759
} else {
768
- format ! ( "processing: {}" , full_name( ) )
760
+ format ! ( "processing: {}" , full_name( db , body_id , module ) )
769
761
}
770
762
} else {
771
- format ! ( "processing: {}" , full_name( ) )
763
+ format ! ( "processing: {}" , full_name( db , body_id , module ) )
772
764
}
773
765
} ;
774
766
if verbosity. is_spammy ( ) {
@@ -781,9 +773,11 @@ impl flags::AnalysisStats {
781
773
Ok ( inference_result) => inference_result,
782
774
Err ( p) => {
783
775
if let Some ( s) = p. downcast_ref :: < & str > ( ) {
784
- eprintln ! ( "infer panicked for {}: {}" , full_name( ) , s) ;
776
+ eprintln ! ( "infer panicked for {}: {}" , full_name( db , body_id , module ) , s) ;
785
777
} else if let Some ( s) = p. downcast_ref :: < String > ( ) {
786
- eprintln ! ( "infer panicked for {}: {}" , full_name( ) , s) ;
778
+ eprintln ! ( "infer panicked for {}: {}" , full_name( db, body_id, module) , s) ;
779
+ } else {
780
+ eprintln ! ( "infer panicked for {}" , full_name( db, body_id, module) ) ;
787
781
}
788
782
panics += 1 ;
789
783
bar. inc ( 1 ) ;
@@ -890,7 +884,7 @@ impl flags::AnalysisStats {
890
884
if verbosity. is_spammy ( ) {
891
885
bar. println ( format ! (
892
886
"In {}: {} exprs, {} unknown, {} partial" ,
893
- full_name( ) ,
887
+ full_name( db , body_id , module ) ,
894
888
num_exprs - previous_exprs,
895
889
num_exprs_unknown - previous_unknown,
896
890
num_exprs_partially_unknown - previous_partially_unknown
@@ -993,7 +987,7 @@ impl flags::AnalysisStats {
993
987
if verbosity. is_spammy ( ) {
994
988
bar. println ( format ! (
995
989
"In {}: {} pats, {} unknown, {} partial" ,
996
- full_name( ) ,
990
+ full_name( db , body_id , module ) ,
997
991
num_pats - previous_pats,
998
992
num_pats_unknown - previous_unknown,
999
993
num_pats_partially_unknown - previous_partially_unknown
@@ -1049,34 +1043,8 @@ impl flags::AnalysisStats {
1049
1043
bar. tick ( ) ;
1050
1044
for & body_id in bodies {
1051
1045
let module = body_id. module ( db) ;
1052
- let full_name = move || {
1053
- module
1054
- . krate ( )
1055
- . display_name ( db)
1056
- . map ( |it| it. canonical_name ( ) . as_str ( ) . to_owned ( ) )
1057
- . into_iter ( )
1058
- . chain (
1059
- module
1060
- . path_to_root ( db)
1061
- . into_iter ( )
1062
- . filter_map ( |it| it. name ( db) )
1063
- . rev ( )
1064
- . chain ( Some ( body_id. name ( db) . unwrap_or_else ( Name :: missing) ) )
1065
- . map ( |it| it. display ( db, Edition :: LATEST ) . to_string ( ) ) ,
1066
- )
1067
- . join ( "::" )
1068
- } ;
1069
- if let Some ( only_name) = self . only . as_deref ( ) {
1070
- if body_id
1071
- . name ( db)
1072
- . unwrap_or_else ( Name :: missing)
1073
- . display ( db, Edition :: LATEST )
1074
- . to_string ( )
1075
- != only_name
1076
- && full_name ( ) != only_name
1077
- {
1078
- continue ;
1079
- }
1046
+ if !self . should_process ( db, body_id, module) {
1047
+ continue ;
1080
1048
}
1081
1049
let msg = move || {
1082
1050
if verbosity. is_verbose ( ) {
@@ -1090,12 +1058,17 @@ impl flags::AnalysisStats {
1090
1058
let original_file = src. file_id . original_file ( db) ;
1091
1059
let path = vfs. file_path ( original_file. file_id ( db) ) ;
1092
1060
let syntax_range = src. text_range ( ) ;
1093
- format ! ( "processing: {} ({} {:?})" , full_name( ) , path, syntax_range)
1061
+ format ! (
1062
+ "processing: {} ({} {:?})" ,
1063
+ full_name( db, body_id, module) ,
1064
+ path,
1065
+ syntax_range
1066
+ )
1094
1067
} else {
1095
- format ! ( "processing: {}" , full_name( ) )
1068
+ format ! ( "processing: {}" , full_name( db , body_id , module ) )
1096
1069
}
1097
1070
} else {
1098
- format ! ( "processing: {}" , full_name( ) )
1071
+ format ! ( "processing: {}" , full_name( db , body_id , module ) )
1099
1072
}
1100
1073
} ;
1101
1074
if verbosity. is_spammy ( ) {
@@ -1205,11 +1178,42 @@ impl flags::AnalysisStats {
1205
1178
eprintln ! ( "{:<20} {} ({} files)" , "IDE:" , ide_time, file_ids. len( ) ) ;
1206
1179
}
1207
1180
1181
+ fn should_process ( & self , db : & RootDatabase , body_id : DefWithBody , module : hir:: Module ) -> bool {
1182
+ if let Some ( only_name) = self . only . as_deref ( ) {
1183
+ let name = body_id. name ( db) . unwrap_or_else ( Name :: missing) ;
1184
+
1185
+ if name. display ( db, Edition :: LATEST ) . to_string ( ) != only_name
1186
+ && full_name ( db, body_id, module) != only_name
1187
+ {
1188
+ return false ;
1189
+ }
1190
+ }
1191
+ true
1192
+ }
1193
+
1208
1194
fn stop_watch ( & self ) -> StopWatch {
1209
1195
StopWatch :: start ( )
1210
1196
}
1211
1197
}
1212
1198
1199
+ fn full_name ( db : & RootDatabase , body_id : DefWithBody , module : hir:: Module ) -> String {
1200
+ module
1201
+ . krate ( )
1202
+ . display_name ( db)
1203
+ . map ( |it| it. canonical_name ( ) . as_str ( ) . to_owned ( ) )
1204
+ . into_iter ( )
1205
+ . chain (
1206
+ module
1207
+ . path_to_root ( db)
1208
+ . into_iter ( )
1209
+ . filter_map ( |it| it. name ( db) )
1210
+ . rev ( )
1211
+ . chain ( Some ( body_id. name ( db) . unwrap_or_else ( Name :: missing) ) )
1212
+ . map ( |it| it. display ( db, Edition :: LATEST ) . to_string ( ) ) ,
1213
+ )
1214
+ . join ( "::" )
1215
+ }
1216
+
1213
1217
fn location_csv_expr ( db : & RootDatabase , vfs : & Vfs , sm : & BodySourceMap , expr_id : ExprId ) -> String {
1214
1218
let src = match sm. expr_syntax ( expr_id) {
1215
1219
Ok ( s) => s,
0 commit comments