diff options
| author | Lukas Wirth <me@lukaswirth.dev> | 2025-06-26 14:08:33 +0200 |
|---|---|---|
| committer | Lukas Wirth <me@lukaswirth.dev> | 2025-06-26 14:12:57 +0200 |
| commit | e019a37aa86575e5baacdde73c8f1802c088cde1 (patch) | |
| tree | f1b8f0bc9c0764a82a34797d3bd63352d2b3afba | |
| parent | 919e8ef72b438e073a1ffacdb53626dc1991b591 (diff) | |
| download | rust-e019a37aa86575e5baacdde73c8f1802c088cde1.tar.gz rust-e019a37aa86575e5baacdde73c8f1802c088cde1.zip | |
Bring back the firewall query
3 files changed, 22 insertions, 15 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/lib.rs b/src/tools/rust-analyzer/crates/hir-def/src/lib.rs index 8117b0206b1..bdf8b453e2d 100644 --- a/src/tools/rust-analyzer/crates/hir-def/src/lib.rs +++ b/src/tools/rust-analyzer/crates/hir-def/src/lib.rs @@ -257,13 +257,13 @@ impl_intern!(StructId, StructLoc, intern_struct, lookup_intern_struct); impl StructId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { - &VariantFields::query(db, self.into()).0 + VariantFields::firewall(db, self.into()) } pub fn fields_with_source_map( self, db: &dyn DefDatabase, - ) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) { + ) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) { VariantFields::query(db, self.into()) } } @@ -273,13 +273,13 @@ impl_intern!(UnionId, UnionLoc, intern_union, lookup_intern_union); impl UnionId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { - &VariantFields::query(db, self.into()).0 + VariantFields::firewall(db, self.into()) } pub fn fields_with_source_map( self, db: &dyn DefDatabase, - ) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) { + ) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) { VariantFields::query(db, self.into()) } } @@ -367,13 +367,13 @@ impl_loc!(EnumVariantLoc, id: Variant, parent: EnumId); impl EnumVariantId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { - &VariantFields::query(db, self.into()).0 + VariantFields::firewall(db, self.into()) } pub fn fields_with_source_map( self, db: &dyn DefDatabase, - ) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) { + ) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) { VariantFields::query(db, self.into()) } } @@ -1066,13 +1066,13 @@ impl_from!(EnumVariantId, StructId, UnionId for VariantId); impl VariantId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { - &VariantFields::query(db, self).0 + VariantFields::firewall(db, self) } pub fn fields_with_source_map( self, db: &dyn DefDatabase, - ) -> &(VariantFields, Arc<ExpressionStoreSourceMap>) { + ) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>) { VariantFields::query(db, self) } diff --git a/src/tools/rust-analyzer/crates/hir-def/src/signatures.rs b/src/tools/rust-analyzer/crates/hir-def/src/signatures.rs index 6e924d93a24..1958eb6c6a1 100644 --- a/src/tools/rust-analyzer/crates/hir-def/src/signatures.rs +++ b/src/tools/rust-analyzer/crates/hir-def/src/signatures.rs @@ -734,11 +734,11 @@ pub struct VariantFields { #[salsa::tracked] impl VariantFields { - #[salsa::tracked(returns(ref))] + #[salsa::tracked(returns(clone))] pub(crate) fn query( db: &dyn DefDatabase, id: VariantId, - ) -> (Self, Arc<ExpressionStoreSourceMap>) { + ) -> (Arc<Self>, Arc<ExpressionStoreSourceMap>) { let (shape, result) = match id { VariantId::EnumVariantId(id) => { let loc = id.lookup(db); @@ -775,19 +775,25 @@ impl VariantFields { } }; match result { - Some((fields, store, source_map)) => { - (VariantFields { fields, store: Arc::new(store), shape }, Arc::new(source_map)) - } + Some((fields, store, source_map)) => ( + Arc::new(VariantFields { fields, store: Arc::new(store), shape }), + Arc::new(source_map), + ), None => ( - VariantFields { + Arc::new(VariantFields { fields: Arena::default(), store: ExpressionStore::empty_singleton(), shape, - }, + }), ExpressionStoreSourceMap::empty_singleton(), ), } } + + #[salsa::tracked(returns(deref))] + pub(crate) fn firewall(db: &dyn DefDatabase, id: VariantId) -> Arc<Self> { + Self::query(db, id).0 + } } impl VariantFields { diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/tests/incremental.rs b/src/tools/rust-analyzer/crates/hir-ty/src/tests/incremental.rs index 0262390651e..0377ce95f19 100644 --- a/src/tools/rust-analyzer/crates/hir-ty/src/tests/incremental.rs +++ b/src/tools/rust-analyzer/crates/hir-ty/src/tests/incremental.rs @@ -596,6 +596,7 @@ fn main() { "struct_signature_with_source_map_shim", "generic_predicates_shim", "value_ty_shim", + "firewall_", "query_", "lang_item", "inherent_impls_in_crate_shim", |
