Unnamed repository; edit this file 'description' to name the repository.
Fix memory layout config not working for closures
Yury Ivanou 2023-05-07
parent 98a4c50 · commit 8e1ba7f
-rw-r--r--crates/ide/src/hover.rs2
-rw-r--r--crates/ide/src/hover/render.rs12
-rw-r--r--crates/ide/src/hover/tests.rs24
3 files changed, 30 insertions, 8 deletions
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index baaf8c8048..b6279295ce 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -227,7 +227,7 @@ fn hover_simple(
return None;
}
let c = token.parent().and_then(|x| x.parent()).and_then(ast::ClosureExpr::cast)?;
- render::closure_expr(sema, c)
+ render::closure_expr(sema, config, c)
})
});
diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs
index 078a4de671..dc03df180a 100644
--- a/crates/ide/src/hover/render.rs
+++ b/crates/ide/src/hover/render.rs
@@ -43,13 +43,17 @@ pub(super) fn type_info_of(
pub(super) fn closure_expr(
sema: &Semantics<'_, RootDatabase>,
+ config: &HoverConfig,
c: ast::ClosureExpr,
) -> Option<HoverResult> {
let ty = &sema.type_of_expr(&c.into())?.original;
- let layout = ty
- .layout(sema.db)
- .map(|x| format!(" // size = {}, align = {}", x.size.bytes(), x.align.abi.bytes()))
- .unwrap_or_default();
+ let layout = if config.memory_layout {
+ ty.layout(sema.db)
+ .map(|x| format!(" // size = {}, align = {}", x.size.bytes(), x.align.abi.bytes()))
+ .unwrap_or_default()
+ } else {
+ String::default()
+ };
let c = ty.as_closure()?;
let mut captures = c
.captured_items(sema.db)
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index 559571a1a4..a79e47dd67 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -1766,9 +1766,7 @@ pub fn fo$0o() {}
#[test]
fn test_hover_no_memory_layout() {
check_hover_no_memory_layout(
- r#"
-struct Foo { fiel$0d_a: u8, field_b: i32, field_c: i16 }
-"#,
+ r#"struct Foo { fiel$0d_a: u8, field_b: i32, field_c: i16 }"#,
expect![[r#"
*field_a*
@@ -1781,6 +1779,26 @@ struct Foo { fiel$0d_a: u8, field_b: i32, field_c: i16 }
```
"#]],
);
+
+ check_hover_no_memory_layout(
+ r#"
+//- minicore: copy
+fn main() {
+ let x = 2;
+ let y = $0|z| x + z;
+}
+"#,
+ expect![[r#"
+ *|*
+ ```rust
+ {closure#0}
+ impl Fn(i32) -> i32
+ ```
+
+ ## Captures
+ * `x` by immutable borrow
+ "#]],
+ );
}
#[test]