mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 06:11:35 +00:00
Show type info on hover of enum variant fields
This commit is contained in:
parent
6e8a54d0f6
commit
e80674e6b3
5 changed files with 43 additions and 15 deletions
|
@ -8,7 +8,7 @@ use hir_def::{
|
|||
AdtId, EnumVariantId, LocalEnumVariantId, VariantId,
|
||||
};
|
||||
use la_arena::RawIdx;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use smallvec::SmallVec;
|
||||
|
||||
use crate::{db::HirDatabase, lang_items::is_unsafe_cell, layout::field_ty, Substitution};
|
||||
|
||||
|
@ -34,13 +34,13 @@ pub fn layout_of_adt_query(
|
|||
let (variants, is_enum, is_union, repr) = match def {
|
||||
AdtId::StructId(s) => {
|
||||
let data = db.struct_data(s);
|
||||
let mut r = IndexVec::new();
|
||||
let mut r = SmallVec::<[_; 1]>::new();
|
||||
r.push(handle_variant(s.into(), &data.variant_data)?);
|
||||
(r, false, false, data.repr.unwrap_or_default())
|
||||
}
|
||||
AdtId::UnionId(id) => {
|
||||
let data = db.union_data(id);
|
||||
let mut r = IndexVec::new();
|
||||
let mut r = SmallVec::new();
|
||||
r.push(handle_variant(id.into(), &data.variant_data)?);
|
||||
(r, false, true, data.repr.unwrap_or_default())
|
||||
}
|
||||
|
@ -55,11 +55,12 @@ pub fn layout_of_adt_query(
|
|||
&v.variant_data,
|
||||
)
|
||||
})
|
||||
.collect::<Result<IndexVec<RustcEnumVariantIdx, _>, _>>()?;
|
||||
.collect::<Result<SmallVec<_>, _>>()?;
|
||||
(r, true, false, data.repr.unwrap_or_default())
|
||||
}
|
||||
};
|
||||
let variants = variants.iter().map(|x| x.iter().collect::<Vec<_>>()).collect::<Vec<_>>();
|
||||
let variants =
|
||||
variants.iter().map(|x| x.iter().collect::<Vec<_>>()).collect::<SmallVec<[_; 1]>>();
|
||||
let variants = variants.iter().map(|x| x.iter().collect()).collect();
|
||||
if is_union {
|
||||
cx.layout_of_union(&repr, &variants).ok_or(LayoutError::Unknown)
|
||||
|
|
|
@ -6,7 +6,7 @@ use hir_def::layout::TargetDataLayout;
|
|||
|
||||
use crate::db::HirDatabase;
|
||||
|
||||
use super::{AbiAndPrefAlign, AddressSpace, Align, Endian, Integer, Size};
|
||||
use hir_def::layout::{AbiAndPrefAlign, AddressSpace, Align, Endian, Integer, Size};
|
||||
|
||||
pub fn current_target_data_layout_query(db: &dyn HirDatabase) -> Arc<TargetDataLayout> {
|
||||
let crate_graph = db.crate_graph();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue