about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-10-05 11:37:21 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-10-09 10:17:29 -0700
commit4fcaa4a283faa1c5b6b18f7c1dad002dbc1f7bea (patch)
tree47bdb36d2db3cc2d0b81802666e1b9562743c2eb
parent722bb515e2b5f93aad4cfdbc3de664af9ac445c1 (diff)
downloadrust-4fcaa4a283faa1c5b6b18f7c1dad002dbc1f7bea.tar.gz
rust-4fcaa4a283faa1c5b6b18f7c1dad002dbc1f7bea.zip
review comments
-rw-r--r--src/librustc/hir/mod.rs7
-rw-r--r--src/librustc_typeck/check/method/mod.rs8
-rw-r--r--src/librustc_typeck/check/method/suggest.rs30
3 files changed, 27 insertions, 18 deletions
diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs
index 30b05036688..3d473ec0bc7 100644
--- a/src/librustc/hir/mod.rs
+++ b/src/librustc/hir/mod.rs
@@ -1053,6 +1053,13 @@ impl Mutability {
             MutImmutable => MutImmutable,
         }
     }
+
+    pub fn not(self) -> Self {
+        match self {
+            MutMutable => MutImmutable,
+            MutImmutable => MutMutable,
+        }
+    }
 }
 
 #[derive(Copy, Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Hash, HashStable)]
diff --git a/src/librustc_typeck/check/method/mod.rs b/src/librustc_typeck/check/method/mod.rs
index 4522be21cab..5851a074fa3 100644
--- a/src/librustc_typeck/check/method/mod.rs
+++ b/src/librustc_typeck/check/method/mod.rs
@@ -215,10 +215,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
 
         let mut needs_mut = false;
         if let ty::Ref(region, t_type, mutability) = self_ty.kind {
-            let trait_type = match mutability {
-                hir::Mutability::MutMutable => self.tcx.mk_imm_ref(region, t_type),
-                hir::Mutability::MutImmutable => self.tcx.mk_mut_ref(region, t_type),
-            };
+            let trait_type = self.tcx.mk_ref(region, ty::TypeAndMut {
+                ty: t_type,
+                mutbl: mutability.not(),
+            });
             match self.lookup_probe(
                 span,
                 segment.ident,
diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs
index 0ffccc03e04..c3ca58c834d 100644
--- a/src/librustc_typeck/check/method/suggest.rs
+++ b/src/librustc_typeck/check/method/suggest.rs
@@ -564,24 +564,26 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                 let msg = format!("the `{}` method cannot be invoked on a trait object", item_name);
                 let mut err = self.sess().struct_span_err(span, &msg);
                 if !candidates.is_empty() {
-                    let help = format!("{an}other candidate{s} {were} found in the following \
-                                        trait{s}, perhaps add a `use` for {one_of_them}:",
-                                    an = if candidates.len() == 1 {"an" } else { "" },
-                                    s = pluralise!(candidates.len()),
-                                    were = if candidates.len() == 1 { "was" } else { "were" },
-                                    one_of_them = if candidates.len() == 1 {
-                                        "it"
-                                    } else {
-                                        "one_of_them"
-                                    });
+                    let help = format!(
+                        "{an}other candidate{s} {were} found in the following trait{s}, perhaps \
+                         add a `use` for {one_of_them}:",
+                        an = if candidates.len() == 1 {"an" } else { "" },
+                        s = pluralise!(candidates.len()),
+                        were = if candidates.len() == 1 { "was" } else { "were" },
+                        one_of_them = if candidates.len() == 1 {
+                            "it"
+                        } else {
+                            "one_of_them"
+                        },
+                    );
                     self.suggest_use_candidates(&mut err, help, candidates);
                 }
                 if let ty::Ref(region, t_type, mutability) = rcvr_ty.kind {
-                    let trait_type = match mutability {
-                        hir::Mutability::MutMutable => self.tcx.mk_imm_ref(region, t_type),
-                        hir::Mutability::MutImmutable => self.tcx.mk_mut_ref(region, t_type),
-                    };
                     if needs_mut {
+                        let trait_type = self.tcx.mk_ref(region, ty::TypeAndMut {
+                            ty: t_type,
+                            mutbl: mutability.not(),
+                        });
                         err.note(&format!("you need `{}` instead of `{}`", trait_type, rcvr_ty));
                     }
                 }