Skip to content

Commit

Permalink
Fix display of const generics in rustdoc
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed May 18, 2019
1 parent 548add7 commit 2caeaf5
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/librustdoc/clean/mod.rs
Expand Up @@ -3149,7 +3149,10 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
fn clean(&self, cx: &DocContext<'_>) -> Constant {
Constant {
type_: self.ty.clean(cx),
expr: format!("{:?}", self.val), // FIXME(const_generics)
expr: match self.val {
ConstValue::Param(ty::ParamConst { name, .. }) => format!("{}", name),
e => format!("{:?}", e), // FIXME generic consts with expressions
},
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions src/librustdoc/html/format.rs
Expand Up @@ -262,9 +262,7 @@ impl fmt::Display for clean::Lifetime {

impl fmt::Display for clean::Constant {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.expr, f)?;
f.write_str(": ")?;
fmt::Display::fmt(&self.type_, f)
fmt::Display::fmt(&self.expr, f)
}
}

Expand Down
30 changes: 30 additions & 0 deletions src/test/rustdoc/generic-const.rs
@@ -0,0 +1,30 @@
#![feature(const_generics)]
#![crate_name = "foo"]

// ignore-tidy-linelength

pub enum Order {
Sorted,
Unsorted,
}

// @has foo/struct.VSet.html '//pre[@class="rust struct"]' 'pub struct VSet<T, const ORDER: Order>'
// @has foo/struct.VSet.html '//h3[@id="impl-Send"]/code' 'impl<const ORDER: Order, T> Send for VSet<T, ORDER>'
// @has foo/struct.VSet.html '//h3[@id="impl-Sync"]/code' 'impl<const ORDER: Order, T> Sync for VSet<T, ORDER>'
pub struct VSet<T, const ORDER: Order> {
inner: Vec<T>,
}

// @has foo/struct.VSet.html '//h3[@id="impl"]/code' '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 '//h3[@id="impl-1"]/code' 'impl<T> VSet<T, { Order::Unsorted }>'
impl <T> VSet<T, {Order::Unsorted}> {
pub fn new() -> Self {
Self { inner: Vec::new() }
}
}

0 comments on commit 2caeaf5

Please sign in to comment.