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.
|
||||
#[inline]
|
||||
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;
|
||||
} else {
|
||||
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());
|
||||
}
|
||||
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