@@ -852,40 +852,45 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
852
852
if n == 1 { "" } else { "s" } ,
853
853
) ;
854
854
855
+ let expected_str = if let Some ( n) = expected_tuple {
856
+ assert ! ( expected == 1 ) ;
857
+ if closure_args. as_ref ( ) . map ( |& ( ref pats, _) | pats. len ( ) ) == Some ( n) {
858
+ Cow :: from ( "a single tuple as argument" )
859
+ } else {
860
+ // be verbose when numbers differ
861
+ Cow :: from ( format ! ( "a single {}-tuple as argument" , n) )
862
+ }
863
+ } else {
864
+ Cow :: from ( args_str ( expected, false ) )
865
+ } ;
866
+
867
+ let found_str = if expected_tuple. is_some ( ) {
868
+ args_str ( found, true )
869
+ } else {
870
+ args_str ( found, false )
871
+ } ;
872
+
873
+
855
874
let mut err = struct_span_err ! ( self . tcx. sess, span, E0593 ,
856
875
"{} is expected to take {}, but it takes {}" ,
857
876
kind,
858
- if expected_tuple. is_some( ) {
859
- Cow :: from( "a single tuple as argument" )
860
- } else {
861
- Cow :: from( args_str( expected, false ) )
862
- } ,
863
- if expected_tuple. is_some( ) {
864
- args_str( found, true )
865
- } else {
866
- args_str( found, false )
867
- } ,
877
+ expected_str,
878
+ found_str,
868
879
) ;
869
880
870
881
err. span_label (
871
882
span,
872
883
format ! (
873
- "expected {} that takes {}{} " ,
884
+ "expected {} that takes {}" ,
874
885
kind,
875
- args_str( expected, false ) ,
876
- if let Some ( n) = expected_tuple {
877
- assert!( expected == 1 ) ;
878
- Cow :: from( format!( ", a {}-tuple" , n) )
879
- } else {
880
- Cow :: from( "" )
881
- }
886
+ expected_str,
882
887
)
883
888
) ;
884
889
885
890
if let Some ( span) = found_span {
886
891
if let ( Some ( expected_tuple) , Some ( ( pats, tys) ) ) = ( expected_tuple, closure_args) {
887
892
if expected_tuple != found || pats. len ( ) != found {
888
- err. span_label ( span, format ! ( "takes {}" , args_str ( found , true ) ) ) ;
893
+ err. span_label ( span, format ! ( "takes {}" , found_str ) ) ;
889
894
} else {
890
895
let sugg = format ! (
891
896
"|({}){}|" ,
@@ -906,10 +911,14 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
906
911
} ,
907
912
) ;
908
913
909
- err. span_suggestion ( span, "consider changing to" , sugg) ;
914
+ err. span_suggestion (
915
+ span,
916
+ "consider changing the closure to accept a tuple" ,
917
+ sugg
918
+ ) ;
910
919
}
911
920
} else {
912
- err. span_label ( span, format ! ( "takes {}" , args_str ( found , false ) ) ) ;
921
+ err. span_label ( span, format ! ( "takes {}" , found_str ) ) ;
913
922
}
914
923
}
915
924
0 commit comments