about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYury Ivanou <lumenian@gmail.com>2023-05-07 19:10:01 +0300
committerYury Ivanou <lumenian@gmail.com>2023-05-07 19:10:01 +0300
commit8e1ba7fdab2e1d13732a30d3be339d226ec916f1 (patch)
tree306db7abd0d2777473c56cfec44f410983d3fdf4
parent98a4c5049f69cc3ae3081e8541c63c34b13038a3 (diff)
downloadrust-8e1ba7fdab2e1d13732a30d3be339d226ec916f1.tar.gz
rust-8e1ba7fdab2e1d13732a30d3be339d226ec916f1.zip
Fix memory layout config not working for closures
-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 baaf8c80480..b6279295ce3 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 078a4de671e..dc03df180ab 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 559571a1a41..a79e47dd67d 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]