about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2016-11-09 20:51:15 +0200
committerGitHub <noreply@github.com>2016-11-09 20:51:15 +0200
commit2321d11b8c8b10ac7727826bdfbe6a326d46cc34 (patch)
tree1ab52ca63919e2de96718de7fc5f9dc2360b62ff
parentf43320924817b44dc3c4d51e1dba0a40a115103b (diff)
parent520d5f4cb9f88ccf99a869646a089d04c103f3ec (diff)
downloadrust-2321d11b8c8b10ac7727826bdfbe6a326d46cc34.tar.gz
rust-2321d11b8c8b10ac7727826bdfbe6a326d46cc34.zip
Rollup merge of #37134 - GuillaumeGomez:display_tag, r=steveklabnik
Print more tags in rustdoc

r? @steveklabnik

cc @frewsxcv

A little screenshot:

<img width="1440" alt="screen shot 2016-10-13 at 01 41 53" src="https://cloud.githubusercontent.com/assets/3050060/19331745/873cd71e-90e6-11e6-88f8-715668366a3f.png">
-rw-r--r--src/librustdoc/html/render.rs53
-rw-r--r--src/librustdoc/html/static/main.js32
-rw-r--r--src/librustdoc/html/static/rustdoc.css738
3 files changed, 443 insertions, 380 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index a848a011f88..0fd3a9aebf8 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2492,18 +2492,55 @@ fn item_enum(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
     Ok(())
 }
 
+fn attribute_without_value(s: &str) -> bool {
+    ["must_use", "no_mangle", "unsafe_destructor_blind_to_params"].iter().any(|x| x == &s)
+}
+
+fn attribute_with_value(s: &str) -> bool {
+    ["export_name", "lang", "link_section", "must_use"].iter().any(|x| x == &s)
+}
+
+fn attribute_with_values(s: &str) -> bool {
+    ["repr"].iter().any(|x| x == &s)
+}
+
+fn render_attribute(attr: &clean::Attribute, recurse: bool) -> Option<String> {
+    match *attr {
+        clean::Word(ref s) if attribute_without_value(&*s) || recurse => {
+            Some(format!("{}", s))
+        }
+        clean::NameValue(ref k, ref v) if attribute_with_value(&*k) => {
+            Some(format!("{} = \"{}\"", k, v))
+        }
+        clean::List(ref k, ref values) if attribute_with_values(&*k) => {
+            let display: Vec<_> = values.iter()
+                                        .filter_map(|value| render_attribute(value, true))
+                                        .map(|entry| format!("{}", entry))
+                                        .collect();
+
+            if display.len() > 0 {
+                Some(format!("{}({})", k, display.join(", ")))
+            } else {
+                None
+            }
+        }
+        _ => {
+            None
+        }
+    }
+}
+
 fn render_attributes(w: &mut fmt::Formatter, it: &clean::Item) -> fmt::Result {
+    let mut attrs = String::new();
+
     for attr in &it.attrs {
-        match *attr {
-            clean::Word(ref s) if *s == "must_use" => {
-                write!(w, "#[{}]\n", s)?;
-            }
-            clean::NameValue(ref k, ref v) if *k == "must_use" => {
-                write!(w, "#[{} = \"{}\"]\n", k, v)?;
-            }
-            _ => ()
+        if let Some(s) = render_attribute(attr, false) {
+            attrs.push_str(&format!("#[{}]\n", s));
         }
     }
+    if attrs.len() > 0 {
+        write!(w, "<div class=\"docblock attributes\">{}</div>", &attrs)?;
+    }
     Ok(())
 }
 
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 9bb7246e7a9..474d2bbe7fc 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -963,20 +963,22 @@
         }
     }
 
