66// This pass is supposed to perform only simple checks not requiring name resolution
77// or type checking or some other kind of complex analysis.
88
9+ use itertools:: { Either , Itertools } ;
910use rustc_ast:: ast:: * ;
1011use rustc_ast:: attr;
1112use rustc_ast:: expand:: is_proc_macro_attr;
@@ -640,7 +641,7 @@ impl<'a> AstValidator<'a> {
640641 }
641642 }
642643
643- fn suggest_correct_generic_order ( & self , data : & AngleBracketedArgs ) -> String {
644+ fn correct_generic_order_suggestion ( & self , data : & AngleBracketedArgs ) -> String {
644645 // Lifetimes always come first.
645646 let lt_sugg = data. args . iter ( ) . filter_map ( |arg| match arg {
646647 AngleBracketedArg :: Arg ( lt @ GenericArg :: Lifetime ( _) ) => {
@@ -649,11 +650,12 @@ impl<'a> AstValidator<'a> {
649650 _ => None ,
650651 } ) ;
651652 let args_sugg = data. args . iter ( ) . filter_map ( |a| match a {
652- AngleBracketedArg :: Arg ( GenericArg :: Lifetime ( _) ) => None ,
653+ AngleBracketedArg :: Arg ( GenericArg :: Lifetime ( _) ) | AngleBracketedArg :: Constraint ( _) => {
654+ None
655+ }
653656 AngleBracketedArg :: Arg ( arg) => Some ( pprust:: to_string ( |s| s. print_generic_arg ( arg) ) ) ,
654- AngleBracketedArg :: Constraint ( _) => None ,
655657 } ) ;
656- // Cosntraints always come last.
658+ // Constraints always come last.
657659 let constraint_sugg = data. args . iter ( ) . filter_map ( |a| match a {
658660 AngleBracketedArg :: Arg ( _) => None ,
659661 AngleBracketedArg :: Constraint ( c) => {
@@ -673,22 +675,11 @@ impl<'a> AstValidator<'a> {
673675 return ;
674676 }
675677 // Find all generic argument coming after the first constraint...
676- let constraint_spans = data
677- . args
678- . iter ( )
679- . filter_map ( |arg| match arg {
680- AngleBracketedArg :: Constraint ( c) => Some ( c. span ) ,
681- _ => None ,
682- } )
683- . collect :: < Vec < _ > > ( ) ;
684- let arg_spans = data
685- . args
686- . iter ( )
687- . filter_map ( |arg| match arg {
688- AngleBracketedArg :: Arg ( a) => Some ( a. span ( ) ) ,
689- _ => None ,
690- } )
691- . collect :: < Vec < _ > > ( ) ;
678+ let ( constraint_spans, arg_spans) : ( Vec < Span > , Vec < Span > ) =
679+ data. args . iter ( ) . partition_map ( |arg| match arg {
680+ AngleBracketedArg :: Constraint ( c) => Either :: Left ( c. span ) ,
681+ AngleBracketedArg :: Arg ( a) => Either :: Right ( a. span ( ) ) ,
682+ } ) ;
692683 let args_len = arg_spans. len ( ) ;
693684 let constraint_len = constraint_spans. len ( ) ;
694685 // ...and then error:
@@ -706,7 +697,7 @@ impl<'a> AstValidator<'a> {
706697 pluralize!( constraint_len) ,
707698 pluralize!( args_len)
708699 ) ,
709- self . suggest_correct_generic_order ( & data) ,
700+ self . correct_generic_order_suggestion ( & data) ,
710701 Applicability :: MachineApplicable ,
711702 )
712703 . emit ( ) ;
0 commit comments