@@ -2111,14 +2111,24 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
21112111 extend : impl Fn ( & mut DiagnosticBuilder < ' tcx , ErrorGuaranteed > ) ,
21122112 ) -> bool {
21132113 let args = segments. clone ( ) . flat_map ( |segment| segment. args ( ) . args ) ;
2114- let types_and_spans: Vec < _ > = segments
2115- . clone ( )
2116- . flat_map ( |segment| {
2117- segment. res . and_then ( |res| {
2118- if segment. args ( ) . args . is_empty ( ) {
2119- None
2120- } else {
2121- Some ( (
2114+
2115+ let ( lt, ty, ct, inf) =
2116+ args. clone ( ) . fold ( ( false , false , false , false ) , |( lt, ty, ct, inf) , arg| match arg {
2117+ hir:: GenericArg :: Lifetime ( _) => ( true , ty, ct, inf) ,
2118+ hir:: GenericArg :: Type ( _) => ( lt, true , ct, inf) ,
2119+ hir:: GenericArg :: Const ( _) => ( lt, ty, true , inf) ,
2120+ hir:: GenericArg :: Infer ( _) => ( lt, ty, ct, true ) ,
2121+ } ) ;
2122+ let mut emitted = false ;
2123+ if lt || ty || ct || inf {
2124+ let types_and_spans: Vec < _ > = segments
2125+ . clone ( )
2126+ . flat_map ( |segment| {
2127+ segment. res . and_then ( |res| {
2128+ if segment. args ( ) . args . is_empty ( ) {
2129+ None
2130+ } else {
2131+ Some ( (
21222132 match res {
21232133 Res :: PrimTy ( ty) => format ! ( "{} `{}`" , res. descr( ) , ty. name( ) ) ,
21242134 Res :: Def ( _, def_id)
@@ -2130,32 +2140,23 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
21302140 } ,
21312141 segment. ident . span ,
21322142 ) )
2133- }
2143+ }
2144+ } )
21342145 } )
2135- } )
2136- . collect ( ) ;
2137- let this_type = match & types_and_spans[ ..] {
2138- [ .., _, ( last, _) ] => format ! (
2139- "{} and {last}" ,
2140- types_and_spans[ ..types_and_spans. len( ) - 1 ]
2141- . iter( )
2142- . map( |( x, _) | x. as_str( ) )
2143- . intersperse( & ", " )
2144- . collect:: <String >( )
2145- ) ,
2146- [ ( only, _) ] => only. to_string ( ) ,
2147- [ ] => "this type" . to_string ( ) ,
2148- } ;
2146+ . collect ( ) ;
2147+ let this_type = match & types_and_spans[ ..] {
2148+ [ .., _, ( last, _) ] => format ! (
2149+ "{} and {last}" ,
2150+ types_and_spans[ ..types_and_spans. len( ) - 1 ]
2151+ . iter( )
2152+ . map( |( x, _) | x. as_str( ) )
2153+ . intersperse( & ", " )
2154+ . collect:: <String >( )
2155+ ) ,
2156+ [ ( only, _) ] => only. to_string ( ) ,
2157+ [ ] => "this type" . to_string ( ) ,
2158+ } ;
21492159
2150- let ( lt, ty, ct, inf) =
2151- args. clone ( ) . fold ( ( false , false , false , false ) , |( lt, ty, ct, inf) , arg| match arg {
2152- hir:: GenericArg :: Lifetime ( _) => ( true , ty, ct, inf) ,
2153- hir:: GenericArg :: Type ( _) => ( lt, true , ct, inf) ,
2154- hir:: GenericArg :: Const ( _) => ( lt, ty, true , inf) ,
2155- hir:: GenericArg :: Infer ( _) => ( lt, ty, ct, true ) ,
2156- } ) ;
2157- let mut emitted = false ;
2158- if lt || ty || ct || inf {
21592160 let arg_spans: Vec < Span > = args. map ( |arg| arg. span ( ) ) . collect ( ) ;
21602161
21612162 let mut kinds = Vec :: with_capacity ( 4 ) ;
0 commit comments