Skip to content

Commit 12f8193

Browse files
committed
Idiomatic salsa use for impl items query
1 parent 1b3c370 commit 12f8193

File tree

11 files changed

+40
-41
lines changed

11 files changed

+40
-41
lines changed

src/tools/rust-analyzer/crates/hir-def/src/db.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ use crate::{
2525
import_map::ImportMap,
2626
item_tree::{ItemTree, file_item_tree_query},
2727
lang_item::{self, LangItem},
28-
nameres::{
29-
assoc::{ImplItems, TraitItems},
30-
crate_def_map,
31-
diagnostics::DefDiagnostics,
32-
},
28+
nameres::{assoc::TraitItems, crate_def_map, diagnostics::DefDiagnostics},
3329
signatures::{
3430
ConstSignature, EnumSignature, FunctionSignature, ImplSignature, StaticSignature,
3531
StructSignature, TraitAliasSignature, TraitSignature, TypeAliasSignature, UnionSignature,
@@ -120,13 +116,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
120116
id: VariantId,
121117
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>);
122118

123-
#[salsa::transparent]
124-
#[salsa::invoke(ImplItems::impl_items_query)]
125-
fn impl_items(&self, e: ImplId) -> Arc<ImplItems>;
126-
127-
#[salsa::invoke(ImplItems::impl_items_with_diagnostics_query)]
128-
fn impl_items_with_diagnostics(&self, e: ImplId) -> (Arc<ImplItems>, DefDiagnostics);
129-
130119
#[salsa::transparent]
131120
#[salsa::invoke(TraitItems::trait_items_query)]
132121
fn trait_items(&self, e: TraitId) -> Arc<TraitItems>;

src/tools/rust-analyzer/crates/hir-def/src/lang_item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangIt
9696
for (_, module_data) in crate_def_map.modules() {
9797
for impl_def in module_data.scope.impls() {
9898
lang_items.collect_lang_item(db, impl_def, LangItemTarget::ImplDef);
99-
for &(_, assoc) in db.impl_items(impl_def).items.iter() {
99+
for &(_, assoc) in impl_def.impl_items(db).items.iter() {
100100
match assoc {
101101
AssocItemId::FunctionId(f) => {
102102
lang_items.collect_lang_item(db, f, LangItemTarget::Function)

src/tools/rust-analyzer/crates/hir-def/src/lib.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ use crate::{
8888
builtin_type::BuiltinType,
8989
db::DefDatabase,
9090
hir::generics::{LocalLifetimeParamId, LocalTypeOrConstParamId},
91-
nameres::{LocalDefMap, block_def_map, crate_def_map, crate_local_def_map},
91+
nameres::{
92+
LocalDefMap, assoc::ImplItems, block_def_map, crate_def_map, crate_local_def_map,
93+
diagnostics::DefDiagnostics,
94+
},
9295
signatures::{EnumVariants, InactiveEnumVariantCode, VariantFields},
9396
};
9497

@@ -287,6 +290,18 @@ impl_intern!(TypeAliasId, TypeAliasLoc, intern_type_alias, lookup_intern_type_al
287290
type ImplLoc = ItemLoc<ast::Impl>;
288291
impl_intern!(ImplId, ImplLoc, intern_impl, lookup_intern_impl);
289292

293+
impl ImplId {
294+
#[inline]
295+
pub fn impl_items(self, db: &dyn DefDatabase) -> &ImplItems {
296+
&self.impl_items_with_diagnostics(db).0
297+
}
298+
299+
#[inline]
300+
pub fn impl_items_with_diagnostics(self, db: &dyn DefDatabase) -> &(ImplItems, DefDiagnostics) {
301+
ImplItems::of(db, self)
302+
}
303+
}
304+
290305
type UseLoc = ItemLoc<ast::Use>;
291306
impl_intern!(UseId, UseLoc, intern_use, lookup_intern_use);
292307

src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,10 @@ pub struct ImplItems {
100100
pub macro_calls: ThinVec<(AstId<ast::Item>, MacroCallId)>,
101101
}
102102

103+
#[salsa::tracked]
103104
impl ImplItems {
104-
#[inline]
105-
pub(crate) fn impl_items_query(db: &dyn DefDatabase, id: ImplId) -> Arc<ImplItems> {
106-
db.impl_items_with_diagnostics(id).0
107-
}
108-
109-
pub(crate) fn impl_items_with_diagnostics_query(
110-
db: &dyn DefDatabase,
111-
id: ImplId,
112-
) -> (Arc<ImplItems>, DefDiagnostics) {
105+
#[salsa::tracked(returns(ref))]
106+
pub fn of(db: &dyn DefDatabase, id: ImplId) -> (ImplItems, DefDiagnostics) {
113107
let _p = tracing::info_span!("impl_items_with_diagnostics_query").entered();
114108
let ItemLoc { container: module_id, id: ast_id } = id.lookup(db);
115109

@@ -118,9 +112,11 @@ impl ImplItems {
118112
let source = ast_id.with_value(collector.ast_id_map.get(ast_id.value)).to_node(db);
119113
let (items, macro_calls, diagnostics) = collector.collect(source.assoc_item_list());
120114

121-
(Arc::new(ImplItems { items, macro_calls }), DefDiagnostics::new(diagnostics))
115+
(ImplItems { items, macro_calls }, DefDiagnostics::new(diagnostics))
122116
}
117+
}
123118

119+
impl ImplItems {
124120
pub fn macro_calls(&self) -> impl Iterator<Item = (AstId<ast::Item>, MacroCallId)> + '_ {
125121
self.macro_calls.iter().copied()
126122
}

src/tools/rust-analyzer/crates/hir-def/src/nameres/tests/incremental.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,6 @@ pub struct S {}
431431
"parse_shim",
432432
"real_span_map_shim",
433433
"macro_def_shim",
434-
"macro_def_shim",
435434
"file_item_tree_query",
436435
"ast_id_map_shim",
437436
"parse_macro_expansion_shim",

src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
6363
) -> Option<rust_ir::AssociatedTyValueId<Interner>> {
6464
let alias_id = from_assoc_type_id(assoc_type_id);
6565
let trait_sig = self.db.type_alias_signature(alias_id);
66-
self.db.impl_items(hir_def::ImplId::from_chalk(self.db, impl_id)).items.iter().find_map(
66+
hir_def::ImplId::from_chalk(self.db, impl_id).impl_items(self.db).items.iter().find_map(
6767
|(name, item)| match item {
6868
AssocItemId::TypeAliasId(alias) if &trait_sig.name == name => {
6969
Some(TypeAliasAsValue(*alias).to_chalk(self.db))
@@ -880,8 +880,8 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
880880

881881
let impl_datum_bound = rust_ir::ImplDatumBound { trait_ref, where_clauses };
882882
let trait_data = db.trait_items(trait_);
883-
let associated_ty_value_ids = db
884-
.impl_items(impl_id)
883+
let associated_ty_value_ids = impl_id
884+
.impl_items(db)
885885
.items
886886
.iter()
887887
.filter_map(|(_, item)| match item {

src/tools/rust-analyzer/crates/hir-ty/src/method_resolution.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ fn find_matching_impl(
790790
mut impls: impl Iterator<Item = ImplId>,
791791
mut table: InferenceTable<'_>,
792792
actual_trait_ref: TraitRef,
793-
) -> Option<(Arc<ImplItems>, Substitution)> {
793+
) -> Option<(&ImplItems, Substitution)> {
794794
let db = table.db;
795795
impls.find_map(|impl_| {
796796
table.run_in_snapshot(|table| {
@@ -811,7 +811,7 @@ fn find_matching_impl(
811811
let goal = crate::Goal::all(Interner, wcs);
812812
table.try_obligation(goal.clone())?;
813813
table.register_obligation(goal);
814-
Some((db.impl_items(impl_), table.resolve_completely(impl_substs)))
814+
Some((impl_.impl_items(db), table.resolve_completely(impl_substs)))
815815
})
816816
})
817817
}
@@ -875,7 +875,7 @@ fn is_inherent_impl_coherent(
875875

876876
_ => false,
877877
};
878-
let items = db.impl_items(impl_id);
878+
let items = impl_id.impl_items(db);
879879
rustc_has_incoherent_inherent_impls
880880
&& !items.items.is_empty()
881881
&& items.items.iter().all(|&(_, assoc)| match assoc {
@@ -1462,7 +1462,7 @@ fn iterate_inherent_methods(
14621462
callback: &mut dyn FnMut(ReceiverAdjustments, AssocItemId, bool) -> ControlFlow<()>,
14631463
) -> ControlFlow<()> {
14641464
for &impl_id in impls.for_self_ty(self_ty) {
1465-
for &(ref item_name, item) in table.db.impl_items(impl_id).items.iter() {
1465+
for &(ref item_name, item) in impl_id.impl_items(table.db).items.iter() {
14661466
let visible = match is_valid_impl_method_candidate(
14671467
table,
14681468
self_ty,

src/tools/rust-analyzer/crates/hir-ty/src/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ pub(crate) fn visit_module(
437437
) {
438438
visit_scope(db, crate_def_map, &crate_def_map[module_id].scope, cb);
439439
for impl_id in crate_def_map[module_id].scope.impls() {
440-
let impl_data = db.impl_items(impl_id);
440+
let impl_data = impl_id.impl_items(db);
441441
for &(_, item) in impl_data.items.iter() {
442442
match item {
443443
AssocItemId::FunctionId(it) => {

src/tools/rust-analyzer/crates/hir/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ impl Module {
760760

761761
let ast_id_map = db.ast_id_map(file_id);
762762

763-
for diag in db.impl_items_with_diagnostics(impl_def.id).1.iter() {
763+
for diag in impl_def.id.impl_items_with_diagnostics(db).1.iter() {
764764
emit_def_diagnostic(db, acc, diag, edition);
765765
}
766766

@@ -824,7 +824,7 @@ impl Module {
824824
AssocItemId::ConstId(id) => !db.const_signature(id).has_body(),
825825
AssocItemId::TypeAliasId(it) => db.type_alias_signature(it).ty.is_none(),
826826
});
827-
impl_assoc_items_scratch.extend(db.impl_items(impl_def.id).items.iter().cloned());
827+
impl_assoc_items_scratch.extend(impl_def.id.impl_items(db).items.iter().cloned());
828828

829829
let redundant = impl_assoc_items_scratch
830830
.iter()
@@ -912,7 +912,7 @@ impl Module {
912912
&source_map,
913913
);
914914

915-
for &(_, item) in db.impl_items(impl_def.id).items.iter() {
915+
for &(_, item) in impl_def.id.impl_items(db).items.iter() {
916916
AssocItem::from(item).diagnostics(db, acc, style_lints);
917917
}
918918
}
@@ -4413,7 +4413,7 @@ impl Impl {
44134413
}
44144414

44154415
pub fn items(self, db: &dyn HirDatabase) -> Vec<AssocItem> {
4416-
db.impl_items(self.id).items.iter().map(|&(_, it)| it.into()).collect()
4416+
self.id.impl_items(db).items.iter().map(|&(_, it)| it.into()).collect()
44174417
}
44184418

44194419
pub fn is_negative(self, db: &dyn HirDatabase) -> bool {
@@ -4462,7 +4462,7 @@ impl Impl {
44624462
}
44634463

44644464
fn all_macro_calls(&self, db: &dyn HirDatabase) -> Box<[(AstId<ast::Item>, MacroCallId)]> {
4465-
db.impl_items(self.id).macro_calls.to_vec().into_boxed_slice()
4465+
self.id.impl_items(db).macro_calls.to_vec().into_boxed_slice()
44664466
}
44674467
}
44684468

@@ -5271,7 +5271,7 @@ impl Type {
52715271
let impls = db.inherent_impls_in_crate(krate);
52725272

52735273
for impl_def in impls.for_self_ty(&self.ty) {
5274-
for &(_, item) in db.impl_items(*impl_def).items.iter() {
5274+
for &(_, item) in impl_def.impl_items(db).items.iter() {
52755275
if callback(item) {
52765276
return;
52775277
}

src/tools/rust-analyzer/crates/hir/src/semantics/child_by_source.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl ChildBySource for TraitId {
6161

6262
impl ChildBySource for ImplId {
6363
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
64-
let data = db.impl_items(*self);
64+
let data = self.impl_items(db);
6565
data.macro_calls().filter(|(ast_id, _)| ast_id.file_id == file_id).for_each(
6666
|(ast_id, call_id)| {
6767
let ptr = ast_id.to_ptr(db);

0 commit comments

Comments
 (0)