fix: Use render_eval for all builtins
This commit is contained in:
parent
8103a10a78
commit
2d4cb780b6
@ -66,8 +66,6 @@ fn eval_and_inline_recursively(
|
|||||||
(true, ast::Expr::BlockExpr(block)) if block.is_standalone() => {
|
(true, ast::Expr::BlockExpr(block)) if block.is_standalone() => {
|
||||||
eval_and_inline_recursively(ctx, konst, &block.tail_expr()?, fuel - 1)
|
eval_and_inline_recursively(ctx, konst, &block.tail_expr()?, fuel - 1)
|
||||||
}
|
}
|
||||||
(_, ast::Expr::Literal(lit)) => Some(lit.to_string()),
|
|
||||||
|
|
||||||
// NOTE: For some expressions, `render_eval` will crash.
|
// NOTE: For some expressions, `render_eval` will crash.
|
||||||
// e.g. `{ &[&[&[&[&[&[10, 20, 30]]]]]] }` will fail for `render_eval`.
|
// e.g. `{ &[&[&[&[&[&[10, 20, 30]]]]]] }` will fail for `render_eval`.
|
||||||
//
|
//
|
||||||
@ -85,6 +83,7 @@ fn eval_and_inline_recursively(
|
|||||||
// > const A: &[u32] = { &[10] }; OK because we inline ref expression.
|
// > const A: &[u32] = { &[10] }; OK because we inline ref expression.
|
||||||
// > const B: &[u32] = { { &[10] } }; ERROR because we evaluate block.
|
// > const B: &[u32] = { { &[10] } }; ERROR because we evaluate block.
|
||||||
(_, ast::Expr::BlockExpr(_))
|
(_, ast::Expr::BlockExpr(_))
|
||||||
|
| (_, ast::Expr::Literal(_))
|
||||||
| (_, ast::Expr::RefExpr(_))
|
| (_, ast::Expr::RefExpr(_))
|
||||||
| (_, ast::Expr::ArrayExpr(_))
|
| (_, ast::Expr::ArrayExpr(_))
|
||||||
| (_, ast::Expr::TupleExpr(_))
|
| (_, ast::Expr::TupleExpr(_))
|
||||||
@ -130,7 +129,7 @@ fn validate_type_recursively(
|
|||||||
validate_type_recursively(ctx, ty.as_slice().as_ref(), false, fuel - 1)
|
validate_type_recursively(ctx, ty.as_slice().as_ref(), false, fuel - 1)
|
||||||
}
|
}
|
||||||
(_, Some(ty)) => match ty.as_builtin() {
|
(_, Some(ty)) => match ty.as_builtin() {
|
||||||
// `const A: str` is not correct, `const A: &builtin` is always correct.
|
// `const A: str` is not correct, but `const A: &builtin` is.
|
||||||
Some(builtin) if refed || (!refed && !builtin.is_str()) => Some(()),
|
Some(builtin) if refed || (!refed && !builtin.is_str()) => Some(()),
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
@ -438,20 +437,35 @@ fn a() { (1, 5) }
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: These won't work with `konst.render_eval(ctx.sema.db)`
|
// FIXME: These won't work with `konst.render_eval(ctx.sema.db)`
|
||||||
// #[test]
|
#[test]
|
||||||
// fn inline_const_as_literal_block_slice() {
|
fn inline_const_as_literal_block_slice() {
|
||||||
// check_assist(
|
check_assist(
|
||||||
// inline_const_as_literal,
|
inline_const_as_literal,
|
||||||
// r#"
|
r#"
|
||||||
// const ABC: &[&[&[&[&[&[i32]]]]]] = { &[&[&[&[&[&[10, 20, 30]]]]]] };
|
const ABC: &[&[&[&[&[&[i32]]]]]] = { &[&[&[&[&[&[10, 20, 30]]]]]] };
|
||||||
// fn a() { A$0BC }
|
fn a() { A$0BC }
|
||||||
// "#,
|
"#,
|
||||||
// r#"
|
r#"
|
||||||
// const ABC: &[&[&[&[&[&[i32]]]]]] = { &[&[&[&[&[&[10, 20, 30]]]]]] };
|
const ABC: &[&[&[&[&[&[i32]]]]]] = { &[&[&[&[&[&[10, 20, 30]]]]]] };
|
||||||
// fn a() { &[&[&[&[&[&[10, 20, 30]]]]]] }
|
fn a() { &[&[&[&[&[&[10, 20, 30]]]]]] }
|
||||||
// "#,
|
"#,
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn inline_const_as_literal_block_slice_single() {
|
||||||
|
check_assist(
|
||||||
|
inline_const_as_literal,
|
||||||
|
r#"
|
||||||
|
const ABC: [i32; 1] = { [10] };
|
||||||
|
fn a() { A$0BC }
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
const ABC: [i32; 1] = { [10] };
|
||||||
|
fn a() { [10] }
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// #[test]
|
// #[test]
|
||||||
// fn inline_const_as_literal_block_array() {
|
// fn inline_const_as_literal_block_array() {
|
||||||
|
Loading…
Reference in New Issue
Block a user