Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir/src/lib.rs11
-rw-r--r--crates/ide-assists/src/handlers/inline_const_as_literal.rs7
2 files changed, 14 insertions, 4 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 3b8b901fa1..e3bd756208 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -2553,6 +2553,17 @@ impl Const {
Type::from_value_def(db, self.id)
}
+ /// Evaluate the constant and return the result as a string.
+ ///
+ /// This function is intended for IDE assistance, different from [`Const::render_eval`].
+ pub fn eval(self, db: &dyn HirDatabase, edition: Edition) -> Result<String, ConstEvalError> {
+ let c = db.const_eval(self.id.into(), Substitution::empty(Interner), None)?;
+ Ok(format!("{}", c.display(db, edition)))
+ }
+
+ /// Evaluate the constant and return the result as a string, with more detailed information.
+ ///
+ /// This function is intended for user-facing display.
pub fn render_eval(
self,
db: &dyn HirDatabase,
diff --git a/crates/ide-assists/src/handlers/inline_const_as_literal.rs b/crates/ide-assists/src/handlers/inline_const_as_literal.rs
index f1c2acdd3e..6b504a918b 100644
--- a/crates/ide-assists/src/handlers/inline_const_as_literal.rs
+++ b/crates/ide-assists/src/handlers/inline_const_as_literal.rs
@@ -53,10 +53,7 @@ pub(crate) fn inline_const_as_literal(acc: &mut Assists, ctx: &AssistContext<'_>
| ast::Expr::BinExpr(_)
| ast::Expr::CallExpr(_) => {
let edition = ctx.sema.scope(variable.syntax())?.krate().edition(ctx.db());
- match konst.render_eval(ctx.sema.db, edition) {
- Ok(result) => result,
- Err(_) => return None,
- }
+ konst.eval(ctx.sema.db, edition).ok()?
}
_ => return None,
};
@@ -127,12 +124,14 @@ mod tests {
("u64", "0", NUMBER),
("u128", "0", NUMBER),
("usize", "0", NUMBER),
+ ("usize", "16", NUMBER),
("i8", "0", NUMBER),
("i16", "0", NUMBER),
("i32", "0", NUMBER),
("i64", "0", NUMBER),
("i128", "0", NUMBER),
("isize", "0", NUMBER),
+ ("isize", "16", NUMBER),
("bool", "false", BOOL),
("&str", "\"str\"", STR),
("char", "'c'", CHAR),