rustdoc: Populate external_traits with traits only seen in impls
This means default methods can always be found and "Important traits" will include all spotlight traits.
This commit is contained in:
parent
ee220daca3
commit
45cad0456f
5 changed files with 52 additions and 5 deletions
|
@ -349,6 +349,9 @@ pub fn build_impl(cx: &DocContext, did: DefId, ret: &mut Vec<clean::Item>) {
|
|||
if trait_.def_id() == tcx.lang_items().deref_trait() {
|
||||
super::build_deref_target_impls(cx, &trait_items, ret);
|
||||
}
|
||||
if let Some(trait_did) = trait_.def_id() {
|
||||
record_extern_trait(cx, trait_did);
|
||||
}
|
||||
|
||||
let provided = trait_.def_id().map(|did| {
|
||||
tcx.provided_trait_methods(did)
|
||||
|
@ -504,3 +507,9 @@ fn separate_supertrait_bounds(mut g: clean::Generics)
|
|||
});
|
||||
(g, ty_bounds)
|
||||
}
|
||||
|
||||
pub fn record_extern_trait(cx: &DocContext, did: DefId) {
|
||||
cx.external_traits.borrow_mut().entry(did).or_insert_with(|| {
|
||||
build_external_trait(cx, did)
|
||||
});
|
||||
}
|
||||
|
|
|
@ -3189,8 +3189,7 @@ fn register_def(cx: &DocContext, def: Def) -> DefId {
|
|||
if did.is_local() { return did }
|
||||
inline::record_extern_fqn(cx, did, kind);
|
||||
if let TypeKind::Trait = kind {
|
||||
let t = inline::build_external_trait(cx, did);
|
||||
cx.external_traits.borrow_mut().insert(did, t);
|
||||
inline::record_extern_trait(cx, did);
|
||||
}
|
||||
did
|
||||
}
|
||||
|
|
|
@ -3291,8 +3291,7 @@ fn spotlight_decl(decl: &clean::FnDecl) -> Result<String, fmt::Error> {
|
|||
if let Some(impls) = c.impls.get(&did) {
|
||||
for i in impls {
|
||||
let impl_ = i.inner_impl();
|
||||
if impl_.trait_.def_id().and_then(|d| c.traits.get(&d))
|
||||
.map_or(false, |t| t.is_spotlight) {
|
||||
if impl_.trait_.def_id().map_or(false, |d| c.traits[&d].is_spotlight) {
|
||||
if out.is_empty() {
|
||||
out.push_str(
|
||||
&format!("<h3 class=\"important\">Important traits for {}</h3>\
|
||||
|
@ -3458,7 +3457,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
|
|||
}
|
||||
|
||||
let traits = &cache().traits;
|
||||
let trait_ = i.trait_did().and_then(|did| traits.get(&did));
|
||||
let trait_ = i.trait_did().map(|did| &traits[&did]);
|
||||
|
||||
if !show_def_docs {
|
||||
write!(w, "<span class='docblock autohide'>")?;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
pub trait MyTrait {
|
||||
/// docs for my_trait_method
|
||||
fn my_trait_method() {}
|
||||
}
|
||||
|
||||
pub struct MyStruct;
|
||||
|
||||
impl MyTrait for MyStruct {}
|
22
src/test/rustdoc/inline_cross/impl-inline-without-trait.rs
Normal file
22
src/test/rustdoc/inline_cross/impl-inline-without-trait.rs
Normal file
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// aux-build:impl-inline-without-trait.rs
|
||||
// build-aux-docs
|
||||
// ignore-cross-compile
|
||||
|
||||
#![crate_name = "foo"]
|
||||
|
||||
extern crate impl_inline_without_trait;
|
||||
|
||||
// @has 'foo/struct.MyStruct.html'
|
||||
// @has - '//*[@id="method.my_trait_method"]' 'fn my_trait_method()'
|
||||
// @has - '//*[@class="docblock"]' 'docs for my_trait_method'
|
||||
pub use impl_inline_without_trait::MyStruct;
|
Loading…
Add table
Reference in a new issue