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`.
This commit is contained in:
commit
17f493fffc
@ -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();
|
||||
|
@ -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)
|
||||
},
|
||||
_ => false,
|
||||
SelfTy::SelfExplicit(clean::ResolvedPath { did, .. }) => {
|
||||
(false, Some(did) == cache().owned_box_did)
|
||||
},
|
||||
_ => (false, false),
|
||||
};
|
||||
|
||||
deref_mut_ || !by_mut_ref
|
||||
(deref_mut_ || !by_mut_ref) && !by_box
|
||||
} else {
|
||||
false
|
||||
}
|
||||
|
@ -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()'
|
||||
|
@ -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()'
|
||||
|
Loading…
Reference in New Issue
Block a user