mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-26 11:59:49 +00:00
Don't leak rustc Layout in hir layer
This commit is contained in:
parent
3514f2f2ab
commit
1275adc200
2 changed files with 54 additions and 44 deletions
|
@ -3,8 +3,8 @@ use std::fmt::Display;
|
|||
|
||||
use either::Either;
|
||||
use hir::{
|
||||
db::HirDatabase, Adt, AsAssocItem, AttributeTemplate, CaptureKind, HasAttrs, HasCrate,
|
||||
HasSource, HirDisplay, Layout, Semantics, TypeInfo,
|
||||
Adt, AsAssocItem, AttributeTemplate, CaptureKind, HasAttrs, HasCrate, HasSource, HirDisplay,
|
||||
Layout, Semantics, TypeInfo,
|
||||
};
|
||||
use ide_db::{
|
||||
base_db::SourceDatabase,
|
||||
|
@ -401,14 +401,14 @@ pub(super) fn definition(
|
|||
hir::VariantDef::Struct(s) => Adt::from(s)
|
||||
.layout(db)
|
||||
.ok()
|
||||
.map(|layout| format!(", offset = {:#X}", layout.fields.offset(id).bytes())),
|
||||
.and_then(|layout| Some(format!(", offset = {:#X}", layout.field_offset(id)?))),
|
||||
_ => None,
|
||||
};
|
||||
let niches = niches(db, it, &layout).unwrap_or_default();
|
||||
Some(format!(
|
||||
"size = {:#X}, align = {:#X}{}{niches}",
|
||||
layout.size.bytes(),
|
||||
layout.align.abi.bytes(),
|
||||
layout.size(),
|
||||
layout.align(),
|
||||
offset.as_deref().unwrap_or_default()
|
||||
))
|
||||
}),
|
||||
|
@ -417,11 +417,7 @@ pub(super) fn definition(
|
|||
Definition::Adt(it) => label_and_layout_info_and_docs(db, it, config, |&it| {
|
||||
let layout = it.layout(db).ok()?;
|
||||
let niches = niches(db, it, &layout).unwrap_or_default();
|
||||
Some(format!(
|
||||
"size = {:#X}, align = {:#X}{niches}",
|
||||
layout.size.bytes(),
|
||||
layout.align.abi.bytes()
|
||||
))
|
||||
Some(format!("size = {:#X}, align = {:#X}{niches}", layout.size(), layout.align()))
|
||||
}),
|
||||
Definition::Variant(it) => label_value_and_layout_info_and_docs(
|
||||
db,
|
||||
|
@ -441,13 +437,13 @@ pub(super) fn definition(
|
|||
},
|
||||
|&it| {
|
||||
let (layout, tag_size) = it.layout(db).ok()?;
|
||||
let size = layout.size.bytes_usize() - tag_size;
|
||||
let size = layout.size() as usize - tag_size;
|
||||
if size == 0 {
|
||||
// There is no value in showing layout info for fieldless variants
|
||||
return None;
|
||||
}
|
||||
let niches = niches(db, it, &layout).unwrap_or_default();
|
||||
Some(format!("size = {:#X}{niches}", layout.size.bytes()))
|
||||
Some(format!("size = {:#X}{niches}", layout.size()))
|
||||
},
|
||||
),
|
||||
Definition::Const(it) => label_value_and_docs(db, it, |it| {
|
||||
|
@ -477,11 +473,7 @@ pub(super) fn definition(
|
|||
Definition::TypeAlias(it) => label_and_layout_info_and_docs(db, it, config, |&it| {
|
||||
let layout = it.ty(db).layout(db).ok()?;
|
||||
let niches = niches(db, it, &layout).unwrap_or_default();
|
||||
Some(format!(
|
||||
"size = {:#X}, align = {:#X}{niches}",
|
||||
layout.size.bytes(),
|
||||
layout.align.abi.bytes(),
|
||||
))
|
||||
Some(format!("size = {:#X}, align = {:#X}{niches}", layout.size(), layout.align(),))
|
||||
}),
|
||||
Definition::BuiltinType(it) => {
|
||||
return famous_defs
|
||||
|
@ -518,10 +510,7 @@ pub(super) fn definition(
|
|||
}
|
||||
|
||||
fn niches(db: &RootDatabase, it: impl HasCrate, layout: &Layout) -> Option<String> {
|
||||
Some(format!(
|
||||
", niches = {}",
|
||||
layout.largest_niche?.available(&*db.target_data_layout(it.krate(db).into())?)
|
||||
))
|
||||
Some(format!(", niches = {}", layout.niches(db, it.krate(db).into())?))
|
||||
}
|
||||
|
||||
fn type_info(
|
||||
|
@ -571,7 +560,7 @@ fn closure_ty(
|
|||
let layout = if config.memory_layout {
|
||||
original
|
||||
.layout(sema.db)
|
||||
.map(|x| format!(" // size = {}, align = {}", x.size.bytes(), x.align.abi.bytes()))
|
||||
.map(|x| format!(" // size = {}, align = {}", x.size(), x.align()))
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
String::default()
|
||||
|
@ -782,12 +771,7 @@ fn local(db: &RootDatabase, it: hir::Local, config: &HoverConfig) -> Option<Mark
|
|||
};
|
||||
if config.memory_layout {
|
||||
if let Ok(layout) = it.ty(db).layout(db) {
|
||||
format_to!(
|
||||
desc,
|
||||
" // size = {}, align = {}",
|
||||
layout.size.bytes(),
|
||||
layout.align.abi.bytes()
|
||||
);
|
||||
format_to!(desc, " // size = {}, align = {}", layout.size(), layout.align());
|
||||
}
|
||||
}
|
||||
markup(None, desc, None)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue