Rollup merge of #92792 - mdibaiee:92662/fix-intra-doc-generics, r=camelid
rustdoc: fix intra-link for generic trait impls fixes #92662 r? `````@camelid`````
This commit is contained in:
commit
682ad02b49
3 changed files with 55 additions and 4 deletions
|
@ -939,7 +939,18 @@ fn traits_implemented_by<'a>(
|
|||
ty
|
||||
);
|
||||
// Fast path: if this is a primitive simple `==` will work
|
||||
let saw_impl = impl_type == ty;
|
||||
// NOTE: the `match` is necessary; see #92662.
|
||||
// this allows us to ignore generics because the user input
|
||||
// may not include the generic placeholders
|
||||
// e.g. this allows us to match Foo (user comment) with Foo<T> (actual type)
|
||||
let saw_impl = impl_type == ty
|
||||
|| match (impl_type.kind(), ty.kind()) {
|
||||
(ty::Adt(impl_def, _), ty::Adt(ty_def, _)) => {
|
||||
debug!("impl def_id: {:?}, ty def_id: {:?}", impl_def.did, ty_def.did);
|
||||
impl_def.did == ty_def.did
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
|
||||
if saw_impl { Some(trait_) } else { None }
|
||||
})
|
||||
|
|
|
@ -4,14 +4,34 @@ extern {
|
|||
pub type ExternType;
|
||||
}
|
||||
|
||||
impl ExternType {
|
||||
pub fn f(&self) {
|
||||
pub trait T {
|
||||
fn test(&self) {}
|
||||
}
|
||||
|
||||
}
|
||||
pub trait G<N> {
|
||||
fn g(&self, n: N) {}
|
||||
}
|
||||
|
||||
impl ExternType {
|
||||
pub fn f(&self) {}
|
||||
}
|
||||
|
||||
impl T for ExternType {
|
||||
fn test(&self) {}
|
||||
}
|
||||
|
||||
impl G<usize> for ExternType {
|
||||
fn g(&self, n: usize) {}
|
||||
}
|
||||
|
||||
// @has 'extern_type/foreigntype.ExternType.html'
|
||||
// @has 'extern_type/fn.links_to_extern_type.html' \
|
||||
// 'href="foreigntype.ExternType.html#method.f"'
|
||||
// @has 'extern_type/fn.links_to_extern_type.html' \
|
||||
// 'href="foreigntype.ExternType.html#method.test"'
|
||||
// @has 'extern_type/fn.links_to_extern_type.html' \
|
||||
// 'href="foreigntype.ExternType.html#method.g"'
|
||||
/// See also [ExternType::f]
|
||||
/// See also [ExternType::test]
|
||||
/// See also [ExternType::g]
|
||||
pub fn links_to_extern_type() {}
|
||||
|
|
20
src/test/rustdoc/intra-doc/generic-trait-impl.rs
Normal file
20
src/test/rustdoc/intra-doc/generic-trait-impl.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
|
||||
// Test intra-doc links on trait implementations with generics
|
||||
// regression test for issue #92662
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
pub trait Bar<T> {
|
||||
fn bar(&self);
|
||||
}
|
||||
|
||||
pub struct Foo<U>(PhantomData<U>);
|
||||
|
||||
impl<T, U> Bar<T> for Foo<U> {
|
||||
fn bar(&self) {}
|
||||
}
|
||||
|
||||
// @has generic_trait_impl/fn.main.html '//a[@href="struct.Foo.html#method.bar"]' 'Foo::bar'
|
||||
/// link to [`Foo::bar`]
|
||||
pub fn main() {}
|
Loading…
Add table
Reference in a new issue