rustdoc: Resolve doc links in external traits having local impls
This commit is contained in:
parent
928d14bcd1
commit
8e81cc262e
@ -1932,6 +1932,11 @@ pub fn macro_rules_scope(&self, def_id: LocalDefId) -> (MacroRulesScopeRef<'a>,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// For rustdoc.
|
||||||
|
pub fn get_partial_res(&self, node_id: NodeId) -> Option<PartialRes> {
|
||||||
|
self.partial_res_map.get(&node_id).copied()
|
||||||
|
}
|
||||||
|
|
||||||
/// Retrieves the span of the given `DefId` if `DefId` is in the local crate.
|
/// Retrieves the span of the given `DefId` if `DefId` is in the local crate.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn opt_span(&self, def_id: DefId) -> Option<Span> {
|
pub fn opt_span(&self, def_id: DefId) -> Option<Span> {
|
||||||
|
@ -354,7 +354,14 @@ fn visit_item(&mut self, item: &ast::Item) {
|
|||||||
self.parent_scope.module = old_module;
|
self.parent_scope.module = old_module;
|
||||||
} else {
|
} else {
|
||||||
match &item.kind {
|
match &item.kind {
|
||||||
ItemKind::Impl(box ast::Impl { of_trait: Some(..), .. }) => {
|
ItemKind::Impl(box ast::Impl { of_trait: Some(trait_ref), .. }) => {
|
||||||
|
if let Some(partial_res) = self.resolver.get_partial_res(trait_ref.ref_id)
|
||||||
|
&& let Some(res) = partial_res.full_res()
|
||||||
|
&& let Some(trait_def_id) = res.opt_def_id()
|
||||||
|
&& !trait_def_id.is_local()
|
||||||
|
&& self.visited_mods.insert(trait_def_id) {
|
||||||
|
self.resolve_doc_links_extern_impl(trait_def_id, false);
|
||||||
|
}
|
||||||
self.all_trait_impls.push(self.resolver.local_def_id(item.id).to_def_id());
|
self.all_trait_impls.push(self.resolver.local_def_id(item.id).to_def_id());
|
||||||
}
|
}
|
||||||
ItemKind::MacroDef(macro_def) if macro_def.macro_rules => {
|
ItemKind::MacroDef(macro_def) if macro_def.macro_rules => {
|
||||||
|
14
src/test/rustdoc/intra-doc/issue-104145.rs
Normal file
14
src/test/rustdoc/intra-doc/issue-104145.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Doc links in `Trait`'s methods are resolved because it has a local impl.
|
||||||
|
|
||||||
|
// aux-build:issue-103463-aux.rs
|
||||||
|
|
||||||
|
extern crate issue_103463_aux;
|
||||||
|
use issue_103463_aux::Trait;
|
||||||
|
|
||||||
|
pub struct LocalType;
|
||||||
|
|
||||||
|
impl Trait for LocalType {
|
||||||
|
fn method() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Reference in New Issue
Block a user