1
Fork 0

rustdoc: handle generics better when matching notable traits

This commit makes the `clean::Type::is_same` non-commutative, so
that a generic `impl` matches a concrete return, but a generic return
does not match a concrete `impl`. It makes slice and vector Write
for `u8` not match on every generic return value.
This commit is contained in:
Michael Howell 2023-03-09 13:41:13 -07:00
parent c6015851f7
commit ee6b228b6a
5 changed files with 96 additions and 6 deletions

View file

@ -0,0 +1,35 @@
#![feature(doc_notable_trait)]
// Notable traits SHOULD be shown when the `impl` has a generic type and the
// return type has a concrete type.
pub mod generic_return {
pub struct Wrapper<T>(T);
#[doc(notable_trait)]
pub trait NotableTrait {}
impl NotableTrait for Wrapper<u8> {}
// @has notable_trait_generics/generic_return/fn.returning.html
// @!has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<T>'
pub fn returning<T>() -> Wrapper<T> {
loop {}
}
}
// Notable traits SHOULD NOT be shown when the `impl` has a concrete type and
// the return type has a generic type.
pub mod generic_impl {
pub struct Wrapper<T>(T);
#[doc(notable_trait)]
pub trait NotableTrait {}
impl<T> NotableTrait for Wrapper<T> {}
// @has notable_trait_generics/generic_impl/fn.returning.html
// @has - '//a[@class="tooltip"]/@data-notable-ty' 'Wrapper<u8>'
pub fn returning() -> Wrapper<u8> {
loop {}
}
}