Skip to content

Commit 448fee7

Browse files
committed
Auto merge of #13285 - Veykril:variant-body, r=Veykril
Properly support IDE functionality in enum variants
2 parents 1440078 + 7ec9ffa commit 448fee7

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

crates/hir-def/src/child_by_source.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ impl ChildBySource for EnumId {
198198
impl ChildBySource for DefWithBodyId {
199199
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
200200
let body = db.body(*self);
201+
if let &DefWithBodyId::VariantId(v) = self {
202+
VariantId::EnumVariantId(v).child_by_source_to(db, res, file_id)
203+
}
204+
201205
for (_, def_map) in body.blocks(db) {
202206
// All block expressions are merged into the same map, because they logically all add
203207
// inner items to the containing `DefWithBodyId`.

crates/hir/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,10 @@ impl ModuleDef {
377377
ModuleDef::Function(it) => Some(it.into()),
378378
ModuleDef::Const(it) => Some(it.into()),
379379
ModuleDef::Static(it) => Some(it.into()),
380+
ModuleDef::Variant(it) => Some(it.into()),
380381

381382
ModuleDef::Module(_)
382383
| ModuleDef::Adt(_)
383-
| ModuleDef::Variant(_)
384384
| ModuleDef::Trait(_)
385385
| ModuleDef::TypeAlias(_)
386386
| ModuleDef::Macro(_)
@@ -1160,7 +1160,7 @@ pub enum DefWithBody {
11601160
Const(Const),
11611161
Variant(Variant),
11621162
}
1163-
impl_from!(Function, Const, Static for DefWithBody);
1163+
impl_from!(Function, Const, Static, Variant for DefWithBody);
11641164

11651165
impl DefWithBody {
11661166
pub fn module(self, db: &dyn HirDatabase) -> Module {

crates/hir/src/semantics/source_to_def.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ impl SourceToDefCtx<'_, '_> {
384384
} else {
385385
let it = ast::Variant::cast(container.value)?;
386386
let def = self.enum_variant_to_def(InFile::new(container.file_id, it))?;
387-
VariantId::from(def).into()
387+
DefWithBodyId::from(def).into()
388388
};
389389
Some(cont)
390390
}

0 commit comments

Comments
 (0)