about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTim Neumann <mail@timnn.me>2017-09-17 13:19:07 +0200
committerGitHub <noreply@github.com>2017-09-17 13:19:07 +0200
commit4dc01c475f01a47b1b1d5d548e86b16f821f0ec8 (patch)
treec3a88a677659c1ad634ee7065c8e839520ec3a46
parenteab164842a07be9ca578e4a9c679c125250dcaca (diff)
parent06478d12ac9a64b4bc4741ee75b575df4ecb54e2 (diff)
downloadrust-4dc01c475f01a47b1b1d5d548e86b16f821f0ec8.tar.gz
rust-4dc01c475f01a47b1b1d5d548e86b16f821f0ec8.zip
Rollup merge of #44562 - eddyb:ugh-rustdoc, r=nikomatsakis
rustdoc: pretty-print Unevaluated expressions in types.

Fixes #44555.

r? @nikomatsakis
-rw-r--r--src/librustdoc/clean/inline.rs2
-rw-r--r--src/librustdoc/clean/mod.rs12
2 files changed, 13 insertions, 1 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs
index 70563b3d267..7f5d11ba5de 100644
--- a/src/librustdoc/clean/inline.rs
+++ b/src/librustdoc/clean/inline.rs
@@ -473,7 +473,7 @@ impl hir::print::PpAnn for InlinedConst {
     }
 }
 
-fn print_inlined_const(cx: &DocContext, did: DefId) -> String {
+pub fn print_inlined_const(cx: &DocContext, did: DefId) -> String {
     let body = cx.tcx.extern_const_body(did);
     let inlined = InlinedConst {
         nested_bodies: cx.tcx.item_body_nested_bodies(did)
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 658b42da953..3be09373408 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -1793,6 +1793,12 @@ impl Clean<Type> for hir::Ty {
                 let n = cx.tcx.const_eval(param_env.and((def_id, substs))).unwrap();
                 let n = if let ConstVal::Integral(ConstInt::Usize(n)) = n.val {
                     n.to_string()
+                } else if let ConstVal::Unevaluated(def_id, _) = n.val {
+                    if let Some(node_id) = cx.tcx.hir.as_local_node_id(def_id) {
+                        print_const_expr(cx, cx.tcx.hir.body_owned_by(node_id))
+                    } else {
+                        inline::print_inlined_const(cx, def_id)
+                    }
                 } else {
                     format!("{:?}", n)
                 };
@@ -1909,6 +1915,12 @@ impl<'tcx> Clean<Type> for Ty<'tcx> {
             ty::TyArray(ty, n) => {
                 let n = if let ConstVal::Integral(ConstInt::Usize(n)) = n.val {
                     n.to_string()
+                } else if let ConstVal::Unevaluated(def_id, _) = n.val {
+                    if let Some(node_id) = cx.tcx.hir.as_local_node_id(def_id) {
+                        print_const_expr(cx, cx.tcx.hir.body_owned_by(node_id))
+                    } else {
+                        inline::print_inlined_const(cx, def_id)
+                    }
                 } else {
                     format!("{:?}", n)
                 };