diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index e62a8bcfba6670e0b2b4a7d837d4bac361630394..796bd7715180cf1675c5c6d7b0f320f052024fa6 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1412,7 +1412,10 @@ fn doc_impl_item( id, item_type, in_trait_class, ); render_rightside(w, cx, item, containing_item, render_mode); - write!(w, "", id); + if trait_.is_some() { + // Anchors are only used on trait impls. + write!(w, "", id); + } w.write_str("

"); render_assoc_item( w, @@ -1435,7 +1438,10 @@ fn doc_impl_item( id, item_type, in_trait_class ); render_rightside(w, cx, item, containing_item, render_mode); - write!(w, "", id); + if trait_.is_some() { + // Anchors are only used on trait impls. + write!(w, "", id); + } w.write_str("

"); assoc_const( w, @@ -1457,7 +1463,10 @@ fn doc_impl_item( let source_id = format!("{}.{}", item_type, name); let id = cx.derive_id(source_id.clone()); write!(w, "
", id, item_type, in_trait_class); - write!(w, "", id); + if trait_.is_some() { + // Anchors are only used on trait impls. + write!(w, "", id); + } w.write_str("

"); assoc_type( w, @@ -1480,7 +1489,10 @@ fn doc_impl_item( "
", id, item_type, in_trait_class ); - write!(w, "", id); + if trait_.is_some() { + // Anchors are only used on trait impls. + write!(w, "", id); + } w.write_str("

"); assoc_type( w, diff --git a/src/test/rustdoc/anchors.no_const_anchor.html b/src/test/rustdoc/anchors.no_const_anchor.html new file mode 100644 index 0000000000000000000000000000000000000000..98f47e53038a99a0918f1b3b6ee2199930ea0c52 --- /dev/null +++ b/src/test/rustdoc/anchors.no_const_anchor.html @@ -0,0 +1 @@ + diff --git a/src/test/rustdoc/anchors.no_const_anchor2.html b/src/test/rustdoc/anchors.no_const_anchor2.html new file mode 100644 index 0000000000000000000000000000000000000000..6d37e8e5eee5e1cd0b79a2f15728b3b3dce724d0 --- /dev/null +++ b/src/test/rustdoc/anchors.no_const_anchor2.html @@ -0,0 +1 @@ + diff --git a/src/test/rustdoc/anchors.no_method_anchor.html b/src/test/rustdoc/anchors.no_method_anchor.html new file mode 100644 index 0000000000000000000000000000000000000000..f46d3090ed37054ec5bbd86c69d510747f28f22d --- /dev/null +++ b/src/test/rustdoc/anchors.no_method_anchor.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/rustdoc/anchors.no_trait_method_anchor.html b/src/test/rustdoc/anchors.no_trait_method_anchor.html new file mode 100644 index 0000000000000000000000000000000000000000..445a7bb560acaf4baeb3a66a59603dc9bb1973d8 --- /dev/null +++ b/src/test/rustdoc/anchors.no_trait_method_anchor.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/rustdoc/anchors.no_tymethod_anchor.html b/src/test/rustdoc/anchors.no_tymethod_anchor.html new file mode 100644 index 0000000000000000000000000000000000000000..bb0771b10035dfe3867003cf49b5223f179ce690 --- /dev/null +++ b/src/test/rustdoc/anchors.no_tymethod_anchor.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/rustdoc/anchors.no_type_anchor.html b/src/test/rustdoc/anchors.no_type_anchor.html new file mode 100644 index 0000000000000000000000000000000000000000..d317eb5005017cb26f81b556d01236a02c83e8d4 --- /dev/null +++ b/src/test/rustdoc/anchors.no_type_anchor.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/rustdoc/anchors.no_type_anchor2.html b/src/test/rustdoc/anchors.no_type_anchor2.html new file mode 100644 index 0000000000000000000000000000000000000000..72a1186bf7e301853072bcc0ec84267971911fba --- /dev/null +++ b/src/test/rustdoc/anchors.no_type_anchor2.html @@ -0,0 +1 @@ + diff --git a/src/test/rustdoc/anchors.rs b/src/test/rustdoc/anchors.rs new file mode 100644 index 0000000000000000000000000000000000000000..034cf8eaf4ff7a5e34948cb552b2f5531587d531 --- /dev/null +++ b/src/test/rustdoc/anchors.rs @@ -0,0 +1,49 @@ +// This test ensures that anchors are generated in the right places. + +#![feature(inherent_associated_types)] +#![allow(incomplete_features)] +#![crate_name = "foo"] + +pub struct Foo; + +// @has 'foo/trait.Bar.html' +pub trait Bar { + // There should be no anchors here. + // @snapshot no_type_anchor - '//*[@id="associatedtype.T"]' + type T; + // There should be no anchors here. + // @snapshot no_const_anchor - '//*[@id="associatedconstant.YOLO"]' + const YOLO: u32; + + // There should be no anchors here. + // @snapshot no_tymethod_anchor - '//*[@id="tymethod.foo"]' + fn foo(); + // There should be no anchors here. + // @snapshot no_trait_method_anchor - '//*[@id="method.bar"]' + fn bar() {} +} + +// @has 'foo/struct.Foo.html' +impl Bar for Foo { + // @has - '//*[@id="associatedtype.T"]/a[@class="anchor"]' '' + type T = u32; + // @has - '//*[@id="associatedconstant.YOLO"]/a[@class="anchor"]' '' + const YOLO: u32 = 0; + + // @has - '//*[@id="method.foo"]/a[@class="anchor"]' '' + fn foo() {} + // Same check for provided "bar" method. + // @has - '//*[@id="method.bar"]/a[@class="anchor"]' '' +} + +impl Foo { + // @snapshot no_const_anchor2 - '//*[@id="associatedconstant.X"]' + // There should be no anchors here. + pub const X: i32 = 0; + // @snapshot no_type_anchor2 - '//*[@id="associatedtype.Y"]' + // There should be no anchors here. + pub type Y = u32; + // @snapshot no_method_anchor - '//*[@id="method.new"]' + // There should be no anchors here. + pub fn new() -> Self { Self } +}