Skip to content

Commit

Permalink
Auto merge of rust-lang#18119 - ChayimFriedman2:signed-const, r=HKalbasi
Browse files Browse the repository at this point in the history
fix: Fix printing of constants greater than `i128::MAX`

Fixes rust-lang#18116.
  • Loading branch information
bors committed Sep 15, 2024
2 parents 4221354 + 798c963 commit 94b526f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
12 changes: 9 additions & 3 deletions crates/hir/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions crates/ide/src/hover/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1496,6 +1496,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(
Expand Down

0 comments on commit 94b526f

Please sign in to comment.