1- // This implements the dead-code warning pass. It follows crate::reachable
2- // closely. The idea is that all reachable symbols are live, codes called
3- // from live codes are live, and everything else is dead.
1+ // This implements the dead-code warning pass.
2+ // All reachable symbols are live, code called from live code is live, code with certain lint
3+ // expectations such as `#[expect(unused)]` and `#[expect(dead_code)]` is live, and everything else
4+ // is dead.
45
56use hir:: def_id:: { LocalDefIdMap , LocalDefIdSet } ;
67use itertools:: Itertools ;
@@ -685,7 +686,7 @@ fn live_symbols_and_ignored_derived_traits(
685686 ( symbol_visitor. live_symbols , symbol_visitor. ignored_derived_traits )
686687}
687688
688- struct DeadVariant {
689+ struct DeadItem {
689690 def_id : LocalDefId ,
690691 name : Symbol ,
691692 level : lint:: Level ,
@@ -729,7 +730,7 @@ impl<'tcx> DeadVisitor<'tcx> {
729730 // first local def id.
730731 // Prefer calling `Self.warn_dead_code` or `Self.warn_dead_code_grouped_by_lint_level`
731732 // since those methods group by lint level before calling this method.
732- fn warn_multiple_dead_codes (
733+ fn lint_at_single_level (
733734 & self ,
734735 dead_codes : & [ LocalDefId ] ,
735736 participle : & str ,
@@ -832,23 +833,23 @@ impl<'tcx> DeadVisitor<'tcx> {
832833 self . tcx . emit_spanned_lint ( lint, first_hir_id, MultiSpan :: from_spans ( spans) , diag) ;
833834 }
834835
835- fn warn_dead_code_grouped_by_lint_level (
836+ fn warn_multiple (
836837 & self ,
837838 def_id : LocalDefId ,
838839 participle : & str ,
839- dead_codes : Vec < DeadVariant > ,
840+ dead_codes : Vec < DeadItem > ,
840841 is_positional : bool ,
841842 ) {
842843 let mut dead_codes = dead_codes
843844 . iter ( )
844845 . filter ( |v| !v. name . as_str ( ) . starts_with ( '_' ) )
845- . collect :: < Vec < & DeadVariant > > ( ) ;
846+ . collect :: < Vec < & DeadItem > > ( ) ;
846847 if dead_codes. is_empty ( ) {
847848 return ;
848849 }
849850 dead_codes. sort_by_key ( |v| v. level ) ;
850851 for ( _, group) in & dead_codes. into_iter ( ) . group_by ( |v| v. level ) {
851- self . warn_multiple_dead_codes (
852+ self . lint_at_single_level (
852853 & group. map ( |v| v. def_id ) . collect :: < Vec < _ > > ( ) ,
853854 participle,
854855 Some ( def_id) ,
@@ -858,7 +859,7 @@ impl<'tcx> DeadVisitor<'tcx> {
858859 }
859860
860861 fn warn_dead_code ( & mut self , id : LocalDefId , participle : & str ) {
861- self . warn_multiple_dead_codes ( & [ id] , participle, None , false ) ;
862+ self . lint_at_single_level ( & [ id] , participle, None , false ) ;
862863 }
863864
864865 fn check_definition ( & mut self , def_id : LocalDefId ) {
@@ -907,13 +908,13 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalDefId) {
907908 let def_id = item. id . owner_id . def_id ;
908909 if !visitor. is_live_code ( def_id) {
909910 let name = tcx. item_name ( def_id. to_def_id ( ) ) ;
910- let hir = tcx. hir ( ) . local_def_id_to_hir_id ( def_id) ;
911- let level = tcx. lint_level_at_node ( lint:: builtin:: DEAD_CODE , hir ) . 0 ;
911+ let hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( def_id) ;
912+ let level = tcx. lint_level_at_node ( lint:: builtin:: DEAD_CODE , hir_id ) . 0 ;
912913
913- dead_items. push ( DeadVariant { def_id, name, level } )
914+ dead_items. push ( DeadItem { def_id, name, level } )
914915 }
915916 }
916- visitor. warn_dead_code_grouped_by_lint_level (
917+ visitor. warn_multiple (
917918 item. owner_id . def_id ,
918919 "used" ,
919920 dead_items,
@@ -942,7 +943,7 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalDefId) {
942943 // Record to group diagnostics.
943944 let hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( def_id) ;
944945 let level = tcx. lint_level_at_node ( lint:: builtin:: DEAD_CODE , hir_id) . 0 ;
945- dead_variants. push ( DeadVariant { def_id, name : variant. name , level } ) ;
946+ dead_variants. push ( DeadItem { def_id, name : variant. name , level } ) ;
946947 continue ;
947948 }
948949
@@ -967,21 +968,21 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalDefId) {
967968 hir_id,
968969 )
969970 . 0 ;
970- Some ( DeadVariant { def_id, name : field. name , level } )
971+ Some ( DeadItem { def_id, name : field. name , level } )
971972 } else {
972973 None
973974 }
974975 } )
975976 . collect ( ) ;
976- visitor. warn_dead_code_grouped_by_lint_level (
977+ visitor. warn_multiple (
977978 def_id,
978979 "read" ,
979980 dead_fields,
980981 is_positional,
981982 )
982983 }
983984
984- visitor. warn_dead_code_grouped_by_lint_level (
985+ visitor. warn_multiple (
985986 item. owner_id . def_id ,
986987 "constructed" ,
987988 dead_variants,
0 commit comments