diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 109765b6711..5377cd9a391 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -3055,6 +3055,7 @@ fn render_assoc_item(w: &mut fmt::Formatter, } else { (0, true) }; + render_attributes(w, meth)?; write!(w, "{}{}{}{}fn {name}\ {generics}{decl}{where_clause}", VisSpace(&meth.visibility), diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index bb9a7e47232..0c937759120 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -2041,16 +2041,16 @@ autoCollapseAllImpls(getPageId()); - function createToggleWrapper() { + function createToggleWrapper(tog) { var span = document.createElement('span'); span.className = 'toggle-label'; span.style.display = 'none'; span.innerHTML = ' Expand attributes'; - toggle.appendChild(span); + tog.appendChild(span); var wrapper = document.createElement('div'); wrapper.className = 'toggle-wrapper toggle-attributes'; - wrapper.appendChild(toggle); + wrapper.appendChild(tog); return wrapper; } @@ -2078,13 +2078,11 @@ }); } - onEach(document.getElementById('main').getElementsByTagName('pre'), function(e) { - onEach(e.getElementsByClassName('attributes'), function(i_e) { - i_e.parentNode.insertBefore(createToggleWrapper(), i_e); - if (getCurrentValue("rustdoc-item-attributes") !== "false") { - collapseDocs(i_e.previousSibling.childNodes[0], "toggle"); - } - }); + onEach(document.getElementById('main').getElementsByClassName('attributes'), function(i_e) { + i_e.parentNode.insertBefore(createToggleWrapper(toggle.cloneNode(true)), i_e); + if (getCurrentValue("rustdoc-item-attributes") !== "false") { + collapseDocs(i_e.previousSibling.childNodes[0], "toggle"); + } }); onEach(document.getElementsByClassName('rust-example-rendered'), function(e) { diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 83abf35c854..867b1e86aa2 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -771,7 +771,7 @@ h3 > .collapse-toggle, h4 > .collapse-toggle { .toggle-wrapper { position: relative; - margin-top: 5px; + margin-top: 0; } .toggle-wrapper.collapsed { @@ -854,10 +854,19 @@ span.since { .attributes { display: block; - margin: 0px 0px 0px 30px !important; + margin-top: 0px !important; + margin-right: 0px; + margin-bottom: 0px !important; + margin-left: 30px; } .toggle-attributes.collapsed { - margin-bottom: 5px; + margin-bottom: 0; +} +.impl-items > .toggle-attributes { + margin-left: 20px; +} +.impl-items .attributes { + font-weight: 500; } :target > code { diff --git a/src/test/rustdoc/trait-attributes.rs b/src/test/rustdoc/trait-attributes.rs new file mode 100644 index 00000000000..00d10408b4c --- /dev/null +++ b/src/test/rustdoc/trait-attributes.rs @@ -0,0 +1,32 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "foo"] + +// ignore-tidy-linelength + +pub trait Foo { + // @has foo/trait.Foo.html '//h3[@id="tymethod.foo"]//div[@class="docblock attributes"]' '#[must_use]' + #[must_use] + fn foo(); +} + +#[must_use] +pub struct Bar; + +impl Bar { + // @has foo/struct.Bar.html '//h4[@id="method.bar"]//div[@class="docblock attributes"]' '#[must_use]' + #[must_use] + pub fn bar() {} + + // @has foo/struct.Bar.html '//h4[@id="method.bar2"]//div[@class="docblock attributes"]' '#[must_use]' + #[must_use] + pub fn bar2() {} +}