-    $("#toggle-all-docs").on("click", toggleAllDocs);
-
-    $(document).on("click", ".collapse-toggle", function() {
-        var toggle = $(this);
+    function collapseDocs(toggle, animate) {
         var relatedDoc = toggle.parent().next();
         if (relatedDoc.is(".stability")) {
             relatedDoc = relatedDoc.next();
         }
         if (relatedDoc.is(".docblock")) {
             if (relatedDoc.is(":visible")) {
-                relatedDoc.slideUp({duration: 'fast', easing: 'linear'});
+                if (animate === true) {
+                    relatedDoc.slideUp({duration: 'fast', easing: 'linear'});
+                    toggle.children(".toggle-label").fadeIn();
+                } else {
+                    relatedDoc.hide();
+                    toggle.children(".toggle-label").show();
+                }
                 toggle.parent(".toggle-wrapper").addClass("collapsed");
                 toggle.children(".inner").text(labelForToggleButton(true));
-                toggle.children(".toggle-label").fadeIn();
             } else {
                 relatedDoc.slideDown({duration: 'fast', easing: 'linear'});
                 toggle.parent(".toggle-wrapper").removeClass("collapsed");
@@ -984,6 +986,12 @@
                 toggle.children(".toggle-label").hide();
             }
         }
+    }
+
+    $("#toggle-all-docs").on("click", toggleAllDocs);
+
+    $(document).on("click", ".collapse-toggle", function() {
+        collapseDocs($(this), true)
     });
 
     $(function() {
@@ -999,12 +1007,22 @@
         });
 
         var mainToggle =
-            $(toggle).append(
+            $(toggle.clone()).append(
                 $('<span/>', {'class': 'toggle-label'})
                     .css('display', 'none')
                     .html('&nbsp;Expand&nbsp;description'));
         var wrapper = $("<div class='toggle-wrapper'>").append(mainToggle);
         $("#main > .docblock").before(wrapper);
+        var mainToggle =
+            $(toggle).append(
+                $('<span/>', {'class': 'toggle-label'})
+                    .css('display', 'none')
+                    .html('&nbsp;Expand&nbsp;attributes'));
+        var wrapper = $("<div class='toggle-wrapper toggle-attributes'>").append(mainToggle);
+        $("#main > pre > .attributes").each(function() {
+            $(this).before(wrapper);
+            collapseDocs($($(this).prev().children()[0]), false);
+        });
     });
 
     $('pre.line-numbers').on('click', 'span', function() {
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index f49b8556f66..46b34b5a638 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -14,160 +14,160 @@
 
 /* See FiraSans-LICENSE.txt for the Fira Sans license. */
 @font-face {
-    font-family: 'Fira Sans';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Fira Sans'), url("FiraSans-Regular.woff") format('woff');
+	font-family: 'Fira Sans';
+	font-style: normal;
+	font-weight: 400;
+	src: local('Fira Sans'), url("FiraSans-Regular.woff") format('woff');
 }
 @font-face {
-    font-family: 'Fira Sans';
-    font-style: normal;
-    font-weight: 500;
-    src: local('Fira Sans Medium'), url("FiraSans-Medium.woff") format('woff');
+	font-family: 'Fira Sans';
+	font-style: normal;
+	font-weight: 500;
+	src: local('Fira Sans Medium'), url("FiraSans-Medium.woff") format('woff');
 }
 
 /* See SourceSerifPro-LICENSE.txt for the Source Serif Pro license and
  * Heuristica-LICENSE.txt for the Heuristica license. */
 @font-face {
-    font-family: 'Source Serif Pro';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Source Serif Pro'), url("SourceSerifPro-Regular.woff") format('woff');
+	font-family: 'Source Serif Pro';
+	font-style: normal;
+	font-weight: 400;
+	src: local('Source Serif Pro'), url("SourceSerifPro-Regular.woff") format('woff');
 }
 @font-face {
-    font-family: 'Source Serif Pro';
-    font-style: italic;
-    font-weight: 400;
-    src: url("Heuristica-Italic.woff") format('woff');
+	font-family: 'Source Serif Pro';
+	font-style: italic;
+	font-weight: 400;
+	src: url("Heuristica-Italic.woff") format('woff');
 }
 @font-face {
-    font-family: 'Source Serif Pro';
-    font-style: normal;
-    font-weight: 700;
-    src: local('Source Serif Pro Bold'), url("SourceSerifPro-Bold.woff") format('woff');
+	font-family: 'Source Serif Pro';
+	font-style: normal;
+	font-weight: 700;
+	src: local('Source Serif Pro Bold'), url("SourceSerifPro-Bold.woff") format('woff');
 }
 
 /* See SourceCodePro-LICENSE.txt for the Source Code Pro license. */
 @font-face {
-    font-family: 'Source Code Pro';
-    font-style: normal;
-    font-weight: 400;
-    src: local('Source Code Pro'), url("SourceCodePro-Regular.woff") format('woff');
+	font-family: 'Source Code Pro';
+	font-style: normal;
+	font-weight: 400;
+	src: local('Source Code Pro'), url("SourceCodePro-Regular.woff") format('woff');
 }
 @font-face {
-    font-family: 'Source Code Pro';
-    font-style: normal;
-    font-weight: 600;
-    src: local('Source Code Pro Semibold'), url("SourceCodePro-Semibold.woff") format('woff');
+	font-family: 'Source Code Pro';
+	font-style: normal;
+	font-weight: 600;
+	src: local('Source Code Pro Semibold'), url("SourceCodePro-Semibold.woff") format('woff');
 }
 
 * {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+	 -moz-box-sizing: border-box;
+		  box-sizing: border-box;
 }
 
 /* General structure and fonts */
 
 body {
-    font: 16px/1.4 "Source Serif Pro", Georgia, Times, "Times New Roman", serif;
-    margin: 0;
-    position: relative;
-    padding: 10px 15px 20px 15px;
+	font: 16px/1.4 "Source Serif Pro", Georgia, Times, "Times New Roman", serif;
+	margin: 0;
+	position: relative;
+	padding: 10px 15px 20px 15px;
 
-    -webkit-font-feature-settings: "kern", "liga";
-    -moz-font-feature-settings: "kern", "liga";
-    font-feature-settings: "kern", "liga";
+	-webkit-font-feature-settings: "kern", "liga";
+	-moz-font-feature-settings: "kern", "liga";
+	font-feature-settings: "kern", "liga";
 }
 
 h1 {
-    font-size: 1.5em;
+	font-size: 1.5em;
 }
 h2 {
-    font-size: 1.4em;
+	font-size: 1.4em;
 }
 h3 {
-    font-size: 1.3em;
+	font-size: 1.3em;
 }
 h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) {
-    font-weight: 500;
-    margin: 20px 0 15px 0;
-    padding-bottom: 6px;
+	font-weight: 500;
+	margin: 20px 0 15px 0;
+	padding-bottom: 6px;
 }
 h1.fqn {
-    border-bottom: 1px dashed;
-    margin-top: 0;
-    position: relative;
+	border-bottom: 1px dashed;
+	margin-top: 0;
+	position: relative;
 }
 h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) {
-    border-bottom: 1px solid;
+	border-bottom: 1px solid;
 }
 h3.impl, h3.method, h4.method, h3.type, h4.type {
-    font-weight: 600;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    position: relative;
+	font-weight: 600;
+	margin-top: 10px;
+	margin-bottom: 10px;
+	position: relative;
 }
 h3.impl, h3.method, h3.type {
-    margin-top: 15px;
+	margin-top: 15px;
 }
 h1, h2, h3, h4, .sidebar, a.source, .search-input, .content table :not(code)>a, .collapse-toggle {
-    font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+	font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 
 ol, ul {
-    padding-left: 25px;
+	padding-left: 25px;
 }
 ul ul, ol ul, ul ol, ol ol {
-    margin-bottom: 0;
+	margin-bottom: 0;
 }
 
 p {
-    margin: 0 0 .6em 0;
+	margin: 0 0 .6em 0;
 }
 
 code, pre {
-    font-family: "Source Code Pro", Menlo, Monaco, Consolas, "DejaVu Sans Mono", Inconsolata, monospace;
-    white-space: pre-wrap;
+	font-family: "Source Code Pro", Menlo, Monaco, Consolas, "DejaVu Sans Mono", Inconsolata, monospace;
+	white-space: pre-wrap;
 }
 .docblock code, .docblock-short code {
-    border-radius: 3px;
-    padding: 0 0.2em;
+	border-radius: 3px;
+	padding: 0 0.2em;
 }
 .docblock pre code, .docblock-short pre code {
-    padding: 0;
+	padding: 0;
 }
 pre {
-    padding: 14px;
+	padding: 14px;
 }
 
 .source pre {
-    padding: 20px;
+	padding: 20px;
 }
 
 img {
-    max-width: 100%;
+	max-width: 100%;
 }
 
 .content.source {
-    margin-top: 50px;
-    max-width: none;
-    overflow: visible;
-    margin-left: 0px;
-    min-width: 70em;
+	margin-top: 50px;
+	max-width: none;
+	overflow: visible;
+	margin-left: 0px;
+	min-width: 70em;
 }
 
 nav.sub {
-    font-size: 16px;
-    text-transform: uppercase;
+	font-size: 16px;
+	text-transform: uppercase;
 }
 
 .sidebar {
-    width: 200px;
-    position: absolute;
-    left: 0;
-    top: 0;
-    min-height: 100%;
+	width: 200px;
+	position: absolute;
+	left: 0;
+	top: 0;
+	min-height: 100%;
 }
 
 .content, nav { max-width: 960px; }
@@ -177,88 +177,88 @@ nav.sub {
 .js-only, .hidden { display: none !important; }
 
 .sidebar {
-    padding: 10px;
+	padding: 10px;
 }
 .sidebar img {
-    margin: 20px auto;
-    display: block;
+	margin: 20px auto;
+	display: block;
 }
 
 .sidebar .location {
-    font-size: 17px;
-    margin: 30px 0 20px 0;
-    text-align: center;
+	font-size: 17px;
+	margin: 30px 0 20px 0;
+	text-align: center;
 }
 
 .location a:first-child { font-weight: 500; }
 
 .block {
-    padding: 0 10px;
-    margin-bottom: 14px;
+	padding: 0 10px;
+	margin-bottom: 14px;
 }
 .block h2, .block h3 {
-    margin-top: 0;
-    margin-bottom: 8px;
-    text-align: center;
+	margin-top: 0;
+	margin-bottom: 8px;
+	text-align: center;
 }
 .block ul, .block li {
-    margin: 0;
-    padding: 0;
-    list-style: none;
+	margin: 0;
+	padding: 0;
+	list-style: none;
 }
 
 .block a {
-    display: block;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    line-height: 15px;
-    padding: 7px 5px;
-    font-size: 14px;
-    font-weight: 300;
-    transition: border 500ms ease-out;
+	display: block;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	line-height: 15px;
+	padding: 7px 5px;
+	font-size: 14px;
+	font-weight: 300;
+	transition: border 500ms ease-out;
 }
 
 .content {
-    padding: 15px 0;
+	padding: 15px 0;
 }
 
 .content.source pre.rust {
-    white-space: pre;
-    overflow: auto;
-    padding-left: 0;
+	white-space: pre;
+	overflow: auto;
+	padding-left: 0;
 }
 .content pre.line-numbers {
-    float: left;
-    border: none;
-    position: relative;
+	float: left;
+	border: none;
+	position: relative;
 
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
 }
 .line-numbers span { cursor: pointer; }
 
 .docblock-short p {
-    display: inline;
+	display: inline;
 }
 
 .docblock-short.nowrap {
-    display: block;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
+	display: block;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
 }
 
 .docblock-short p {
-    overflow: hidden;
-    text-overflow: ellipsis;
-    margin: 0;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	margin: 0;
 }
 .docblock-short code { white-space: nowrap; }
 
 .docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 {
-    border-bottom: 1px solid;
+	border-bottom: 1px solid;
 }
 
 .docblock h1 { font-size: 1.3em; }
@@ -266,53 +266,53 @@ nav.sub {
 .docblock h3, .docblock h4, .docblock h5 { font-size: 1em; }
 
 .docblock {
-    margin-left: 24px;
+	margin-left: 24px;
 }
 
 .content .out-of-band {
-    font-size: 23px;
-    margin: 0px;
-    padding: 0px;
-    text-align: right;
-    display: inline-block;
-    font-weight: normal;
-    position: absolute;
-    right: 0;
+	font-size: 23px;
+	margin: 0px;
+	padding: 0px;
+	text-align: right;
+	display: inline-block;
+	font-weight: normal;
+	position: absolute;
+	right: 0;
 }
 
 h3.impl > .out-of-band {
-    font-size: 21px;
+	font-size: 21px;
 }
 
 h4 > code, h3 > code, .invisible > code {
-    position: inherit;
+	position: inherit;
 }
 
 .in-band, code {
-    z-index: 5;
+	z-index: 5;
 }
 
 .invisible {
-    background: rgba(0, 0, 0, 0);
-    width: 100%;
-    display: inline-block;
+	background: rgba(0, 0, 0, 0);
+	width: 100%;
+	display: inline-block;
 }
 
 .content .in-band {
-    margin: 0px;
-    padding: 0px;
-    display: inline-block;
+	margin: 0px;
+	padding: 0px;
+	display: inline-block;
 }
 
 #main { position: relative; }
 #main > .since {
-    top: inherit;
-    font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+	top: inherit;
+	font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
 }
 
 .content table {
-    border-spacing: 0 5px;
-    border-collapse: separate;
+	border-spacing: 0 5px;
+	border-collapse: separate;
 }
 .content td { vertical-align: top; }
 .content td:first-child { padding-right: 20px; }
@@ -320,45 +320,45 @@ h4 > code, h3 > code, .invisible > code {
 .content td h1, .content td h2 { margin-left: 0; font-size: 1.1em; }
 
 .docblock table {
-    border: 1px solid;
-    margin: .5em 0;
-    border-collapse: collapse;
-    width: 100%;
+	border: 1px solid;
+	margin: .5em 0;
+	border-collapse: collapse;
+	width: 100%;
 }
 
 .docblock table td {
-    padding: .5em;
-    border-top: 1px dashed;
-    border-bottom: 1px dashed;
+	padding: .5em;
+	border-top: 1px dashed;
+	border-bottom: 1px dashed;
 }
 
 .docblock table th {
-    padding: .5em;
-    text-align: left;
-    border-top: 1px solid;
-    border-bottom: 1px solid;
+	padding: .5em;
+	text-align: left;
+	border-top: 1px solid;
+	border-bottom: 1px solid;
 }
 
 .content .item-list {
-    list-style-type: none;
-    padding: 0;
+	list-style-type: none;
+	padding: 0;
 }
 
 .content .item-list li { margin-bottom: 3px; }
 
 .content .multi-column {
-    -moz-column-count: 5;
-    -moz-column-gap: 2.5em;
-    -webkit-column-count: 5;
-    -webkit-column-gap: 2.5em;
-    column-count: 5;
-    column-gap: 2.5em;
+	-moz-column-count: 5;
+	-moz-column-gap: 2.5em;
+	-webkit-column-count: 5;
+	-webkit-column-gap: 2.5em;
+	column-count: 5;
+	column-gap: 2.5em;
 }
 .content .multi-column li { width: 100%; display: inline-block; }
 
 .content .method {
-    font-size: 1em;
-    position: relative;
+	font-size: 1em;
+	position: relative;
 }
 /* Shift "where ..." part of method or fn definition down a line */
 .content .method .where, .content .fn .where { display: block; }
@@ -368,54 +368,54 @@ h4 > code, h3 > code, .invisible > code {
 .content .methods > div { margin-left: 40px; }
 
 .content .impl-items .docblock, .content .impl-items .stability {
-    margin-left: 40px;
+	margin-left: 40px;
 }
 .content .impl-items .method, .content .impl-items > .type {
-    margin-left: 20px;
+	margin-left: 20px;
 }
 
 .content .stability code {
-    font-size: 90%;
+	font-size: 90%;
 }
 
 /* Shift where in trait listing down a line */
 pre.trait .where::before {
-    content: '\a         ';
+	content: '\a         ';
 }
 
 nav {
-    border-bottom: 1px solid;
-    padding-bottom: 10px;
-    margin-bottom: 10px;
+	border-bottom: 1px solid;
+	padding-bottom: 10px;
+	margin-bottom: 10px;
 }
 nav.main {
-    padding: 20px 0;
-    text-align: center;
+	padding: 20px 0;
+	text-align: center;
 }
 nav.main .current {
-    border-top: 1px solid;
-    border-bottom: 1px solid;
+	border-top: 1px solid;
+	border-bottom: 1px solid;
 }
 nav.main .separator {
-    border: 1px solid;
-    display: inline-block;
-    height: 23px;
-    margin: 0 20px;
+	border: 1px solid;
+	display: inline-block;
+	height: 23px;
+	margin: 0 20px;
 }
 nav.sum { text-align: right; }
 nav.sub form { display: inline; }
 
 nav.sub, .content {
-    margin-left: 230px;
+	margin-left: 230px;
 }
 
 a {
-    text-decoration: none;
-    background: transparent;
+	text-decoration: none;
+	background: transparent;
 }
 
 .docblock a:hover, .docblock-short a:hover, .stability a {
-    text-decoration: underline;
+	text-decoration: underline;
 }
 
 .content span.enum, .content a.enum, .block a.current.enum { color: #5e9766; }
@@ -425,40 +425,40 @@ a {
 .block a.current.crate { font-weight: 500; }
 
 .search-input {
-    width: 100%;
-    /* Override Normalize.css: we have margins and do
-     not want to overflow - the `moz` attribute is necessary
-     until Firefox 29, too early to drop at this point */
-    -moz-box-sizing: border-box !important;
-    box-sizing: border-box !important;
-    outline: none;
-    border: none;
-    border-radius: 1px;
-    margin-top: 5px;
-    padding: 10px 16px;
-    font-size: 17px;
-    transition: border-color 300ms ease;
-    transition: border-radius 300ms ease-in-out;
-    transition: box-shadow 300ms ease-in-out;
+	width: 100%;
+	/* Override Normalize.css: we have margins and do
+	 not want to overflow - the `moz` attribute is necessary
+	 until Firefox 29, too early to drop at this point */
+	-moz-box-sizing: border-box !important;
+	box-sizing: border-box !important;
+	outline: none;
+	border: none;
+	border-radius: 1px;
+	margin-top: 5px;
+	padding: 10px 16px;
+	font-size: 17px;
+	transition: border-color 300ms ease;
+	transition: border-radius 300ms ease-in-out;
+	transition: box-shadow 300ms ease-in-out;
 }
 
 .search-input:focus {
-    border-color: #66afe9;
-    border-radius: 2px;
-    border: 0;
-    outline: 0;
-    box-shadow: 0 0 8px #078dd8;
+	border-color: #66afe9;
+	border-radius: 2px;
+	border: 0;
+	outline: 0;
+	box-shadow: 0 0 8px #078dd8;
 }
 
 .search-results .desc {
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    display: block;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	display: block;
 }
 
 .search-results a {
-    display: block;
+	display: block;
 }
 
 .content .search-results td:first-child { padding-right: 0; }
@@ -468,96 +468,96 @@ tr.result span.primitive::after { content: ' (primitive type)'; font-style: ital
 }
 
 body.blur > :not(#help) {
-    filter: blur(8px);
-    -webkit-filter: blur(8px);
-    opacity: .7;
+	filter: blur(8px);
+	-webkit-filter: blur(8px);
+	opacity: .7;
 }
 
 #help {
-    width: 100%;
-    height: 100vh;
-    position: fixed;
-    top: 0;
-    left: 0;
-    display: flex;
-    justify-content: center;
-    align-items: center;
+	width: 100%;
+	height: 100vh;
+	position: fixed;
+	top: 0;
+	left: 0;
+	display: flex;
+	justify-content: center;
+	align-items: center;
 }
 #help > div {
-    flex: 0 0 auto;
-    background: #e9e9e9;
-    box-shadow: 0 0 6px rgba(0,0,0,.2);
-    width: 550px;
-    height: 330px;
-    border: 1px solid #bfbfbf;
+	flex: 0 0 auto;
+	background: #e9e9e9;
+	box-shadow: 0 0 6px rgba(0,0,0,.2);
+	width: 550px;
+	height: 330px;
+	border: 1px solid #bfbfbf;
 }
 #help dt {
-    float: left;
-    border-radius: 4px;
-    border: 1px solid #bfbfbf;
-    background: #fff;
-    width: 23px;
-    text-align: center;
-    clear: left;
-    display: block;
-    margin-top: -1px;
+	float: left;
+	border-radius: 4px;
+	border: 1px solid #bfbfbf;
+	background: #fff;
+	width: 23px;
+	text-align: center;
+	clear: left;
+	display: block;
+	margin-top: -1px;
 }
 #help dd { margin: 5px 33px; }
 #help .infos { padding-left: 0; }
 #help h1, #help h2 { margin-top: 0; }
 #help > div div {
-    width: 50%;
-    float: left;
-    padding: 20px;
+	width: 50%;
+	float: left;
+	padding: 20px;
 }
 
 em.stab {
-    display: inline-block;
-    border-width: 1px;
-    border-style: solid;
-    padding: 3px;
-    margin-bottom: 5px;
-    font-size: 90%;
-    font-style: normal;
+	display: inline-block;
+	border-width: 1px;
+	border-style: solid;
+	padding: 3px;
+	margin-bottom: 5px;
+	font-size: 90%;
+	font-style: normal;
 }
 em.stab p {
-    display: inline;
+	display: inline;
 }
 
 .module-item .stab {
-    border-width: 0;
-    padding: 0;
-    margin: 0;
-    background: inherit !important;
+	border-width: 0;
+	padding: 0;
+	margin: 0;
+	background: inherit !important;
 }
 
 .module-item.unstable {
-    opacity: 0.65;
+	opacity: 0.65;
 }
 
 .since {
-    font-weight: normal;
-    font-size: initial;
-    color: grey;
-    position: absolute;
-    right: 0;
-    top: 0;
+	font-weight: normal;
+	font-size: initial;
+	color: grey;
+	position: absolute;
+	right: 0;
+	top: 0;
 }
 
 .variants_table {
-    width: 100%;
+	width: 100%;
 }
 
 .variants_table tbody tr td:first-child {
-    width: 1%; /* make the variant name as small as possible */
+	width: 1%; /* make the variant name as small as possible */
 }
 
 td.summary-column {
-    width: 100%;
+	width: 100%;
 }
 
 .summary {
-    padding-right: 0px;
+	padding-right: 0px;
 }
 
 .line-numbers :target { background-color: transparent; }
@@ -571,110 +571,118 @@ pre.rust .attribute, pre.rust .attribute .ident { color: #C82829; }
 pre.rust .macro, pre.rust .macro-nonterminal { color: #3E999F; }
 pre.rust .lifetime { color: #B76514; }
 pre.rust .question-mark {
-    color: #ff9011;
-    font-weight: bold;
+	color: #ff9011;
+	font-weight: bold;
 }
 
 pre.rust { position: relative; }
 a.test-arrow {
-    background-color: rgba(78, 139, 202, 0.2);
-    display: inline-block;
-    position: absolute;
-    padding: 5px 10px 5px 10px;
-    border-radius: 5px;
-    font-size: 130%;
-    top: 5px;
-    right: 5px;
+	background-color: rgba(78, 139, 202, 0.2);
+	display: inline-block;
+	position: absolute;
+	padding: 5px 10px 5px 10px;
+	border-radius: 5px;
+	font-size: 130%;
+	top: 5px;
+	right: 5px;
 }
 a.test-arrow:hover{
-    background-color: #4e8bca;
-    text-decoration: none;
+	background-color: #4e8bca;
+	text-decoration: none;
 }
 
 .section-header:hover a:after {
-    content: '\2002\00a7\2002';
+	content: '\2002\00a7\2002';
 }
 
 .section-header:hover a {
-    text-decoration: none;
+	text-decoration: none;
 }
 
 .section-header a {
-    color: inherit;
+	color: inherit;
 }
 
 .collapse-toggle {
-    font-weight: 300;
-    position: absolute;
-    left: -23px;
-    color: #999;
-    top: 0;
+	font-weight: 300;
+	position: absolute;
+	left: -23px;
+	color: #999;
+	top: 0;
 }
 
 .toggle-wrapper > .collapse-toggle {
-    left: -24px;
-    margin-top: 0px;
+	left: -24px;
+	margin-top: 0px;
 }
 
 .toggle-wrapper {
-    position: relative;
+	position: relative;
 }
 
 .toggle-wrapper.collapsed {
-    height: 1em;
-    transition: height .2s;
+	height: 1em;
+	transition: height .2s;
 }
 
 .collapse-toggle > .inner {
-    display: inline-block;
-    width: 1.2ch;
-    text-align: center;
+	display: inline-block;
+	width: 1.2ch;
+	text-align: center;
 }
 
 .toggle-label {
-    color: #999;
+	color: #999;
 }
 
 .ghost {
-    display: none;
+	display: none;
 }
 
 .ghost + .since {
-    position: initial;
-    display: table-cell;
+	position: initial;
+	display: table-cell;
 }
 
 .since + .srclink {
-    display: table-cell;
-    padding-left: 10px;
+	display: table-cell;
+	padding-left: 10px;
 }
 
 span.since {
-    position: initial;
-    font-size: 20px;
-    margin-right: 5px;
+	position: initial;
+	font-size: 20px;
+	margin-right: 5px;
 }
 
 .toggle-wrapper > .collapse-toggle {
-    left: 0;
+	left: 0;
 }
 
 .variant + .toggle-wrapper > a {
-    margin-top: 5px;
+	margin-top: 5px;
 }
 
 .enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock {
-    margin-left: 30px;
-    margin-bottom: 20px;
-    margin-top: 5px;
+	margin-left: 30px;
+	margin-bottom: 20px;
+	margin-top: 5px;
 }
 
 .enum > .collapsed, .struct > .collapsed {
-    margin-bottom: 25px;
+	margin-bottom: 25px;
 }
 
 .enum .variant, .struct .structfield {
-    display: block;
+	display: block;
+}
+
+.attributes {
+	display: block;
+	margin: 0px 0px 0px 30px !important;
+}
+.toggle-attributes.collapsed {
+	margin-bottom: 5px;
 }
 
 :target > code {
@@ -685,71 +693,71 @@ span.since {
 /* Media Queries */
 
 @media (max-width: 700px) {
-    body {
-        padding-top: 0px;
-    }
-
-    .sidebar {
-        height: 40px;
-        min-height: 40px;
-        width: 100%;
-        margin: 0px;
-        padding: 0px;
-        position: static;
-    }
-
-    .sidebar .location {
-        float: right;
-        margin: 0px;
-        padding: 3px 10px 1px 10px;
-        min-height: 39px;
-        background: inherit;
-        text-align: left;
-        font-size: 24px;
-    }
-
-    .sidebar .location:empty {
-        padding: 0;
-    }
-
-    .sidebar img {
-        width: 35px;
-        margin-top: 5px;
-        margin-bottom: 0px;
-        float: left;
-    }
-
-    nav.sub {
-        margin: 0 auto;
-    }
-
-    .sidebar .block {
-        display: none;
-    }
-
-    .content {
-        margin-left: 0px;
-    }
-
-    .content .in-band {
-        width: 100%;
-    }
-
-    .content .out-of-band {
-        display: none;
-    }
-
-    .toggle-wrapper > .collapse-toggle {
-        left: 0px;
-    }
-
-    .toggle-wrapper {
-        height: 1.5em;
-    }
+	body {
+		padding-top: 0px;
+	}
+
+	.sidebar {
+		height: 40px;
+		min-height: 40px;
+		width: 100%;
+		margin: 0px;
+		padding: 0px;
+		position: static;
+	}
+
+	.sidebar .location {
+		float: right;
+		margin: 0px;
+		padding: 3px 10px 1px 10px;
+		min-height: 39px;
+		background: inherit;
+		text-align: left;
+		font-size: 24px;
+	}
+
+	.sidebar .location:empty {
+		padding: 0;
+	}
+
+	.sidebar img {
+		width: 35px;
+		margin-top: 5px;
+		margin-bottom: 0px;
+		float: left;
+	}
+
+	nav.sub {
+		margin: 0 auto;
+	}
+
+	.sidebar .block {
+		display: none;
+	}
+
+	.content {
+		margin-left: 0px;
+	}
+
+	.content .in-band {
+		width: 100%;
+	}
+
+	.content .out-of-band {
+		display: none;
+	}
+
+	.toggle-wrapper > .collapse-toggle {
+		left: 0px;
+	}
+
+	.toggle-wrapper {
+		height: 1.5em;
+	}
 }
 
 @media print {
-    nav.sub, .content .out-of-band, .collapse-toggle {
-        display: none;
-    }
+	nav.sub, .content .out-of-band, .collapse-toggle {
+		display: none;
+	}
 }