diff options
| author | bors <bors@rust-lang.org> | 2017-06-06 06:18:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-06-06 06:18:17 +0000 |
| commit | 17f493fffc4e7b7a4110d2528e9f1272470dda10 (patch) | |
| tree | 3e1fbd022aa56f40edb4c9a76c2f858fb30152b0 | |
| parent | e8626951583e2cac46417ec433254a862735c0cc (diff) | |
| parent | 88c791bf692a9a1d8f48f70384ae42be044f03bf (diff) | |
| download | rust-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.rs | 1 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 19 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-35169-2.rs | 6 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-35169.rs | 6 |
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()' |
