From cf905cff7613fc2425244facb4849b7f23208ef5 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 16 Jan 2024 10:46:53 +0100 Subject: [PATCH] Put layout comment to the top of hovers --- crates/ide/src/hover/render.rs | 6 +- crates/ide/src/hover/tests.rs | 159 ++++++++++++++++++++++----------- 2 files changed, 108 insertions(+), 57 deletions(-) diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs index ee2f15c5a6..9d449bd18e 100644 --- a/crates/ide/src/hover/render.rs +++ b/crates/ide/src/hover/render.rs @@ -463,9 +463,9 @@ pub(super) fn definition( }; let label = match (value, layout_info) { - (Some(value), Some(layout_info)) => format!("{label} = {value}{layout_info}"), + (Some(value), Some(layout_info)) => format!("{layout_info}\n{label} = {value}"), (Some(value), None) => format!("{label} = {value}"), - (None, Some(layout_info)) => format!("{label}{layout_info}"), + (None, Some(layout_info)) => format!("{layout_info}\n{label}"), (None, None) => label, }; @@ -617,8 +617,6 @@ fn render_memory_layout( offset: impl FnOnce(&Layout) -> Option, tag: impl FnOnce(&Layout) -> Option, ) -> Option { - // field - let config = config?; let layout = layout().ok()?; diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs index d5ec336fc7..8ef8f29576 100644 --- a/crates/ide/src/hover/tests.rs +++ b/crates/ide/src/hover/tests.rs @@ -157,7 +157,8 @@ fn foo() { *local* ```rust - let local: i32 // size = 4, align = 4 + // size = 4, align = 4 + let local: i32 ``` "#]], ); @@ -433,7 +434,8 @@ fn main() { *iter* ```rust - let mut iter: Iter>, impl Fn(&mut u32, &u32, &mut u32) -> Option, u32>> // size = 8, align = 4 + // size = 8, align = 4 + let mut iter: Iter>, impl Fn(&mut u32, &u32, &mut u32) -> Option, u32>> ``` "#]], ); @@ -674,7 +676,8 @@ struct Foo { fiel$0d_a: u8, field_b: i32, field_c: i16 } ``` ```rust - field_a: u8 // size = 1, align = 1, offset = 6 + // size = 1, align = 1, offset = 6 + field_a: u8 ``` "#]], ); @@ -699,7 +702,8 @@ fn main() { ``` ```rust - field_a: u32 // size = 4, align = 4, offset = 0 + // size = 4, align = 4, offset = 0 + field_a: u32 ``` "#]], ); @@ -721,7 +725,8 @@ fn main() { ``` ```rust - field_a: u32 // size = 4, align = 4, offset = 0 + // size = 4, align = 4, offset = 0 + field_a: u32 ``` "#]], ); @@ -848,7 +853,8 @@ fn main() { *zz* ```rust - let zz: Test // size = 8, align = 4 + // size = 8, align = 4 + let zz: Test ``` "#]], ); @@ -899,7 +905,8 @@ fn main() { let b$0ar = Some(12); } *bar* ```rust - let bar: Option // size = 4, align = 4 + // size = 4, align = 4 + let bar: Option ``` "#]], ); @@ -968,7 +975,8 @@ fn hover_for_local_variable() { *foo* ```rust - foo: i32 // size = 4, align = 4 + // size = 4, align = 4 + foo: i32 ``` "#]], ) @@ -982,7 +990,8 @@ fn hover_for_local_variable_pat() { *foo* ```rust - foo: i32 // size = 4, align = 4 + // size = 4, align = 4 + foo: i32 ``` "#]], ) @@ -996,7 +1005,8 @@ fn hover_local_var_edge() { *foo* ```rust - foo: i32 // size = 4, align = 4 + // size = 4, align = 4 + foo: i32 ``` "#]], ) @@ -1010,7 +1020,8 @@ fn hover_for_param_edge() { *foo* ```rust - foo: i32 // size = 4, align = 4 + // size = 4, align = 4 + foo: i32 ``` "#]], ) @@ -1054,7 +1065,8 @@ fn main() { let foo_$0test = Thing::new(); } *foo_test* ```rust - let foo_test: Thing // size = 4, align = 4 + // size = 4, align = 4 + let foo_test: Thing ``` "#]], ) @@ -1222,7 +1234,8 @@ fn y() { *x* ```rust - let x: i32 // size = 4, align = 4 + // size = 4, align = 4 + let x: i32 ``` "#]], ) @@ -1352,7 +1365,8 @@ fn foo(bar:u32) { let a = id!(ba$0r); } *bar* ```rust - bar: u32 // size = 4, align = 4 + // size = 4, align = 4 + bar: u32 ``` "#]], ); @@ -1370,7 +1384,8 @@ fn foo(bar:u32) { let a = id!(ba$0r); } *bar* ```rust - bar: u32 // size = 4, align = 4 + // size = 4, align = 4 + bar: u32 ``` "#]], ); @@ -1619,7 +1634,8 @@ fn test_hover_function_pointer_show_identifiers() { ``` ```rust - type foo = fn(a: i32, b: i32) -> i32 // size = 8, align = 8, niches = 1 + // size = 8, align = 8, niches = 1 + type foo = fn(a: i32, b: i32) -> i32 ``` "#]], ); @@ -1637,7 +1653,8 @@ fn test_hover_function_pointer_no_identifier() { ``` ```rust - type foo = fn(i32, i32) -> i32 // size = 8, align = 8, niches = 1 + // size = 8, align = 8, niches = 1 + type foo = fn(i32, i32) -> i32 ``` "#]], ); @@ -1783,7 +1800,8 @@ fn foo() { let bar = Ba$0r; } ``` ```rust - struct Bar // size = 0, align = 1 + // size = 0, align = 1 + struct Bar ``` --- @@ -1819,7 +1837,8 @@ fn foo() { let bar = Ba$0r; } ``` ```rust - struct Bar // size = 0, align = 1 + // size = 0, align = 1 + struct Bar ``` --- @@ -1848,7 +1867,8 @@ fn foo() { let bar = Ba$0r; } ``` ```rust - struct Bar // size = 0, align = 1 + // size = 0, align = 1 + struct Bar ``` --- @@ -1876,7 +1896,8 @@ pub struct B$0ar ``` ```rust - pub struct Bar // size = 0, align = 1 + // size = 0, align = 1 + pub struct Bar ``` --- @@ -1903,7 +1924,8 @@ pub struct B$0ar ``` ```rust - pub struct Bar // size = 0, align = 1 + // size = 0, align = 1 + pub struct Bar ``` --- @@ -1992,7 +2014,8 @@ fn test_hover_layout_of_variant() { ``` ```rust - Variant1(u8, u16) // size = 4, align = 2 + // size = 4, align = 2 + Variant1(u8, u16) ``` "#]], ); @@ -2013,10 +2036,11 @@ fn test_hover_layout_of_enum() { ``` ```rust + // size = 16 (0x10), align = 8, niches = 254 enum Foo { Variant1(u8, u16), Variant2(i32, u8, i64), - } // size = 16 (0x10), align = 8, niches = 254 + } ``` "#]], ); @@ -3316,7 +3340,8 @@ fn main() { *f* ```rust - f: &i32 // size = 8, align = 8, niches = 1 + // size = 8, align = 8, niches = 1 + f: &i32 ``` --- @@ -3325,7 +3350,8 @@ fn main() { ``` ```rust - f: i32 // size = 4, align = 4, offset = 0 + // size = 4, align = 4, offset = 0 + f: i32 ``` "#]], ); @@ -3409,7 +3435,8 @@ fn main() { *value* ```rust - let value: Const<1> // size = 0, align = 1 + // size = 0, align = 1 + let value: Const<1> ``` "#]], ); @@ -3429,7 +3456,8 @@ fn main() { *value* ```rust - let value: Const<0> // size = 0, align = 1 + // size = 0, align = 1 + let value: Const<0> ``` "#]], ); @@ -3449,7 +3477,8 @@ fn main() { *value* ```rust - let value: Const<-1> // size = 0, align = 1 + // size = 0, align = 1 + let value: Const<-1> ``` "#]], ); @@ -3469,7 +3498,8 @@ fn main() { *value* ```rust - let value: Const // size = 0, align = 1 + // size = 0, align = 1 + let value: Const ``` "#]], ); @@ -3489,7 +3519,8 @@ fn main() { *value* ```rust - let value: Const<'🦀'> // size = 0, align = 1 + // size = 0, align = 1 + let value: Const<'🦀'> ``` "#]], ); @@ -3508,7 +3539,8 @@ impl Foo { *self* ```rust - self: &Foo // size = 8, align = 8, niches = 1 + // size = 8, align = 8, niches = 1 + self: &Foo ``` "#]], ); @@ -3528,7 +3560,8 @@ impl Foo { *self* ```rust - self: Arc // size = 0, align = 1 + // size = 0, align = 1 + self: Arc ``` "#]], ); @@ -3913,7 +3946,8 @@ type Fo$0o2 = Foo<2>; ``` ```rust - type Foo2 = Foo<2> // size = 0, align = 1 + // size = 0, align = 1 + type Foo2 = Foo<2> ``` "#]], ); @@ -3955,7 +3989,8 @@ enum E { ``` ```rust - A = 8 // size = 1, align = 1 + // size = 1, align = 1 + A = 8 ``` --- @@ -3980,7 +4015,8 @@ enum E { ``` ```rust - A = 12 (0xC) // size = 1, align = 1 + // size = 1, align = 1 + A = 12 (0xC) ``` --- @@ -4006,7 +4042,8 @@ enum E { ``` ```rust - B = 2 // size = 1, align = 1 + // size = 1, align = 1 + B = 2 ``` --- @@ -4032,7 +4069,8 @@ enum E { ``` ```rust - B = 5 // size = 1, align = 1 + // size = 1, align = 1 + B = 5 ``` --- @@ -4838,7 +4876,8 @@ fn foo(e: E) { ``` ```rust - A = 3 // size = 0, align = 1 + // size = 0, align = 1 + A = 3 ``` --- @@ -4860,7 +4899,8 @@ fn main() { *tile4* ```rust - let tile4: [u32; 8] // size = 32 (0x20), align = 4 + // size = 32 (0x20), align = 4 + let tile4: [u32; 8] ``` "#]], ); @@ -5096,7 +5136,8 @@ pub fn gimme() -> theitem::TheItem { ``` ```rust - pub struct TheItem // size = 0, align = 1 + // size = 0, align = 1 + pub struct TheItem ``` --- @@ -5244,7 +5285,8 @@ mod string { ``` ```rust - struct String // size = 0, align = 1 + // size = 0, align = 1 + struct String ``` --- @@ -5921,7 +5963,8 @@ foo_macro!( ``` ```rust - pub struct Foo // size = 0, align = 1 + // size = 0, align = 1 + pub struct Foo ``` --- @@ -5946,7 +5989,8 @@ pub struct Foo(i32); ``` ```rust - pub struct Foo(i32); // size = 4, align = 4 + // size = 4, align = 4 + pub struct Foo(i32); ``` --- @@ -6045,7 +6089,8 @@ enum Enum { ``` ```rust - RecordV { field: u32 } // size = 4, align = 4 + // size = 4, align = 4 + RecordV { field: u32 } ``` "#]], ); @@ -6067,7 +6112,8 @@ enum Enum { ``` ```rust - field: u32 // size = 4, align = 4 + // size = 4, align = 4 + field: u32 ``` "#]], ); @@ -6569,7 +6615,8 @@ fn test() { ``` ```rust - f: u32 // size = 4, align = 4, offset = 0 + // size = 4, align = 4, offset = 0 + f: u32 ``` "#]], ); @@ -6588,7 +6635,8 @@ fn test() { *s* ```rust - let s: S // size = 0, align = 1 + // size = 0, align = 1 + let s: S ``` "#]], ); @@ -6608,7 +6656,8 @@ fn test() { *foo* ```rust - let foo: i32 // size = 4, align = 4 + // size = 4, align = 4 + let foo: i32 ``` "#]], ); @@ -6628,7 +6677,8 @@ format_args!("{aaaaa$0}"); *aaaaa* ```rust - let aaaaa: &str // size = 16 (0x10), align = 8, niches = 1 + // size = 16 (0x10), align = 8, niches = 1 + let aaaaa: &str ``` "#]], ); @@ -6648,7 +6698,8 @@ format_args!("{$0aaaaa}"); *aaaaa* ```rust - let aaaaa: &str // size = 16 (0x10), align = 8, niches = 1 + // size = 16 (0x10), align = 8, niches = 1 + let aaaaa: &str ``` "#]], ); @@ -6668,7 +6719,8 @@ format_args!(r"{$0aaaaa}"); *aaaaa* ```rust - let aaaaa: &str // size = 16 (0x10), align = 8, niches = 1 + // size = 16 (0x10), align = 8, niches = 1 + let aaaaa: &str ``` "#]], ); @@ -6693,7 +6745,8 @@ foo!(r"{$0aaaaa}"); *aaaaa* ```rust - let aaaaa: &str // size = 16 (0x10), align = 8, niches = 1 + // size = 16 (0x10), align = 8, niches = 1 + let aaaaa: &str ``` "#]], );