rustdoc: Improve handling inlined associated types
* All bounds are now discovered through the trait to be inlined. * The `?Sized` bound now renders correctly for inlined associated types. * All `QPath`s (`<A as B>::C`) instances are rendered as `A::C` where `C` is a hyperlink to the trait `B`. This should improve at least how the docs look at least. * Supertrait bounds are now separated and display as the source lists them. Closes #20727 Closes #21145
This commit is contained in:
parent
11f26f9995
commit
75ef0832ae
9 changed files with 382 additions and 69 deletions
38
src/test/auxiliary/issue-20727.rs
Normal file
38
src/test/auxiliary/issue-20727.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright 2015 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 Deref {
|
||||
type Target: ?Sized;
|
||||
|
||||
fn deref<'a>(&'a self) -> &'a Self::Target;
|
||||
}
|
||||
|
||||
pub trait Add<RHS = Self> {
|
||||
type Output;
|
||||
|
||||
fn add(self, rhs: RHS) -> Self::Output;
|
||||
}
|
||||
|
||||
|
||||
pub trait Bar {}
|
||||
pub trait Deref2 {
|
||||
type Target: Bar;
|
||||
|
||||
fn deref(&self) -> Self::Target;
|
||||
}
|
||||
|
||||
pub trait Index<Idx: ?Sized> {
|
||||
type Output: ?Sized;
|
||||
fn index(&self, index: Idx) -> &Self::Output;
|
||||
}
|
||||
|
||||
pub trait IndexMut<Idx: ?Sized>: Index<Idx> {
|
||||
fn index_mut(&mut self, index: Idx) -> &mut Self::Output;
|
||||
}
|
||||
32
src/test/rustdoc/issue-20727-2.rs
Normal file
32
src/test/rustdoc/issue-20727-2.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright 2015 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:issue-20727.rs
|
||||
|
||||
extern crate issue_20727;
|
||||
|
||||
// @has issue_20727_2/trait.Add.html
|
||||
pub trait Add<RHS = Self> {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Add<RHS = Self> {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Output;'
|
||||
type Output;
|
||||
|
||||
// @has - '//*[@class="rust trait"]' 'fn add(self, rhs: RHS) -> Self::Output;'
|
||||
fn add(self, rhs: RHS) -> Self::Output;
|
||||
}
|
||||
|
||||
// @has issue_20727_2/reexport/trait.Add.html
|
||||
pub mod reexport {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Add<RHS = Self> {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Output;'
|
||||
// @has - '//*[@class="rust trait"]' 'fn add(self, rhs: RHS) -> Self::Output;'
|
||||
pub use issue_20727::Add;
|
||||
}
|
||||
|
||||
33
src/test/rustdoc/issue-20727-3.rs
Normal file
33
src/test/rustdoc/issue-20727-3.rs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright 2015 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:issue-20727.rs
|
||||
|
||||
extern crate issue_20727;
|
||||
|
||||
pub trait Bar {}
|
||||
|
||||
// @has issue_20727_3/trait.Deref2.html
|
||||
pub trait Deref2 {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Deref2 {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Target: Bar;'
|
||||
type Target: Bar;
|
||||
|
||||
// @has - '//*[@class="rust trait"]' 'fn deref(&self) -> Self::Target;'
|
||||
fn deref(&self) -> Self::Target;
|
||||
}
|
||||
|
||||
// @has issue_20727_3/reexport/trait.Deref2.html
|
||||
pub mod reexport {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Deref2 {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Target: Bar;'
|
||||
// @has - '//*[@class="rust trait"]' 'fn deref(&self) -> Self::Target;'
|
||||
pub use issue_20727::Deref2;
|
||||
}
|
||||
49
src/test/rustdoc/issue-20727-4.rs
Normal file
49
src/test/rustdoc/issue-20727-4.rs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright 2015 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:issue-20727.rs
|
||||
|
||||
extern crate issue_20727;
|
||||
|
||||
// @has issue_20727_4/trait.Index.html
|
||||
pub trait Index<Idx: ?Sized> {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Index<Idx: ?Sized> {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Output: ?Sized'
|
||||
type Output: ?Sized;
|
||||
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'fn index(&self, index: Idx) -> &Self::Output'
|
||||
fn index(&self, index: Idx) -> &Self::Output;
|
||||
}
|
||||
|
||||
// @has issue_20727_4/trait.IndexMut.html
|
||||
pub trait IndexMut<Idx: ?Sized>: Index<Idx> {
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'trait IndexMut<Idx: ?Sized>: Index<Idx> {'
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'fn index_mut(&mut self, index: Idx) -> &mut Self::Output;'
|
||||
fn index_mut(&mut self, index: Idx) -> &mut Self::Output;
|
||||
}
|
||||
|
||||
pub mod reexport {
|
||||
// @has issue_20727_4/reexport/trait.Index.html
|
||||
// @has - '//*[@class="rust trait"]' 'trait Index<Idx> where Idx: ?Sized {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Output: ?Sized'
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'fn index(&self, index: Idx) -> &Self::Output'
|
||||
pub use issue_20727::Index;
|
||||
|
||||
// @has issue_20727_4/reexport/trait.IndexMut.html
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'trait IndexMut<Idx>: Index<Idx> where Idx: ?Sized {'
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// 'fn index_mut(&mut self, index: Idx) -> &mut Self::Output;'
|
||||
pub use issue_20727::IndexMut;
|
||||
}
|
||||
33
src/test/rustdoc/issue-20727.rs
Normal file
33
src/test/rustdoc/issue-20727.rs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright 2015 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:issue-20727.rs
|
||||
|
||||
extern crate issue_20727;
|
||||
|
||||
// @has issue_20727/trait.Deref.html
|
||||
pub trait Deref {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Deref {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Target: ?Sized;'
|
||||
type Target: ?Sized;
|
||||
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// "fn deref<'a>(&'a self) -> &'a Self::Target;"
|
||||
fn deref<'a>(&'a self) -> &'a Self::Target;
|
||||
}
|
||||
|
||||
// @has issue_20727/reexport/trait.Deref.html
|
||||
pub mod reexport {
|
||||
// @has - '//*[@class="rust trait"]' 'trait Deref {'
|
||||
// @has - '//*[@class="rust trait"]' 'type Target: ?Sized;'
|
||||
// @has - '//*[@class="rust trait"]' \
|
||||
// "fn deref(&'a self) -> &'a Self::Target;"
|
||||
pub use issue_20727::Deref;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue