Skip to content

Commit

Permalink
Rollup merge of rust-lang#69686 - varkor:rustdoc-attributes, r=Guilla…
Browse files Browse the repository at this point in the history
…umeGomez

Use `pprust` to print attributes in rustdoc

Fixes rust-lang#69559.

I'm not sure what the original motivation was for the `render_attribute`, so I may be missing something, but replacing it with `pprust::attribute_to_string` seems to give the intended output (modulo some spacing idiosyncrasies).

r? @GuillaumeGomez
  • Loading branch information
Dylan-DPC committed Mar 15, 2020
2 parents 91b826f + c599ec4 commit a338c0e
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 23 deletions.
26 changes: 3 additions & 23 deletions src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ use std::sync::Arc;

use rustc::middle::privacy::AccessLevels;
use rustc::middle::stability;
use rustc_ast::ast;
use rustc_ast_pretty::pprust;
use rustc_data_structures::flock;
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
Expand Down Expand Up @@ -3126,25 +3125,6 @@ fn item_enum(w: &mut Buffer, cx: &Context, it: &clean::Item, e: &clean::Enum) {
render_assoc_items(w, cx, it, it.def_id, AssocItemRender::All)
}

fn render_attribute(attr: &ast::MetaItem) -> Option<String> {
let path = pprust::path_to_string(&attr.path);

if attr.is_word() {
Some(path)
} else if let Some(v) = attr.value_str() {
Some(format!("{} = {:?}", path, v))
} else if let Some(values) = attr.meta_item_list() {
let display: Vec<_> = values
.iter()
.filter_map(|attr| attr.meta_item().and_then(|mi| render_attribute(mi)))
.collect();

if !display.is_empty() { Some(format!("{}({})", path, display.join(", "))) } else { None }
} else {
None
}
}

const ATTRIBUTE_WHITELIST: &[Symbol] = &[
sym::export_name,
sym::lang,
Expand All @@ -3170,9 +3150,9 @@ fn render_attributes(w: &mut Buffer, it: &clean::Item, top: bool) {
if !ATTRIBUTE_WHITELIST.contains(&attr.name_or_empty()) {
continue;
}
if let Some(s) = render_attribute(&attr.meta().unwrap()) {
attrs.push_str(&format!("#[{}]\n", s));
}

// FIXME: this currently renders too many spaces as in: `#[repr(C, align (8))]`.
attrs.push_str(&pprust::attribute_to_string(&attr));
}
if !attrs.is_empty() {
write!(
Expand Down
4 changes: 4 additions & 0 deletions src/test/rustdoc/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ pub extern "C" fn g() {}
pub enum Foo {
Bar,
}

// @has foo/struct.Repr.html '//*[@class="docblock attributes top-attr"]' '#[repr(C, align (8))]'
#[repr(C, align(8))]
pub struct Repr;

0 comments on commit a338c0e

Please sign in to comment.