Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide/src/hover/render.rs9
-rw-r--r--crates/ide/src/hover/tests.rs34
2 files changed, 40 insertions, 3 deletions
diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs
index 33a8a4f695..e0a9907a41 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 6e2ebd7967..30e64f450a 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -1624,6 +1624,28 @@ impl Thing {
```
```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,
+ }
```
"#]],
);