rustdoc: Add more semantic information to impl ids
Instead of generating `#impl`, `#impl-1`, etc., generate IDs like `#impl-Foo<M>`. Co-authored-by: Noah Lev <camelidcamel@gmail.com>
This commit is contained in:
parent
54f79babae
commit
499e024ac9
@ -634,7 +634,6 @@ fn render_impls(
|
||||
&[],
|
||||
ImplRenderingParameters {
|
||||
show_def_docs: true,
|
||||
is_on_foreign_type: false,
|
||||
show_default_items: true,
|
||||
show_non_assoc_items: true,
|
||||
toggle_open_by_default,
|
||||
@ -1071,7 +1070,6 @@ fn render_assoc_items_inner(
|
||||
&[],
|
||||
ImplRenderingParameters {
|
||||
show_def_docs: true,
|
||||
is_on_foreign_type: false,
|
||||
show_default_items: true,
|
||||
show_non_assoc_items: true,
|
||||
toggle_open_by_default: true,
|
||||
@ -1287,7 +1285,6 @@ fn notable_traits_decl(decl: &clean::FnDecl, cx: &Context<'_>) -> String {
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
struct ImplRenderingParameters {
|
||||
show_def_docs: bool,
|
||||
is_on_foreign_type: bool,
|
||||
show_default_items: bool,
|
||||
/// Whether or not to show methods.
|
||||
show_non_assoc_items: bool,
|
||||
@ -1603,7 +1600,6 @@ fn render_default_items(
|
||||
parent,
|
||||
rendering_params.show_def_docs,
|
||||
use_absolute,
|
||||
rendering_params.is_on_foreign_type,
|
||||
aliases,
|
||||
);
|
||||
if toggled {
|
||||
@ -1688,21 +1684,12 @@ pub(crate) fn render_impl_summary(
|
||||
containing_item: &clean::Item,
|
||||
show_def_docs: bool,
|
||||
use_absolute: Option<bool>,
|
||||
is_on_foreign_type: bool,
|
||||
// This argument is used to reference same type with different paths to avoid duplication
|
||||
// in documentation pages for trait with automatic implementations like "Send" and "Sync".
|
||||
aliases: &[String],
|
||||
) {
|
||||
let id = cx.derive_id(match i.inner_impl().trait_ {
|
||||
Some(ref t) => {
|
||||
if is_on_foreign_type {
|
||||
get_id_for_impl_on_foreign_type(&i.inner_impl().for_, t, cx)
|
||||
} else {
|
||||
format!("impl-{}", small_url_encode(format!("{:#}", t.print(cx))))
|
||||
}
|
||||
}
|
||||
None => "impl".to_string(),
|
||||
});
|
||||
let id =
|
||||
cx.derive_id(get_id_for_impl(&i.inner_impl().for_, i.inner_impl().trait_.as_ref(), cx));
|
||||
let aliases = if aliases.is_empty() {
|
||||
String::new()
|
||||
} else {
|
||||
@ -2147,12 +2134,11 @@ fn sidebar_struct(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, s: &clea
|
||||
}
|
||||
}
|
||||
|
||||
fn get_id_for_impl_on_foreign_type(
|
||||
for_: &clean::Type,
|
||||
trait_: &clean::Path,
|
||||
cx: &Context<'_>,
|
||||
) -> String {
|
||||
small_url_encode(format!("impl-{:#}-for-{:#}", trait_.print(cx), for_.print(cx)))
|
||||
fn get_id_for_impl(for_: &clean::Type, trait_: Option<&clean::Path>, cx: &Context<'_>) -> String {
|
||||
match trait_ {
|
||||
Some(t) => small_url_encode(format!("impl-{:#}-for-{:#}", t.print(cx), for_.print(cx))),
|
||||
None => small_url_encode(format!("impl-{:#}", for_.print(cx))),
|
||||
}
|
||||
}
|
||||
|
||||
fn extract_for_impl_name(item: &clean::Item, cx: &Context<'_>) -> Option<(String, String)> {
|
||||
@ -2161,10 +2147,7 @@ fn extract_for_impl_name(item: &clean::Item, cx: &Context<'_>) -> Option<(String
|
||||
i.trait_.as_ref().map(|trait_| {
|
||||
// Alternative format produces no URLs,
|
||||
// so this parameter does nothing.
|
||||
(
|
||||
format!("{:#}", i.for_.print(cx)),
|
||||
get_id_for_impl_on_foreign_type(&i.for_, trait_, cx),
|
||||
)
|
||||
(format!("{:#}", i.for_.print(cx)), get_id_for_impl(&i.for_, Some(trait_), cx))
|
||||
})
|
||||
}
|
||||
_ => None,
|
||||
|
@ -853,7 +853,6 @@ fn trait_item(w: &mut Buffer, cx: &mut Context<'_>, m: &clean::Item, t: &clean::
|
||||
&[],
|
||||
ImplRenderingParameters {
|
||||
show_def_docs: false,
|
||||
is_on_foreign_type: true,
|
||||
show_default_items: false,
|
||||
show_non_assoc_items: true,
|
||||
toggle_open_by_default: false,
|
||||
@ -1627,7 +1626,6 @@ fn render_implementor(
|
||||
aliases,
|
||||
ImplRenderingParameters {
|
||||
show_def_docs: false,
|
||||
is_on_foreign_type: false,
|
||||
show_default_items: false,
|
||||
show_non_assoc_items: false,
|
||||
toggle_open_by_default: false,
|
||||
|
@ -28,7 +28,7 @@ move-cursor-to: "h2#implementations"
|
||||
assert-css: ("h2#implementations a.anchor", {"color": "rgb(0, 0, 0)"})
|
||||
|
||||
// Same thing with the impl block title.
|
||||
move-cursor-to: "#impl"
|
||||
assert-css: ("#impl a.anchor", {"color": "rgb(0, 0, 0)"})
|
||||
move-cursor-to: "#impl-HeavilyDocumentedStruct"
|
||||
assert-css: ("#impl-HeavilyDocumentedStruct a.anchor", {"color": "rgb(0, 0, 0)"})
|
||||
|
||||
assert-css: ("#title-for-struct-impl-item-doc", {"margin-left": "0px"})
|
||||
|
@ -23,9 +23,9 @@ assert-css: (
|
||||
ALL,
|
||||
)
|
||||
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl-Foo
|
||||
assert-css: (
|
||||
"#impl",
|
||||
"#impl-Foo",
|
||||
{"color": "rgb(197, 197, 197)", "background-color": "rgba(255, 236, 164, 0.06)"},
|
||||
)
|
||||
|
||||
@ -62,9 +62,9 @@ assert-css: (
|
||||
ALL,
|
||||
)
|
||||
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl-Foo
|
||||
assert-css: (
|
||||
"#impl",
|
||||
"#impl-Foo",
|
||||
{"color": "rgb(221, 221, 221)", "background-color": "rgb(73, 74, 61)"},
|
||||
)
|
||||
|
||||
@ -99,8 +99,8 @@ assert-css: (
|
||||
ALL,
|
||||
)
|
||||
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl
|
||||
assert-css: ("#impl", {"color": "rgb(0, 0, 0)", "background-color": "rgb(253, 255, 211)"})
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#impl-Foo
|
||||
assert-css: ("#impl-Foo", {"color": "rgb(0, 0, 0)", "background-color": "rgb(253, 255, 211)"})
|
||||
|
||||
goto: file://|DOC_PATH|/test_docs/struct.Foo.html#method.must_use
|
||||
assert-css: (
|
||||
|
@ -32,8 +32,8 @@ assert-css: ("h4#sub-heading-for-field", {"border-bottom-width": "0px"})
|
||||
assert-css: ("h2#implementations", {"font-size": "22px"})
|
||||
assert-css: ("h2#implementations", {"border-bottom-width": "1px"})
|
||||
|
||||
assert-css: ("#impl > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedStruct > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedStruct > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("#method\.do_nothing > h4.code-header", {"font-size": "16px"})
|
||||
assert-css: ("#method\.do_nothing > h4.code-header", {"border-bottom-width": "0px"})
|
||||
|
||||
@ -87,8 +87,8 @@ assert-css: ("h6#structy-prose-sub-heading", {"border-bottom-width": "0px"})
|
||||
assert-css: ("h2#implementations", {"font-size": "22px"})
|
||||
assert-css: ("h2#implementations", {"border-bottom-width": "1px"})
|
||||
|
||||
assert-css: ("#impl > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedEnum > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedEnum > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("#method\.do_nothing > h4.code-header", {"font-size": "16px"})
|
||||
assert-css: ("#method\.do_nothing > h4.code-header", {"border-bottom-width": "0px"})
|
||||
|
||||
@ -129,8 +129,8 @@ assert-css: ("h4#sub-heading-for-union-variant", {"border-bottom-width": "0px"})
|
||||
assert-css: ("h2#implementations", {"font-size": "22px"})
|
||||
assert-css: ("h2#implementations", {"border-bottom-width": "1px"})
|
||||
|
||||
assert-css: ("#impl > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedUnion > h3.code-header", {"font-size": "18px"})
|
||||
assert-css: ("#impl-HeavilyDocumentedUnion > h3.code-header", {"border-bottom-width": "0px"})
|
||||
assert-css: ("h4#title-for-union-impl-doc", {"font-size": "16px"})
|
||||
assert-css: ("h4#title-for-union-impl-doc", {"border-bottom-width": "0px"})
|
||||
assert-css: ("h5#sub-heading-for-union-impl-doc", {"font-size": "16px"})
|
||||
|
@ -6,8 +6,8 @@ assert: "#implementors-list"
|
||||
assert-count: ("#implementors-list .impl", 2)
|
||||
// Now we check that both implementors have an anchor, an ID and a similar DOM.
|
||||
assert: ("#implementors-list .impl:nth-child(1) > a.anchor")
|
||||
assert-attribute: ("#implementors-list .impl:nth-child(1)", {"id": "impl-Whatever"})
|
||||
assert-attribute: ("#implementors-list .impl:nth-child(1) > a.anchor", {"href": "#impl-Whatever"})
|
||||
assert-attribute: ("#implementors-list .impl:nth-child(1)", {"id": "impl-Whatever-for-Struct"})
|
||||
assert-attribute: ("#implementors-list .impl:nth-child(1) > a.anchor", {"href": "#impl-Whatever-for-Struct"})
|
||||
assert: "#implementors-list .impl:nth-child(1) > .code-header.in-band"
|
||||
|
||||
assert: ("#implementors-list .impl:nth-child(2) > a.anchor")
|
||||
|
@ -8,5 +8,5 @@ click: ".impl-items .rustdoc-toggle summary::before" // This is the position of
|
||||
assert-attribute-false: (".impl-items .rustdoc-toggle", {"open": ""})
|
||||
|
||||
// Click the "Trait" part of "impl Trait" and verify it navigates.
|
||||
click: "#impl-Trait h3 a:first-of-type"
|
||||
click: "#impl-Trait-for-Foo h3 a:first-of-type"
|
||||
assert-text: (".fqn .in-band", "Trait lib2::Trait")
|
||||
|
@ -1,6 +1,6 @@
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/struct.S.html '//*[@id="impl-Into%3CU%3E"]//h3[@class="code-header in-band"]' 'impl<T, U> Into<U> for T'
|
||||
// @has foo/struct.S.html '//*[@id="impl-Into%3CU%3E-for-S"]//h3[@class="code-header in-band"]' 'impl<T, U> Into<U> for T'
|
||||
pub struct S2 {}
|
||||
mod m {
|
||||
pub struct S {}
|
||||
|
@ -36,7 +36,7 @@ impl Trait<{1 + 2}> for u8 {}
|
||||
// @has foo/struct.Bar.html '//pre[@class="rust struct"]' 'pub struct Bar<T, const N: usize>(_)'
|
||||
pub struct Bar<T, const N: usize>([T; N]);
|
||||
|
||||
// @has foo/struct.Foo.html '//*[@id="impl"]/h3[@class="code-header in-band"]' 'impl<const M: usize> Foo<M> where u8: Trait<M>'
|
||||
// @has foo/struct.Foo.html '//*[@id="impl-Foo%3CM%3E"]/h3[@class="code-header in-band"]' 'impl<const M: usize> Foo<M> where u8: Trait<M>'
|
||||
impl<const M: usize> Foo<M> where u8: Trait<M> {
|
||||
// @has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize'
|
||||
pub const FOO_ASSOC: usize = M + 13;
|
||||
@ -47,7 +47,7 @@ pub fn hey<const N: usize>(&self) -> Bar<u8, N> {
|
||||
}
|
||||
}
|
||||
|
||||
// @has foo/struct.Bar.html '//*[@id="impl"]/h3[@class="code-header in-band"]' 'impl<const M: usize> Bar<u8, M>'
|
||||
// @has foo/struct.Bar.html '//*[@id="impl-Bar%3Cu8%2C%20M%3E"]/h3[@class="code-header in-band"]' 'impl<const M: usize> Bar<u8, M>'
|
||||
impl<const M: usize> Bar<u8, M> {
|
||||
// @has - '//*[@id="method.hey"]' \
|
||||
// 'pub fn hey<const N: usize>(&self) -> Foo<N> where u8: Trait<N>'
|
||||
|
@ -9,20 +9,20 @@ pub enum Order {
|
||||
}
|
||||
|
||||
// @has foo/struct.VSet.html '//pre[@class="rust struct"]' 'pub struct VSet<T, const ORDER: Order>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-Send"]/h3[@class="code-header in-band"]' 'impl<T, const ORDER: Order> Send for VSet<T, ORDER>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-Sync"]/h3[@class="code-header in-band"]' 'impl<T, const ORDER: Order> Sync for VSet<T, ORDER>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-Send-for-VSet%3CT%2C%20ORDER%3E"]/h3[@class="code-header in-band"]' 'impl<T, const ORDER: Order> Send for VSet<T, ORDER>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-Sync-for-VSet%3CT%2C%20ORDER%3E"]/h3[@class="code-header in-band"]' 'impl<T, const ORDER: Order> Sync for VSet<T, ORDER>'
|
||||
pub struct VSet<T, const ORDER: Order> {
|
||||
inner: Vec<T>,
|
||||
}
|
||||
|
||||
// @has foo/struct.VSet.html '//*[@id="impl"]/h3[@class="code-header in-band"]' 'impl<T> VSet<T, { Order::Sorted }>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-VSet%3CT%2C%20{%20Order%3A%3ASorted%20}%3E"]/h3[@class="code-header in-band"]' 'impl<T> VSet<T, { Order::Sorted }>'
|
||||
impl<T> VSet<T, { Order::Sorted }> {
|
||||
pub fn new() -> Self {
|
||||
Self { inner: Vec::new() }
|
||||
}
|
||||
}
|
||||
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-1"]/h3[@class="code-header in-band"]' 'impl<T> VSet<T, { Order::Unsorted }>'
|
||||
// @has foo/struct.VSet.html '//*[@id="impl-VSet%3CT%2C%20{%20Order%3A%3AUnsorted%20}%3E"]/h3[@class="code-header in-band"]' 'impl<T> VSet<T, { Order::Unsorted }>'
|
||||
impl<T> VSet<T, { Order::Unsorted }> {
|
||||
pub fn new() -> Self {
|
||||
Self { inner: Vec::new() }
|
||||
@ -31,7 +31,7 @@ pub fn new() -> Self {
|
||||
|
||||
pub struct Escape<const S: &'static str>;
|
||||
|
||||
// @has foo/struct.Escape.html '//*[@id="impl"]/h3[@class="code-header in-band"]' 'impl Escape<r#"<script>alert("Escape");</script>"#>'
|
||||
// @has foo/struct.Escape.html '//*[@id="impl-Escape%3Cr#%22%3Cscript%3Ealert(%22Escape%22)%3B%3C/script%3E%22#%3E"]/h3[@class="code-header in-band"]' 'impl Escape<r#"<script>alert("Escape");</script>"#>'
|
||||
impl Escape<r#"<script>alert("Escape");</script>"#> {
|
||||
pub fn f() {}
|
||||
}
|
||||
|
@ -1,19 +1,19 @@
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/struct.Foo.html
|
||||
// @has - '//div[@id="synthetic-implementations-list"]/*[@id="impl-Send"]' 'impl Send for Foo'
|
||||
// @has - '//div[@id="synthetic-implementations-list"]/*[@id="impl-Send-for-Foo"]' 'impl Send for Foo'
|
||||
pub struct Foo;
|
||||
|
||||
pub trait EmptyTrait {}
|
||||
|
||||
// @has - '//div[@id="trait-implementations-list"]/*[@id="impl-EmptyTrait"]' 'impl EmptyTrait for Foo'
|
||||
// @has - '//div[@id="trait-implementations-list"]/*[@id="impl-EmptyTrait-for-Foo"]' 'impl EmptyTrait for Foo'
|
||||
impl EmptyTrait for Foo {}
|
||||
|
||||
pub trait NotEmpty {
|
||||
fn foo(&self);
|
||||
}
|
||||
|
||||
// @has - '//div[@id="trait-implementations-list"]/details/summary/*[@id="impl-NotEmpty"]' 'impl NotEmpty for Foo'
|
||||
// @has - '//div[@id="trait-implementations-list"]/details/summary/*[@id="impl-NotEmpty-for-Foo"]' 'impl NotEmpty for Foo'
|
||||
impl NotEmpty for Foo {
|
||||
fn foo(&self) {}
|
||||
}
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
use std::fmt;
|
||||
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-ToString-for-Bar"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
pub struct Bar;
|
||||
|
||||
// @has foo/struct.Foo.html '//*[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
// @has foo/struct.Foo.html '//*[@id="impl-ToString-for-Foo"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
pub struct Foo;
|
||||
// @has foo/struct.Foo.html '//*[@class="sidebar-elems"]//section//a[@href="#impl-ToString"]' 'ToString'
|
||||
|
||||
|
@ -11,11 +11,11 @@ pub trait Bam {}
|
||||
|
||||
struct Hidden;
|
||||
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-Foo"]' 'impl Foo for Bar'
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-Foo-for-Bar"]' 'impl Foo for Bar'
|
||||
impl Foo for Bar {}
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-Dark"]' 'impl Dark for Bar'
|
||||
// @!has foo/struct.Bar.html '//*[@id="impl-Dark-for-Bar"]' 'impl Dark for Bar'
|
||||
impl Dark for Bar {}
|
||||
// @has foo/struct.Bar.html '//*[@id="impl-Bam"]' 'impl Bam for Bar'
|
||||
// @has foo/struct.Bar.html '//*[@id="impl-Bam-for-Bar"]' 'impl Bam for Bar'
|
||||
// @has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Bar'
|
||||
impl Bam for Bar {}
|
||||
// @!has foo/trait.Bam.html '//*[@id="implementors-list"]' 'impl Bam for Hidden'
|
||||
|
@ -5,7 +5,7 @@ pub trait MyTrait {
|
||||
fn my_string(&self) -> String;
|
||||
}
|
||||
|
||||
// @has - "//div[@id='implementors-list']//*[@id='impl-MyTrait']//h3[@class='code-header in-band']" "impl<T> MyTrait for T where T: Debug"
|
||||
// @has - "//div[@id='implementors-list']//*[@id='impl-MyTrait-for-T']//h3[@class='code-header in-band']" "impl<T> MyTrait for T where T: Debug"
|
||||
impl<T> MyTrait for T
|
||||
where
|
||||
T: fmt::Debug,
|
||||
|
@ -1,7 +1,7 @@
|
||||
#![feature(rustdoc_internals)]
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/primitive.i32.html '//*[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
// @has foo/primitive.i32.html '//*[@id="impl-ToString-for-i32"]//h3[@class="code-header in-band"]' 'impl<T> ToString for T'
|
||||
|
||||
#[doc(primitive = "i32")]
|
||||
/// Some useless docs, wouhou!
|
||||
|
@ -11,7 +11,7 @@ pub struct Bar {
|
||||
pub struct Foo<T: ?Sized>(T);
|
||||
|
||||
// @has foo/struct.Unsized.html
|
||||
// @has - '//*[@id="impl-Sized"]//h3[@class="code-header in-band"]' 'impl !Sized for Unsized'
|
||||
// @has - '//*[@id="impl-Sized-for-Unsized"]//h3[@class="code-header in-band"]' 'impl !Sized for Unsized'
|
||||
pub struct Unsized {
|
||||
data: [u8],
|
||||
}
|
||||
|
@ -1,12 +1,12 @@
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/struct.Unsized.html
|
||||
// @has - '//*[@id="impl-Sized"]/h3[@class="code-header in-band"]' 'impl !Sized for Unsized'
|
||||
// @has - '//div[@id="impl-Sized-for-Unsized"]/h3[@class="code-header in-band"]' 'impl !Sized for Unsized'
|
||||
// @!has - '//*[@id="impl-Sized"]//a[@class="srclink"]' 'source'
|
||||
// @has - '//*[@id="impl-Sync"]/h3[@class="code-header in-band"]' 'impl Sync for Unsized'
|
||||
// @has - '//*[@id="impl-Sync-for-Unsized"]/h3[@class="code-header in-band"]' 'impl Sync for Unsized'
|
||||
// @!has - '//*[@id="impl-Sync"]//a[@class="srclink"]' 'source'
|
||||
// @has - '//*[@id="impl-Any"]/h3[@class="code-header in-band"]' 'impl<T> Any for T'
|
||||
// @has - '//*[@id="impl-Any"]//a[@class="srclink"]' 'source'
|
||||
// @has - '//*[@id="impl-Any-for-Unsized"]/h3[@class="code-header in-band"]' 'impl<T> Any for T'
|
||||
// @has - '//*[@id="impl-Any-for-Unsized"]//a[@class="srclink"]' 'source'
|
||||
pub struct Unsized {
|
||||
data: [u8],
|
||||
}
|
||||
|
@ -43,5 +43,5 @@ fn c() {}
|
||||
// @!has - '//*[@id="method.d"]/../../div[@class="docblock"]/p/em'
|
||||
fn d() {}
|
||||
|
||||
// @has - '//*[@id="impl-Trait"]/h3//a/@href' 'trait.Trait.html'
|
||||
// @has - '//*[@id="impl-Trait-for-Struct"]/h3//a/@href' 'trait.Trait.html'
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user