Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/lib.rs')
-rw-r--r--crates/hir-def/src/lib.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs
index 3aaf89102f..bf265cd42e 100644
--- a/crates/hir-def/src/lib.rs
+++ b/crates/hir-def/src/lib.rs
@@ -367,20 +367,35 @@ impl ExternBlockId {
}
}
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct EnumVariantLoc {
pub id: AstId<ast::Variant>,
pub parent: EnumId,
- pub index: u32,
+ pub name: Name,
}
impl_intern!(EnumVariantId, EnumVariantLoc);
impl_loc!(EnumVariantLoc, id: Variant, parent: EnumId);
+impl EnumVariantLoc {
+ pub fn index(&self, db: &dyn DefDatabase) -> usize {
+ self.parent
+ .enum_variants(db)
+ .variants
+ .get_full(&self.name)
+ .expect("parent enum should include this variant")
+ .0
+ }
+}
+
impl EnumVariantId {
pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields {
VariantFields::of(db, self.into())
}
+ pub fn index(self, db: &dyn DefDatabase) -> usize {
+ self.loc(db).index(db)
+ }
+
pub fn fields_with_source_map(
self,
db: &dyn DefDatabase,