@@ -2142,15 +2142,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
21422142 ) -> bool {
21432143 let tcx = self . tcx ;
21442144 let ( adt, args, unwrap) = match expected. kind ( ) {
2145- // In case Option<NonZero*> is wanted, but * is provided, suggest calling new
2145+ // In case ` Option<NonZero<T>>` is wanted, but `T` is provided, suggest calling ` new`.
21462146 ty:: Adt ( adt, args) if tcx. is_diagnostic_item ( sym:: Option , adt. did ( ) ) => {
21472147 let nonzero_type = args. type_at ( 0 ) ; // Unwrap option type.
21482148 let ty:: Adt ( adt, args) = nonzero_type. kind ( ) else {
21492149 return false ;
21502150 } ;
21512151 ( adt, args, "" )
21522152 }
2153- // In case `NonZero<* >` is wanted but `* ` is provided, also add `.unwrap()` to satisfy types.
2153+ // In case `NonZero<T >` is wanted but `T ` is provided, also add `.unwrap()` to satisfy types.
21542154 ty:: Adt ( adt, args) => ( adt, args, ".unwrap()" ) ,
21552155 _ => return false ,
21562156 } ;
@@ -2159,32 +2159,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
21592159 return false ;
21602160 }
21612161
2162- // FIXME: This can be simplified once `NonZero<T>` is stable.
2163- let coercable_types = [
2164- ( "NonZeroU8" , tcx. types . u8 ) ,
2165- ( "NonZeroU16" , tcx. types . u16 ) ,
2166- ( "NonZeroU32" , tcx. types . u32 ) ,
2167- ( "NonZeroU64" , tcx. types . u64 ) ,
2168- ( "NonZeroU128" , tcx. types . u128 ) ,
2169- ( "NonZeroI8" , tcx. types . i8 ) ,
2170- ( "NonZeroI16" , tcx. types . i16 ) ,
2171- ( "NonZeroI32" , tcx. types . i32 ) ,
2172- ( "NonZeroI64" , tcx. types . i64 ) ,
2173- ( "NonZeroI128" , tcx. types . i128 ) ,
2174- ] ;
2175-
21762162 let int_type = args. type_at ( 0 ) ;
2177-
2178- let Some ( nonzero_alias) = coercable_types. iter ( ) . find_map ( |( nonzero_alias, t) | {
2179- if * t == int_type && self . can_coerce ( expr_ty, * t) { Some ( nonzero_alias) } else { None }
2180- } ) else {
2163+ if !self . can_coerce ( expr_ty, int_type) {
21812164 return false ;
2182- } ;
2165+ }
21832166
21842167 err. multipart_suggestion (
2185- format ! ( "consider calling `{nonzero_alias }::new`" ) ,
2168+ format ! ( "consider calling `{}::new`" , sym :: NonZero ) ,
21862169 vec ! [
2187- ( expr. span. shrink_to_lo( ) , format!( "{nonzero_alias }::new(" ) ) ,
2170+ ( expr. span. shrink_to_lo( ) , format!( "{}::new(" , sym :: NonZero ) ) ,
21882171 ( expr. span. shrink_to_hi( ) , format!( "){unwrap}" ) ) ,
21892172 ] ,
21902173 Applicability :: MaybeIncorrect ,
0 commit comments