diff options
| author | bors <bors@rust-lang.org> | 2022-09-24 00:39:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-24 00:39:34 +0000 |
| commit | 4e7bb5e042e51f141a4b3b50a3240f4555ebd3ca (patch) | |
| tree | ab7e5b5e0e76d5fc47f56d338c11f5c1d56147d2 | |
| parent | 14400785acd92d6f1b8ec52179a23839dfe542a9 (diff) | |
| parent | 7ec9ffa3251504da334a29f0e4331378bc26c54a (diff) | |
| download | rust-4e7bb5e042e51f141a4b3b50a3240f4555ebd3ca.tar.gz rust-4e7bb5e042e51f141a4b3b50a3240f4555ebd3ca.zip | |
Auto merge of #13285 - Veykril:variant-body, r=Veykril
Properly support IDE functionality in enum variants
| -rw-r--r-- | crates/hir-def/src/child_by_source.rs | 4 | ||||
| -rw-r--r-- | crates/hir/src/lib.rs | 4 | ||||
| -rw-r--r-- | crates/hir/src/semantics/source_to_def.rs | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/crates/hir-def/src/child_by_source.rs b/crates/hir-def/src/child_by_source.rs index 5b1435e8f44..bb13165257b 100644 --- a/crates/hir-def/src/child_by_source.rs +++ b/crates/hir-def/src/child_by_source.rs @@ -198,6 +198,10 @@ impl ChildBySource for EnumId { 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`. diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 1c48d2ff081..9fcaac85bce 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -377,10 +377,10 @@ impl ModuleDef { 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 { diff --git a/crates/hir/src/semantics/source_to_def.rs b/crates/hir/src/semantics/source_to_def.rs index 87e22c2138b..fa45e3c12eb 100644 --- a/crates/hir/src/semantics/source_to_def.rs +++ b/crates/hir/src/semantics/source_to_def.rs @@ -384,7 +384,7 @@ impl SourceToDefCtx<'_, '_> { } 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) } |
