diff options
| author | François Mockers <mockersf@gmail.com> | 2021-03-13 01:40:13 +0100 |
|---|---|---|
| committer | François Mockers <mockersf@gmail.com> | 2021-04-13 22:13:41 +0200 |
| commit | 838c2ef1112b0aeff1152f71caec12b2606df3f3 (patch) | |
| tree | 839f0dbee44a2574eb65ad49ec1aaa93b19e2a91 | |
| parent | 45964368f4a2e31c94e9bcf1cef933c087d21544 (diff) | |
| download | rust-838c2ef1112b0aeff1152f71caec12b2606df3f3.tar.gz rust-838c2ef1112b0aeff1152f71caec12b2606df3f3.zip | |
fix source link when in a trait implementation
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 9f9a3acd852..1eb70eb6364 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1459,9 +1459,20 @@ fn render_impl( // Only render when the method is not static or we allow static methods if render_method_item { let id = cx.derive_id(format!("{}.{}", item_type, name)); + let source_id = trait_ + .and_then(|trait_| trait_ + .items.iter() + .find(|item| item.name.map(|n| n.as_str().eq(&name.as_str())).unwrap_or(false)) + ).map(|item| format!("{}.{}", item.type_(), name)); write!(w, "<h4 id=\"{}\" class=\"{}{}{}\">", id, item_type, extra_class, in_trait_class); w.write_str("<code>"); - render_assoc_item(w, item, link.anchor(&id), ItemType::Impl, cx); + render_assoc_item( + w, + item, + link.anchor(source_id.as_ref().unwrap_or(&id)), + ItemType::Impl, + cx + ); w.write_str("</code>"); render_stability_since_raw( w, @@ -1476,14 +1487,15 @@ fn render_impl( } } clean::TypedefItem(ref tydef, _) => { - let id = cx.derive_id(format!("{}.{}", ItemType::AssocType, name)); + let source_id = format!("{}.{}", ItemType::AssocType, name); + let id = cx.derive_id(source_id.clone()); write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class); assoc_type( w, item, &Vec::new(), Some(&tydef.type_), - link.anchor(&id), + link.anchor(if trait_.is_some() { &source_id } else { &id }), "", cx.cache(), tcx, @@ -1493,9 +1505,18 @@ fn render_impl( w.write_str("</h4>"); } clean::AssocConstItem(ref ty, ref default) => { - let id = cx.derive_id(format!("{}.{}", item_type, name)); + let source_id = format!("{}.{}", item_type, name); + let id = cx.derive_id(source_id.clone()); write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class); - assoc_const(w, item, ty, default.as_ref(), link.anchor(&id), "", cx); + assoc_const( + w, + item, + ty, + default.as_ref(), + link.anchor(if trait_.is_some() { &source_id } else { &id }), + "", + cx + ); w.write_str("</code>"); render_stability_since_raw( w, @@ -1509,14 +1530,15 @@ fn render_impl( w.write_str("</h4>"); } clean::AssocTypeItem(ref bounds, ref default) => { - let id = cx.derive_id(format!("{}.{}", item_type, name)); + let source_id = format!("{}.{}", item_type, name); + let id = cx.derive_id(source_id.clone()); write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class); assoc_type( w, item, bounds, default.as_ref(), - link.anchor(&id), + link.anchor(if trait_.is_some() { &source_id } else { &id }), "", cx.cache(), tcx, @@ -1613,7 +1635,7 @@ fn render_impl( true, outer_version, outer_const_version, - None, + Some(t), show_def_docs, ); } |
