]> git.lizzy.rs Git - rust.git/commitdiff
Review fixes.
authorYukio Siraichi <yukio.siraichi@gmail.com>
Tue, 13 Mar 2018 04:06:04 +0000 (01:06 -0300)
committerYukio Siraichi <yukio.siraichi@gmail.com>
Sun, 18 Mar 2018 23:46:27 +0000 (20:46 -0300)
- `suggest_snippet` handling space between refs;
- Suggest message changing according to the number of refs that should
be removed.

src/librustc/traits/error_reporting.rs

index 5bfeff89e355a8335725e3bc6d9fbf5f4a4f8044..31c8cb25c521aa6b7753208ed0c76d47db4865e0 100644 (file)
@@ -883,6 +883,8 @@ fn suggest_borrow_on_unsized_slice(&self,
         }
     }
 
+    /// Whenever references are used by mistake, like `for (i, e) in &vec.iter().enumerate()`,
+    /// suggest removing these references until we reach a type that implements the trait.
     fn suggest_remove_reference(&self,
                                 obligation: &PredicateObligation<'tcx>,
                                 err: &mut DiagnosticBuilder<'tcx>,
@@ -896,16 +898,14 @@ fn suggest_remove_reference(&self,
                 .take_while(|c| *c == '&')
                 .count();
 
-            let mut refs_remaining = refs_number;
             let mut trait_type = trait_ref.self_ty();
             let mut selcx = SelectionContext::new(self);
 
-            while refs_remaining > 0 {
+            for refs_remaining in 0..refs_number {
                 if let ty::TypeVariants::TyRef(_, ty::TypeAndMut{ ty: t_type, mutbl: _ }) =
                     trait_type.sty {
 
                     trait_type = t_type;
-                    refs_remaining -= 1;
 
                     let substs = self.tcx.mk_substs_trait(trait_type, &[]);
                     let new_trait_ref = ty::TraitRef::new(trait_ref.def_id, substs);
@@ -914,12 +914,16 @@ fn suggest_remove_reference(&self,
                                                          new_trait_ref.to_predicate());
 
                     if selcx.evaluate_obligation(&new_obligation) {
+                        let remove_refs = refs_remaining + 1;
+
                         let suggest_snippet = snippet.chars()
-                            .skip(refs_number)
+                            .filter(|c| !c.is_whitespace())
+                            .skip(remove_refs)
                             .collect::<String>();
 
                         err.span_suggestion(span,
-                                            "consider removing `&`s like",
+                                            &format!("consider removing {} references `&`",
+                                                    remove_refs),
                                             format!("{}", suggest_snippet));
 
                         break;