@@ -118,7 +118,6 @@ use syntax::parse::token::{self, InternedString, keywords};
118118use syntax:: ptr:: P ;
119119use syntax:: util:: lev_distance:: find_best_match_for_name;
120120use syntax_pos:: { self , Span } ;
121- use errors:: DiagnosticBuilder ;
122121
123122use rustc:: hir:: intravisit:: { self , Visitor } ;
124123use rustc:: hir:: { self , PatKind } ;
@@ -2996,7 +2995,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
29962995 } , expr_t) ;
29972996 match expr_t. sty {
29982997 ty:: TyStruct ( def, _) | ty:: TyUnion ( def, _) => {
2999- Self :: suggest_field_names ( & mut err, def. struct_variant ( ) , field, vec ! [ ] ) ;
2998+ if let Some ( suggested_field_name) =
2999+ Self :: suggest_field_name ( def. struct_variant ( ) , field, vec ! [ ] ) {
3000+ err. span_help ( field. span ,
3001+ & format ! ( "did you mean `{}`?" , suggested_field_name) ) ;
3002+ } ;
30003003 }
30013004 ty:: TyRawPtr ( ..) => {
30023005 err. note ( & format ! ( "`{0}` is a native pointer; perhaps you need to deref with \
@@ -3009,11 +3012,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
30093012 }
30103013 }
30113014
3012- // displays hints about the closest matches in field names
3013- fn suggest_field_names ( err : & mut DiagnosticBuilder ,
3014- variant : ty :: VariantDef < ' tcx > ,
3015- field : & Spanned < ast :: Name > ,
3016- skip : Vec < InternedString > ) {
3015+ // Return an hint about the closest match in field names
3016+ fn suggest_field_name ( variant : ty :: VariantDef < ' tcx > ,
3017+ field : & Spanned < ast :: Name > ,
3018+ skip : Vec < InternedString > )
3019+ -> Option < InternedString > {
30173020 let name = field. node . as_str ( ) ;
30183021 let names = variant. fields . iter ( ) . filter_map ( |field| {
30193022 // ignore already set fields and private fields from non-local crates
@@ -3026,10 +3029,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
30263029 } ) ;
30273030
30283031 // only find fits with at least one matching letter
3029- if let Some ( name) = find_best_match_for_name ( names, & name, Some ( name. len ( ) ) ) {
3030- err. span_help ( field. span ,
3031- & format ! ( "did you mean `{}`?" , name) ) ;
3032- }
3032+ find_best_match_for_name ( names, & name, Some ( name. len ( ) ) )
30333033 }
30343034
30353035 // Check tuple index expressions
@@ -3125,7 +3125,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
31253125 ty) ;
31263126 // prevent all specified fields from being suggested
31273127 let skip_fields = skip_fields. iter ( ) . map ( |ref x| x. name . node . as_str ( ) ) ;
3128- Self :: suggest_field_names ( & mut err, variant, & field. name , skip_fields. collect ( ) ) ;
3128+ if let Some ( field_name) = Self :: suggest_field_name ( variant,
3129+ & field. name ,
3130+ skip_fields. collect ( ) ) {
3131+ err. span_label ( field. name . span , & format ! ( "did you mean `{}`?" , field_name) ) ;
3132+ } ;
31293133 err. emit ( ) ;
31303134 }
31313135
0 commit comments