Show type info on hover of enum variant fields
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user