diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs index 33a8a4f695f4..e0a9907a4138 100644 --- a/crates/ide/src/hover/render.rs +++ b/crates/ide/src/hover/render.rs @@ -413,6 +413,15 @@ pub(super) fn definition( Definition::Adt(adt) => { adt.display_limited(db, config.max_adt_fields_or_variants_count).to_string() } + Definition::SelfType(impl_def) => { + let self_ty = &impl_def.self_ty(db); + match self_ty.as_adt() { + Some(adt) => { + adt.display_limited(db, config.max_adt_fields_or_variants_count).to_string() + } + None => self_ty.display(db).to_string(), + } + } _ => def.label(db), }; let docs = def.docs(db, famous_defs); diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs index 2055bbfe4f1a..0b0ad4b95bb1 100644 --- a/crates/ide/src/hover/tests.rs +++ b/crates/ide/src/hover/tests.rs @@ -1623,6 +1623,28 @@ impl Thing { test ``` + ```rust + struct Thing { + x: u32, + } + ``` + "#]], + ); + check_hover_adt_fields_or_variants_limit( + None, + r#" +struct Thing { x: u32 } +impl Thing { + fn new() -> Self { Self$0 { x: 0 } } +} +"#, + expect![[r#" + *Self* + + ```rust + test + ``` + ```rust struct Thing ``` @@ -1643,7 +1665,9 @@ impl Thing { ``` ```rust - struct Thing + struct Thing { + x: u32, + } ``` "#]], ); @@ -1662,7 +1686,9 @@ impl Thing { ``` ```rust - enum Thing + enum Thing { + A, + } ``` "#]], ); @@ -1681,7 +1707,9 @@ impl Thing { ``` ```rust - enum Thing + enum Thing { + A, + } ``` "#]], );