@@ -15,8 +15,8 @@ use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
15
15
use rustc_middle:: middle:: privacy:: Level ;
16
16
use rustc_middle:: query:: Providers ;
17
17
use rustc_middle:: ty:: { self , TyCtxt } ;
18
- use rustc_session:: lint:: builtin :: { DEAD_CODE , UNUSED_TUPLE_STRUCT_FIELDS } ;
19
- use rustc_session:: lint:: { self , Lint , LintId } ;
18
+ use rustc_session:: lint;
19
+ use rustc_session:: lint:: builtin :: DEAD_CODE ;
20
20
use rustc_span:: symbol:: { sym, Symbol } ;
21
21
use rustc_target:: abi:: FieldIdx ;
22
22
use std:: mem;
@@ -766,6 +766,12 @@ enum ShouldWarnAboutField {
766
766
No ,
767
767
}
768
768
769
+ #[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
770
+ enum ReportOn {
771
+ TupleField ,
772
+ NamedField ,
773
+ }
774
+
769
775
impl < ' tcx > DeadVisitor < ' tcx > {
770
776
fn should_warn_about_field ( & mut self , field : & ty:: FieldDef ) -> ShouldWarnAboutField {
771
777
if self . live_symbols . contains ( & field. did . expect_local ( ) ) {
@@ -787,9 +793,9 @@ impl<'tcx> DeadVisitor<'tcx> {
787
793
ShouldWarnAboutField :: Yes
788
794
}
789
795
790
- fn def_lint_level ( & self , lint : & ' static Lint , id : LocalDefId ) -> lint:: Level {
796
+ fn def_lint_level ( & self , id : LocalDefId ) -> lint:: Level {
791
797
let hir_id = self . tcx . local_def_id_to_hir_id ( id) ;
792
- self . tcx . lint_level_at_node ( lint , hir_id) . 0
798
+ self . tcx . lint_level_at_node ( DEAD_CODE , hir_id) . 0
793
799
}
794
800
795
801
// # Panics
@@ -803,7 +809,7 @@ impl<'tcx> DeadVisitor<'tcx> {
803
809
dead_codes : & [ & DeadItem ] ,
804
810
participle : & str ,
805
811
parent_item : Option < LocalDefId > ,
806
- lint : & ' static Lint ,
812
+ report_on : ReportOn ,
807
813
) {
808
814
let Some ( & first_item) = dead_codes. first ( ) else {
809
815
return ;
@@ -864,8 +870,8 @@ impl<'tcx> DeadVisitor<'tcx> {
864
870
None
865
871
} ;
866
872
867
- let diag = if LintId :: of ( lint ) == LintId :: of ( UNUSED_TUPLE_STRUCT_FIELDS ) {
868
- MultipleDeadCodes :: UnusedTupleStructFields {
873
+ let diag = match report_on {
874
+ ReportOn :: TupleField => MultipleDeadCodes :: UnusedTupleStructFields {
869
875
multiple,
870
876
num,
871
877
descr,
@@ -874,29 +880,29 @@ impl<'tcx> DeadVisitor<'tcx> {
874
880
change_fields_suggestion : ChangeFieldsToBeOfUnitType { num, spans : spans. clone ( ) } ,
875
881
parent_info,
876
882
ignored_derived_impls,
877
- }
878
- } else {
879
- MultipleDeadCodes :: DeadCodes {
883
+ } ,
884
+
885
+ ReportOn :: NamedField => MultipleDeadCodes :: DeadCodes {
880
886
multiple,
881
887
num,
882
888
descr,
883
889
participle,
884
890
name_list,
885
891
parent_info,
886
892
ignored_derived_impls,
887
- }
893
+ } ,
888
894
} ;
889
895
890
896
let hir_id = tcx. local_def_id_to_hir_id ( first_item. def_id ) ;
891
- self . tcx . emit_spanned_lint ( lint , hir_id, MultiSpan :: from_spans ( spans) , diag) ;
897
+ self . tcx . emit_spanned_lint ( DEAD_CODE , hir_id, MultiSpan :: from_spans ( spans) , diag) ;
892
898
}
893
899
894
900
fn warn_multiple (
895
901
& self ,
896
902
def_id : LocalDefId ,
897
903
participle : & str ,
898
904
dead_codes : Vec < DeadItem > ,
899
- lint : & ' static Lint ,
905
+ report_on : ReportOn ,
900
906
) {
901
907
let mut dead_codes = dead_codes
902
908
. iter ( )
@@ -907,17 +913,17 @@ impl<'tcx> DeadVisitor<'tcx> {
907
913
}
908
914
dead_codes. sort_by_key ( |v| v. level ) ;
909
915
for group in dead_codes[ ..] . group_by ( |a, b| a. level == b. level ) {
910
- self . lint_at_single_level ( & group, participle, Some ( def_id) , lint ) ;
916
+ self . lint_at_single_level ( & group, participle, Some ( def_id) , report_on ) ;
911
917
}
912
918
}
913
919
914
920
fn warn_dead_code ( & mut self , id : LocalDefId , participle : & str ) {
915
921
let item = DeadItem {
916
922
def_id : id,
917
923
name : self . tcx . item_name ( id. to_def_id ( ) ) ,
918
- level : self . def_lint_level ( DEAD_CODE , id) ,
924
+ level : self . def_lint_level ( id) ,
919
925
} ;
920
- self . lint_at_single_level ( & [ & item] , participle, None , DEAD_CODE ) ;
926
+ self . lint_at_single_level ( & [ & item] , participle, None , ReportOn :: NamedField ) ;
921
927
}
922
928
923
929
fn check_definition ( & mut self , def_id : LocalDefId ) {
@@ -964,12 +970,12 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
964
970
let def_id = item. id . owner_id . def_id ;
965
971
if !visitor. is_live_code ( def_id) {
966
972
let name = tcx. item_name ( def_id. to_def_id ( ) ) ;
967
- let level = visitor. def_lint_level ( DEAD_CODE , def_id) ;
973
+ let level = visitor. def_lint_level ( def_id) ;
968
974
969
975
dead_items. push ( DeadItem { def_id, name, level } )
970
976
}
971
977
}
972
- visitor. warn_multiple ( item. owner_id . def_id , "used" , dead_items, DEAD_CODE ) ;
978
+ visitor. warn_multiple ( item. owner_id . def_id , "used" , dead_items, ReportOn :: NamedField ) ;
973
979
}
974
980
975
981
if !live_symbols. contains ( & item. owner_id . def_id ) {
@@ -991,32 +997,38 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
991
997
let def_id = variant. def_id . expect_local ( ) ;
992
998
if !live_symbols. contains ( & def_id) {
993
999
// Record to group diagnostics.
994
- let level = visitor. def_lint_level ( DEAD_CODE , def_id) ;
1000
+ let level = visitor. def_lint_level ( def_id) ;
995
1001
dead_variants. push ( DeadItem { def_id, name : variant. name , level } ) ;
996
1002
continue ;
997
1003
}
998
1004
999
1005
let is_positional = variant. fields . raw . first ( ) . map_or ( false , |field| {
1000
1006
field. name . as_str ( ) . starts_with ( |c : char | c. is_ascii_digit ( ) )
1001
1007
} ) ;
1002
- let lint = if is_positional { UNUSED_TUPLE_STRUCT_FIELDS } else { DEAD_CODE } ;
1008
+ let report_on =
1009
+ if is_positional { ReportOn :: TupleField } else { ReportOn :: NamedField } ;
1003
1010
let dead_fields = variant
1004
1011
. fields
1005
1012
. iter ( )
1006
1013
. filter_map ( |field| {
1007
1014
let def_id = field. did . expect_local ( ) ;
1008
1015
if let ShouldWarnAboutField :: Yes = visitor. should_warn_about_field ( field) {
1009
- let level = visitor. def_lint_level ( lint , def_id) ;
1016
+ let level = visitor. def_lint_level ( def_id) ;
1010
1017
Some ( DeadItem { def_id, name : field. name , level } )
1011
1018
} else {
1012
1019
None
1013
1020
}
1014
1021
} )
1015
1022
. collect ( ) ;
1016
- visitor. warn_multiple ( def_id, "read" , dead_fields, lint ) ;
1023
+ visitor. warn_multiple ( def_id, "read" , dead_fields, report_on ) ;
1017
1024
}
1018
1025
1019
- visitor. warn_multiple ( item. owner_id . def_id , "constructed" , dead_variants, DEAD_CODE ) ;
1026
+ visitor. warn_multiple (
1027
+ item. owner_id . def_id ,
1028
+ "constructed" ,
1029
+ dead_variants,
1030
+ ReportOn :: NamedField ,
1031
+ ) ;
1020
1032
}
1021
1033
}
1022
1034
0 commit comments