Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/signatures.rs')
| -rw-r--r-- | crates/hir-def/src/signatures.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/crates/hir-def/src/signatures.rs b/crates/hir-def/src/signatures.rs index b7d29f54d0..c808079011 100644 --- a/crates/hir-def/src/signatures.rs +++ b/crates/hir-def/src/signatures.rs @@ -884,11 +884,13 @@ pub struct EnumVariants { pub variants: Box<[(EnumVariantId, Name, FieldsShape)]>, } +#[salsa::tracked] impl EnumVariants { - pub(crate) fn enum_variants_query( + #[salsa::tracked(returns(ref))] + pub(crate) fn of( db: &dyn DefDatabase, e: EnumId, - ) -> (Arc<EnumVariants>, Option<Arc<ThinVec<InactiveEnumVariantCode>>>) { + ) -> (EnumVariants, Option<ThinVec<InactiveEnumVariantCode>>) { let loc = e.lookup(db); let source = loc.source(db); let ast_id_map = db.ast_id_map(source.file_id); @@ -898,7 +900,7 @@ impl EnumVariants { let cfg_options = loc.container.krate.cfg_options(db); let mut index = 0; let Some(variants) = source.value.variant_list() else { - return (Arc::new(EnumVariants { variants: Box::default() }), None); + return (EnumVariants { variants: Box::default() }, None); }; let variants = variants .variants() @@ -926,12 +928,11 @@ impl EnumVariants { }) .collect(); - ( - Arc::new(EnumVariants { variants }), - diagnostics.is_empty().not().then(|| Arc::new(diagnostics)), - ) + (EnumVariants { variants }, diagnostics.is_empty().not().then_some(diagnostics)) } +} +impl EnumVariants { pub fn variant(&self, name: &Name) -> Option<EnumVariantId> { self.variants.iter().find_map(|(v, n, _)| if n == name { Some(*v) } else { None }) } |