Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #18119 - ChayimFriedman2:signed-const, r=HKalbasi
fix: Fix printing of constants greater than `i128::MAX` Fixes #18116.
bors 2024-09-16
parent 4221354 · parent 798c963 · commit 94b526f
-rw-r--r--crates/hir/src/lib.rs12
-rw-r--r--crates/ide/src/hover/tests.rs18
2 files changed, 27 insertions, 3 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index e3bd756208..176c059bf6 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -80,7 +80,7 @@ use nameres::diagnostics::DefDiagnosticKind;
use rustc_hash::FxHashSet;
use smallvec::SmallVec;
use span::{Edition, EditionedFileId, FileId, MacroCallId, SyntaxContextId};
-use stdx::{impl_from, never};
+use stdx::{format_to, impl_from, never};
use syntax::{
ast::{self, HasAttrs as _, HasGenericParams, HasName},
format_smolstr, AstNode, AstPtr, SmolStr, SyntaxNode, SyntaxNodePtr, TextRange, ToSmolStr, T,
@@ -2578,10 +2578,16 @@ impl Const {
let value = u128::from_le_bytes(mir::pad16(b, false));
let value_signed =
i128::from_le_bytes(mir::pad16(b, matches!(s, Scalar::Int(_))));
+ let mut result = if let Scalar::Int(_) = s {
+ value_signed.to_string()
+ } else {
+ value.to_string()
+ };
if value >= 10 {
- return Ok(format!("{value_signed} ({value:#X})"));
+ format_to!(result, " ({value:#X})");
+ return Ok(result);
} else {
- return Ok(format!("{value_signed}"));
+ return Ok(result);
}
}
}
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index f2e5d24fcc..8805ead818 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -1497,6 +1497,24 @@ const foo$0: u32 = {
}
#[test]
+fn hover_unsigned_max_const() {
+ check(
+ r#"const $0A: u128 = -1_i128 as u128;"#,
+ expect![[r#"
+ *A*
+
+ ```rust
+ test
+ ```
+
+ ```rust
+ const A: u128 = 340282366920938463463374607431768211455 (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
+ ```
+ "#]],
+ );
+}
+
+#[test]
fn hover_eval_complex_constants() {
check(
r#"