about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-02-20 00:37:27 +0100
committerGitHub <noreply@github.com>2022-02-20 00:37:27 +0100
commit9e9cc66e428b5a073d5583fb0071c629e1c8bc52 (patch)
tree4c3a47e746f06bdad082af4f823db315aa5a04cd
parent1771b98a69b0b8d142507cce4b32db404950add6 (diff)
parent296adbac0a6bb06d60459ec0cd634cb530d3be3d (diff)
downloadrust-9e9cc66e428b5a073d5583fb0071c629e1c8bc52.tar.gz
rust-9e9cc66e428b5a073d5583fb0071c629e1c8bc52.zip
Rollup merge of #94091 - GuillaumeGomez:rustdoc-const-computed-value, r=oli-obk
Fix rustdoc const computed value

Fixes #85088.

It looks like this now (instead of hexadecimal):

![Screenshot from 2022-02-17 17-55-39](https://user-images.githubusercontent.com/3050060/154532115-0f9861a0-406f-4c9c-957f-32bedd8aca7d.png)

r? ````@oli-obk````
-rw-r--r--compiler/rustc_middle/src/mir/interpret/value.rs5
-rw-r--r--compiler/rustc_middle/src/ty/consts/int.rs7
-rw-r--r--src/librustdoc/clean/utils.rs6
-rw-r--r--src/test/rustdoc/const-value-display.rs9
4 files changed, 26 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/mir/interpret/value.rs b/compiler/rustc_middle/src/mir/interpret/value.rs
index cc31d8c2c18..aa8730bf9cd 100644
--- a/compiler/rustc_middle/src/mir/interpret/value.rs
+++ b/compiler/rustc_middle/src/mir/interpret/value.rs
@@ -456,6 +456,11 @@ impl<'tcx, Tag: Provenance> Scalar<Tag> {
         // Going through `u64` to check size and truncation.
         Ok(Double::from_bits(self.to_u64()?.into()))
     }
+
+    // FIXME: Replace current `impl Display for Scalar` with `impl LowerHex`.
+    pub fn rustdoc_display(&self) -> String {
+        if let Scalar::Int(int) = self { int.to_string() } else { self.to_string() }
+    }
 }
 
 #[derive(Clone, Copy, Eq, PartialEq, TyEncodable, TyDecodable, HashStable, Hash)]
diff --git a/compiler/rustc_middle/src/ty/consts/int.rs b/compiler/rustc_middle/src/ty/consts/int.rs
index ca1db2fd551..72623ba54ee 100644
--- a/compiler/rustc_middle/src/ty/consts/int.rs
+++ b/compiler/rustc_middle/src/ty/consts/int.rs
@@ -384,3 +384,10 @@ impl fmt::UpperHex for ScalarInt {
         write!(f, "{:01$X}", { self.data }, self.size as usize * 2)
     }
 }
+
+impl fmt::Display for ScalarInt {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        self.check_data();
+        write!(f, "{}", { self.data })
+    }
+}
diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs
index 1d312df1f78..fe1992a5d7e 100644
--- a/src/librustdoc/clean/utils.rs
+++ b/src/librustdoc/clean/utils.rs
@@ -302,7 +302,11 @@ fn print_const_with_custom_print_scalar(tcx: TyCtxt<'_>, ct: ty::Const<'_>) -> S
     // For all other types, fallback to the original `pretty_print_const`.
     match (ct.val(), ct.ty().kind()) {
         (ty::ConstKind::Value(ConstValue::Scalar(int)), ty::Uint(ui)) => {
-            format!("{}{}", format_integer_with_underscore_sep(&int.to_string()), ui.name_str())
+            format!(
+                "{}{}",
+                format_integer_with_underscore_sep(&int.rustdoc_display()),
+                ui.name_str()
+            )
         }
         (ty::ConstKind::Value(ConstValue::Scalar(int)), ty::Int(i)) => {
             let ty = tcx.lift(ct.ty()).unwrap();
diff --git a/src/test/rustdoc/const-value-display.rs b/src/test/rustdoc/const-value-display.rs
new file mode 100644
index 00000000000..0ae52592b64
--- /dev/null
+++ b/src/test/rustdoc/const-value-display.rs
@@ -0,0 +1,9 @@
+#![crate_name = "foo"]
+
+// @has 'foo/constant.HOUR_IN_SECONDS.html'
+// @has - '//*[@class="docblock item-decl"]//code' 'pub const HOUR_IN_SECONDS: u64 = 60 * 60; // 3_600u64'
+pub const HOUR_IN_SECONDS: u64 = 60 * 60;
+
+// @has 'foo/constant.NEGATIVE.html'
+// @has - '//*[@class="docblock item-decl"]//code' 'pub const NEGATIVE: i64 = -60 * 60; // -3_600i64'
+pub const NEGATIVE: i64 = -60 * 60;