Show type info on hover of enum variant fields

This commit is contained in:
Lukas Wirth
2022-12-09 10:09:55 +01:00
parent 6e8a54d0f6
commit e80674e6b3
5 changed files with 43 additions and 15 deletions

View File

@@ -395,17 +395,17 @@ pub(super) fn definition(
let id = it.index();
let layout = it.layout(db).ok()?;
let offset = match var_def {
hir::VariantDef::Struct(s) => {
let layout = Adt::from(s).layout(db).ok()?;
layout.fields.offset(id)
}
_ => return None,
hir::VariantDef::Struct(s) => Adt::from(s)
.layout(db)
.ok()
.map(|layout| format!(", offset = {}", layout.fields.offset(id).bytes())),
_ => None,
};
Some(format!(
"size = {}, align = {}, offset = {}",
"size = {}, align = {}{}",
layout.size.bytes(),
layout.align.abi.bytes(),
offset.bytes()
offset.as_deref().unwrap_or_default()
))
}),
Definition::Module(it) => label_and_docs(db, it),

View File

@@ -5176,6 +5176,28 @@ enum Enum {
);
}
#[test]
fn hover_record_variant_field() {
check(
r#"
enum Enum {
RecordV { field$0: u32 }
}
"#,
expect![[r#"
*field*
```rust
test::RecordV
```
```rust
field: u32 // size = 4, align = 4
```
"#]],
);
}
#[test]
fn hover_trait_impl_assoc_item_def_doc_forwarding() {
check(