From 8e1ba7fdab2e1d13732a30d3be339d226ec916f1 Mon Sep 17 00:00:00 2001 From: Yury Ivanou Date: Sun, 7 May 2023 19:10:01 +0300 Subject: [PATCH] Fix memory layout config not working for closures --- crates/ide/src/hover.rs | 2 +- crates/ide/src/hover/render.rs | 12 ++++++++---- crates/ide/src/hover/tests.rs | 24 +++++++++++++++++++++--- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index baaf8c80480b..b6279295ce3f 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 078a4de671e4..dc03df180ab6 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 { 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 559571a1a415..a79e47dd67d4 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]