Skip to content

Commit 838c2ef

Browse files
committed
fix source link when in a trait implementation
1 parent 4596436 commit 838c2ef

File tree

1 file changed

+30
-8
lines changed
  • src/librustdoc/html/render

1 file changed

+30
-8
lines changed

src/librustdoc/html/render/mod.rs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,9 +1459,20 @@ fn render_impl(
14591459
// Only render when the method is not static or we allow static methods
14601460
if render_method_item {
14611461
let id = cx.derive_id(format!("{}.{}", item_type, name));
1462+
let source_id = trait_
1463+
.and_then(|trait_| trait_
1464+
.items.iter()
1465+
.find(|item| item.name.map(|n| n.as_str().eq(&name.as_str())).unwrap_or(false))
1466+
).map(|item| format!("{}.{}", item.type_(), name));
14621467
write!(w, "<h4 id=\"{}\" class=\"{}{}{}\">", id, item_type, extra_class, in_trait_class);
14631468
w.write_str("<code>");
1464-
render_assoc_item(w, item, link.anchor(&id), ItemType::Impl, cx);
1469+
render_assoc_item(
1470+
w,
1471+
item,
1472+
link.anchor(source_id.as_ref().unwrap_or(&id)),
1473+
ItemType::Impl,
1474+
cx
1475+
);
14651476
w.write_str("</code>");
14661477
render_stability_since_raw(
14671478
w,
@@ -1476,14 +1487,15 @@ fn render_impl(
14761487
}
14771488
}
14781489
clean::TypedefItem(ref tydef, _) => {
1479-
let id = cx.derive_id(format!("{}.{}", ItemType::AssocType, name));
1490+
let source_id = format!("{}.{}", ItemType::AssocType, name);
1491+
let id = cx.derive_id(source_id.clone());
14801492
write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class);
14811493
assoc_type(
14821494
w,
14831495
item,
14841496
&Vec::new(),
14851497
Some(&tydef.type_),
1486-
link.anchor(&id),
1498+
link.anchor(if trait_.is_some() { &source_id } else { &id }),
14871499
"",
14881500
cx.cache(),
14891501
tcx,
@@ -1493,9 +1505,18 @@ fn render_impl(
14931505
w.write_str("</h4>");
14941506
}
14951507
clean::AssocConstItem(ref ty, ref default) => {
1496-
let id = cx.derive_id(format!("{}.{}", item_type, name));
1508+
let source_id = format!("{}.{}", item_type, name);
1509+
let id = cx.derive_id(source_id.clone());
14971510
write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class);
1498-
assoc_const(w, item, ty, default.as_ref(), link.anchor(&id), "", cx);
1511+
assoc_const(
1512+
w,
1513+
item,
1514+
ty,
1515+
default.as_ref(),
1516+
link.anchor(if trait_.is_some() { &source_id } else { &id }),
1517+
"",
1518+
cx
1519+
);
14991520
w.write_str("</code>");
15001521
render_stability_since_raw(
15011522
w,
@@ -1509,14 +1530,15 @@ fn render_impl(
15091530
w.write_str("</h4>");
15101531
}
15111532
clean::AssocTypeItem(ref bounds, ref default) => {
1512-
let id = cx.derive_id(format!("{}.{}", item_type, name));
1533+
let source_id = format!("{}.{}", item_type, name);
1534+
let id = cx.derive_id(source_id.clone());
15131535
write!(w, "<h4 id=\"{}\" class=\"{}{}{}\"><code>", id, item_type, extra_class, in_trait_class);
15141536
assoc_type(
15151537
w,
15161538
item,
15171539
bounds,
15181540
default.as_ref(),
1519-
link.anchor(&id),
1541+
link.anchor(if trait_.is_some() { &source_id } else { &id }),
15201542
"",
15211543
cx.cache(),
15221544
tcx,
@@ -1613,7 +1635,7 @@ fn render_impl(
16131635
true,
16141636
outer_version,
16151637
outer_const_version,
1616-
None,
1638+
Some(t),
16171639
show_def_docs,
16181640
);
16191641
}

0 commit comments

Comments
 (0)