Auto merge of #13285 - Veykril:variant-body, r=Veykril

Properly support IDE functionality in enum variants
This commit is contained in:
bors 2022-09-24 00:39:34 +00:00
commit 4e7bb5e042
3 changed files with 7 additions and 3 deletions

View File

@ -198,6 +198,10 @@ fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, _: HirFileI
impl ChildBySource for DefWithBodyId {
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
let body = db.body(*self);
if let &DefWithBodyId::VariantId(v) = self {
VariantId::EnumVariantId(v).child_by_source_to(db, res, file_id)
}
for (_, def_map) in body.blocks(db) {
// All block expressions are merged into the same map, because they logically all add
// inner items to the containing `DefWithBodyId`.

View File

@ -377,10 +377,10 @@ pub fn as_def_with_body(self) -> Option<DefWithBody> {
ModuleDef::Function(it) => Some(it.into()),
ModuleDef::Const(it) => Some(it.into()),
ModuleDef::Static(it) => Some(it.into()),
ModuleDef::Variant(it) => Some(it.into()),
ModuleDef::Module(_)
| ModuleDef::Adt(_)
| ModuleDef::Variant(_)
| ModuleDef::Trait(_)
| ModuleDef::TypeAlias(_)
| ModuleDef::Macro(_)
@ -1160,7 +1160,7 @@ pub enum DefWithBody {
Const(Const),
Variant(Variant),
}
impl_from!(Function, Const, Static for DefWithBody);
impl_from!(Function, Const, Static, Variant for DefWithBody);
impl DefWithBody {
pub fn module(self, db: &dyn HirDatabase) -> Module {

View File

@ -384,7 +384,7 @@ fn container_to_def(&mut self, container: InFile<SyntaxNode>) -> Option<ChildCon
} else {
let it = ast::Variant::cast(container.value)?;
let def = self.enum_variant_to_def(InFile::new(container.file_id, it))?;
VariantId::from(def).into()
DefWithBodyId::from(def).into()
};
Some(cont)
}