Skip to content

Commit 2321d11

Browse files
authored
Rollup merge of rust-lang#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">
2 parents f433209 + 520d5f4 commit 2321d11

File tree

3 files changed

+443
-380
lines changed

3 files changed

+443
-380
lines changed

src/librustdoc/html/render.rs

+45-8
Original file line numberDiff line numberDiff line change
@@ -2492,18 +2492,55 @@ fn item_enum(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
24922492
Ok(())
24932493
}
24942494

2495+
fn attribute_without_value(s: &str) -> bool {
2496+
["must_use", "no_mangle", "unsafe_destructor_blind_to_params"].iter().any(|x| x == &s)
2497+
}
2498+
2499+
fn attribute_with_value(s: &str) -> bool {
2500+
["export_name", "lang", "link_section", "must_use"].iter().any(|x| x == &s)
2501+
}
2502+
2503+
fn attribute_with_values(s: &str) -> bool {
2504+
["repr"].iter().any(|x| x == &s)
2505+
}
2506+
2507+
fn render_attribute(attr: &clean::Attribute, recurse: bool) -> Option<String> {
2508+
match *attr {
2509+
clean::Word(ref s) if attribute_without_value(&*s) || recurse => {
2510+
Some(format!("{}", s))
2511+
}
2512+
clean::NameValue(ref k, ref v) if attribute_with_value(&*k) => {
2513+
Some(format!("{} = \"{}\"", k, v))
2514+
}
2515+
clean::List(ref k, ref values) if attribute_with_values(&*k) => {
2516+
let display: Vec<_> = values.iter()
2517+
.filter_map(|value| render_attribute(value, true))
2518+
.map(|entry| format!("{}", entry))
2519+
.collect();
2520+
2521+
if display.len() > 0 {
2522+
Some(format!("{}({})", k, display.join(", ")))
2523+
} else {
2524+
None
2525+
}
2526+
}
2527+
_ => {
2528+
None
2529+
}
2530+
}
2531+
}
2532+
24952533
fn render_attributes(w: &mut fmt::Formatter, it: &clean::Item) -> fmt::Result {
2534+
let mut attrs = String::new();
2535+
24962536
for attr in &it.attrs {
2497-
match *attr {
2498-
clean::Word(ref s) if *s == "must_use" => {
2499-
write!(w, "#[{}]\n", s)?;
2500-
}
2501-
clean::NameValue(ref k, ref v) if *k == "must_use" => {
2502-
write!(w, "#[{} = \"{}\"]\n", k, v)?;
2503-
}
2504-
_ => ()
2537+
if let Some(s) = render_attribute(attr, false) {
2538+
attrs.push_str(&format!("#[{}]\n", s));
25052539
}
25062540
}
2541+
if attrs.len() > 0 {
2542+
write!(w, "<div class=\"docblock attributes\">{}</div>", &attrs)?;
2543+
}
25072544
Ok(())
25082545
}
25092546

src/librustdoc/html/static/main.js

+25-7
Original file line numberDiff line numberDiff line change
@@ -963,27 +963,35 @@
963963
}
964964
}
965965

966-
$("#toggle-all-docs").on("click", toggleAllDocs);
967-
968-
$(document).on("click", ".collapse-toggle", function() {
969-
var toggle = $(this);
966+
function collapseDocs(toggle, animate) {
970967
var relatedDoc = toggle.parent().next();
971968
if (relatedDoc.is(".stability")) {
972969
relatedDoc = relatedDoc.next();
973970
}
974971
if (relatedDoc.is(".docblock")) {
975972
if (relatedDoc.is(":visible")) {
976-
relatedDoc.slideUp({duration: 'fast', easing: 'linear'});
973+
if (animate === true) {
974+
relatedDoc.slideUp({duration: 'fast', easing: 'linear'});
975+
toggle.children(".toggle-label").fadeIn();
976+
} else {
977+
relatedDoc.hide();
978+
toggle.children(".toggle-label").show();
979+
}
977980
toggle.parent(".toggle-wrapper").addClass("collapsed");
978981
toggle.children(".inner").text(labelForToggleButton(true));
979-
toggle.children(".toggle-label").fadeIn();
980982
} else {
981983
relatedDoc.slideDown({duration: 'fast', easing: 'linear'});
982984
toggle.parent(".toggle-wrapper").removeClass("collapsed");
983985
toggle.children(".inner").text(labelForToggleButton(false));
984986
toggle.children(".toggle-label").hide();
985987
}
986988
}
989+
}
990+
991+
$("#toggle-all-docs").on("click", toggleAllDocs);
992+
993+
$(document).on("click", ".collapse-toggle", function() {
994+
collapseDocs($(this), true)
987995
});
988996

989997
$(function() {
@@ -999,12 +1007,22 @@
9991007
});
10001008

10011009
var mainToggle =
1002-
$(toggle).append(
1010+
$(toggle.clone()).append(
10031011
$('<span/>', {'class': 'toggle-label'})
10041012
.css('display', 'none')
10051013
.html('&nbsp;Expand&nbsp;description'));
10061014
var wrapper = $("<div class='toggle-wrapper'>").append(mainToggle);
10071015
$("#main > .docblock").before(wrapper);
1016+
var mainToggle =
1017+
$(toggle).append(
1018+
$('<span/>', {'class': 'toggle-label'})
1019+
.css('display', 'none')
1020+
.html('&nbsp;Expand&nbsp;attributes'));
1021+
var wrapper = $("<div class='toggle-wrapper toggle-attributes'>").append(mainToggle);
1022+
$("#main > pre > .attributes").each(function() {
1023+
$(this).before(wrapper);
1024+
collapseDocs($($(this).prev().children()[0]), false);
1025+
});
10081026
});
10091027

10101028
$('pre.line-numbers').on('click', 'span', function() {

0 commit comments

Comments
 (0)