about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-06-06 06:18:17 +0000
committerbors <bors@rust-lang.org>2017-06-06 06:18:17 +0000
commit17f493fffc4e7b7a4110d2528e9f1272470dda10 (patch)
tree3e1fbd022aa56f40edb4c9a76c2f858fb30152b0
parente8626951583e2cac46417ec433254a862735c0cc (diff)
parent88c791bf692a9a1d8f48f70384ae42be044f03bf (diff)
downloadrust-17f493fffc4e7b7a4110d2528e9f1272470dda10.tar.gz
rust-17f493fffc4e7b7a4110d2528e9f1272470dda10.zip
Auto merge of #42394 - ollie27:rustdoc_deref_box, r=QuietMisdreavus
rustdoc: Hide `self: Box<Self>` in list of deref methods

These methods can never be called through deref so there is no point including them. For example you can't call [`into_boxed_bytes`](https://doc.rust-lang.org/nightly/std/string/struct.String.html#method.into_boxed_bytes) or [`into_string`](https://doc.rust-lang.org/nightly/std/string/struct.String.html#method.into_string) on `String`.
-rw-r--r--src/librustdoc/clean/mod.rs1
-rw-r--r--src/librustdoc/html/render.rs19
-rw-r--r--src/test/rustdoc/issue-35169-2.rs6
-rw-r--r--src/test/rustdoc/issue-35169.rs6
4 files changed, 25 insertions, 7 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 25e55ff36e7..20ce2c02496 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -124,6 +124,7 @@ impl<'a, 'tcx> Clean<Crate> for visit_ast::RustdocVisitor<'a, 'tcx> {
             let mut r = cx.renderinfo.borrow_mut();
             r.deref_trait_did = cx.tcx.lang_items.deref_trait();
             r.deref_mut_trait_did = cx.tcx.lang_items.deref_mut_trait();
+            r.owned_box_did = cx.tcx.lang_items.owned_box();
         }
 
         let mut externs = Vec::new();
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index a588460d467..0d9f98e05d2 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -262,6 +262,7 @@ pub struct Cache {
     stripped_mod: bool,
     deref_trait_did: Option<DefId>,
     deref_mut_trait_did: Option<DefId>,
+    owned_box_did: Option<DefId>,
 
     // In rare case where a structure is defined in one module but implemented
     // in another, if the implementing module is parsed before defining module,
@@ -280,6 +281,7 @@ pub struct RenderInfo {
     pub external_typarams: FxHashMap<DefId, String>,
     pub deref_trait_did: Option<DefId>,
     pub deref_mut_trait_did: Option<DefId>,
+    pub owned_box_did: Option<DefId>,
 }
 
 /// Helper struct to render all source code to HTML pages
@@ -507,6 +509,7 @@ pub fn run(mut krate: clean::Crate,
         external_typarams,
         deref_trait_did,
         deref_mut_trait_did,
+        owned_box_did,
     } = renderinfo;
 
     let external_paths = external_paths.into_iter()
@@ -530,6 +533,7 @@ pub fn run(mut krate: clean::Crate,
         traits: mem::replace(&mut krate.external_traits, FxHashMap()),
         deref_trait_did: deref_trait_did,
         deref_mut_trait_did: deref_mut_trait_did,
+        owned_box_did: owned_box_did,
         typarams: external_typarams,
     };
 
@@ -2933,17 +2937,18 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
                 };
 
                 if let Some(self_ty) = self_type_opt {
-                    let by_mut_ref = match self_ty {
-                        SelfTy::SelfBorrowed(_lifetime, mutability) => {
-                            mutability == Mutability::Mutable
-                        },
+                    let (by_mut_ref, by_box) = match self_ty {
+                        SelfTy::SelfBorrowed(_, mutability) |
                         SelfTy::SelfExplicit(clean::BorrowedRef { mutability, .. }) => {
-                            mutability == Mutability::Mutable
+                            (mutability == Mutability::Mutable, false)
+                        },
+                        SelfTy::SelfExplicit(clean::ResolvedPath { did, .. }) => {
+                            (false, Some(did) == cache().owned_box_did)
                         },
-                        _ => false,
+                        _ => (false, false),
                     };
 
-                    deref_mut_ || !by_mut_ref
+                    (deref_mut_ || !by_mut_ref) && !by_box
                 } else {
                     false
                 }
diff --git a/src/test/rustdoc/issue-35169-2.rs b/src/test/rustdoc/issue-35169-2.rs
index d738fb29259..b19fbaa5b95 100644
--- a/src/test/rustdoc/issue-35169-2.rs
+++ b/src/test/rustdoc/issue-35169-2.rs
@@ -19,6 +19,8 @@ impl Foo {
     pub fn by_explicit_ref(self: &Foo) {}
     pub fn by_mut_ref(&mut self) {}
     pub fn by_explicit_mut_ref(self: &mut Foo) {}
+    pub fn by_explicit_box(self: Box<Foo>) {}
+    pub fn by_explicit_self_box(self: Box<Self>) {}
     pub fn static_foo() {}
 }
 
@@ -41,5 +43,9 @@ impl DerefMut for Bar {
 // @has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
 // @has - '//*[@id="by_explicit_mut_ref.v"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
 // @has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+// @!has - '//*[@id="by_explicit_box.v"]' 'fn by_explicit_box(self: Box<Foo>)'
+// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
+// @!has - '//*[@id="by_explicit_self_box.v"]' 'fn by_explicit_self_box(self: Box<Self>)'
+// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
 // @!has - '//*[@id="static_foo.v"]' 'fn static_foo()'
 // @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'
diff --git a/src/test/rustdoc/issue-35169.rs b/src/test/rustdoc/issue-35169.rs
index 8764e4a390f..95231f282e3 100644
--- a/src/test/rustdoc/issue-35169.rs
+++ b/src/test/rustdoc/issue-35169.rs
@@ -18,6 +18,8 @@ impl Foo {
     pub fn by_explicit_ref(self: &Foo) {}
     pub fn by_mut_ref(&mut self) {}
     pub fn by_explicit_mut_ref(self: &mut Foo) {}
+    pub fn by_explicit_box(self: Box<Foo>) {}
+    pub fn by_explicit_self_box(self: Box<Self>) {}
     pub fn static_foo() {}
 }
 
@@ -36,5 +38,9 @@ impl Deref for Bar {
 // @!has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)'
 // @!has - '//*[@id="by_explicit_mut_ref.v"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
 // @!has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)'
+// @!has - '//*[@id="by_explicit_box.v"]' 'fn by_explicit_box(self: Box<Foo>)'
+// @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box<Foo>)'
+// @!has - '//*[@id="by_explicit_self_box.v"]' 'fn by_explicit_self_box(self: Box<Self>)'
+// @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box<Self>)'
 // @!has - '//*[@id="static_foo.v"]' 'fn static_foo()'
 // @!has - '//*[@id="method.static_foo"]' 'fn static_foo()'