aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src')
-rw-r--r--crates/ra_hir_ty/src/db.rs6
-rw-r--r--crates/ra_hir_ty/src/method_resolution.rs23
-rw-r--r--crates/ra_hir_ty/src/tests/macros.rs12
-rw-r--r--crates/ra_hir_ty/src/traits.rs6
-rw-r--r--crates/ra_hir_ty/src/traits/builtin.rs2
-rw-r--r--crates/ra_hir_ty/src/traits/chalk.rs8
6 files changed, 28 insertions, 29 deletions
diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs
index e9bfcfa17..85d85182f 100644
--- a/crates/ra_hir_ty/src/db.rs
+++ b/crates/ra_hir_ty/src/db.rs
@@ -11,7 +11,7 @@ use ra_db::{impl_intern_key, salsa, CrateId};
11use ra_prof::profile; 11use ra_prof::profile;
12 12
13use crate::{ 13use crate::{
14 method_resolution::CrateImplBlocks, 14 method_resolution::CrateImplDefs,
15 traits::{chalk, AssocTyValue, Impl}, 15 traits::{chalk, AssocTyValue, Impl},
16 Binders, CallableDef, GenericPredicate, InferenceResult, PolyFnSig, Substs, TraitRef, Ty, 16 Binders, CallableDef, GenericPredicate, InferenceResult, PolyFnSig, Substs, TraitRef, Ty,
17 TyDefId, TypeCtor, ValueTyDefId, 17 TyDefId, TypeCtor, ValueTyDefId,
@@ -59,8 +59,8 @@ pub trait HirDatabase: DefDatabase {
59 #[salsa::invoke(crate::lower::generic_defaults_query)] 59 #[salsa::invoke(crate::lower::generic_defaults_query)]
60 fn generic_defaults(&self, def: GenericDefId) -> Substs; 60 fn generic_defaults(&self, def: GenericDefId) -> Substs;
61 61
62 #[salsa::invoke(crate::method_resolution::CrateImplBlocks::impls_in_crate_query)] 62 #[salsa::invoke(crate::method_resolution::CrateImplDefs::impls_in_crate_query)]
63 fn impls_in_crate(&self, krate: CrateId) -> Arc<CrateImplBlocks>; 63 fn impls_in_crate(&self, krate: CrateId) -> Arc<CrateImplDefs>;
64 64
65 #[salsa::invoke(crate::traits::impls_for_trait_query)] 65 #[salsa::invoke(crate::traits::impls_for_trait_query)]
66 fn impls_for_trait(&self, krate: CrateId, trait_: TraitId) -> Arc<[ImplId]>; 66 fn impls_for_trait(&self, krate: CrateId, trait_: TraitId) -> Arc<[ImplId]>;
diff --git a/crates/ra_hir_ty/src/method_resolution.rs b/crates/ra_hir_ty/src/method_resolution.rs
index 988d83af5..df5901835 100644
--- a/crates/ra_hir_ty/src/method_resolution.rs
+++ b/crates/ra_hir_ty/src/method_resolution.rs
@@ -42,19 +42,19 @@ impl TyFingerprint {
42} 42}
43 43
44#[derive(Debug, PartialEq, Eq)] 44#[derive(Debug, PartialEq, Eq)]
45pub struct CrateImplBlocks { 45pub struct CrateImplDefs {
46 impls: FxHashMap<TyFingerprint, Vec<ImplId>>, 46 impls: FxHashMap<TyFingerprint, Vec<ImplId>>,
47 impls_by_trait: FxHashMap<TraitId, Vec<ImplId>>, 47 impls_by_trait: FxHashMap<TraitId, Vec<ImplId>>,
48} 48}
49 49
50impl CrateImplBlocks { 50impl CrateImplDefs {
51 pub(crate) fn impls_in_crate_query( 51 pub(crate) fn impls_in_crate_query(
52 db: &impl HirDatabase, 52 db: &impl HirDatabase,
53 krate: CrateId, 53 krate: CrateId,
54 ) -> Arc<CrateImplBlocks> { 54 ) -> Arc<CrateImplDefs> {
55 let _p = profile("impls_in_crate_query"); 55 let _p = profile("impls_in_crate_query");
56 let mut res = 56 let mut res =
57 CrateImplBlocks { impls: FxHashMap::default(), impls_by_trait: FxHashMap::default() }; 57 CrateImplDefs { impls: FxHashMap::default(), impls_by_trait: FxHashMap::default() };
58 58
59 let crate_def_map = db.crate_def_map(krate); 59 let crate_def_map = db.crate_def_map(krate);
60 for (_module_id, module_data) in crate_def_map.modules.iter() { 60 for (_module_id, module_data) in crate_def_map.modules.iter() {
@@ -75,12 +75,12 @@ impl CrateImplBlocks {
75 75
76 Arc::new(res) 76 Arc::new(res)
77 } 77 }
78 pub fn lookup_impl_blocks(&self, ty: &Ty) -> impl Iterator<Item = ImplId> + '_ { 78 pub fn lookup_impl_defs(&self, ty: &Ty) -> impl Iterator<Item = ImplId> + '_ {
79 let fingerprint = TyFingerprint::for_impl(ty); 79 let fingerprint = TyFingerprint::for_impl(ty);
80 fingerprint.and_then(|f| self.impls.get(&f)).into_iter().flatten().copied() 80 fingerprint.and_then(|f| self.impls.get(&f)).into_iter().flatten().copied()
81 } 81 }
82 82
83 pub fn lookup_impl_blocks_for_trait(&self, tr: TraitId) -> impl Iterator<Item = ImplId> + '_ { 83 pub fn lookup_impl_defs_for_trait(&self, tr: TraitId) -> impl Iterator<Item = ImplId> + '_ {
84 self.impls_by_trait.get(&tr).into_iter().flatten().copied() 84 self.impls_by_trait.get(&tr).into_iter().flatten().copied()
85 } 85 }
86 86
@@ -131,7 +131,7 @@ impl Ty {
131 let res = lang_item_targets 131 let res = lang_item_targets
132 .into_iter() 132 .into_iter()
133 .filter_map(|it| match it { 133 .filter_map(|it| match it {
134 LangItemTarget::ImplBlockId(it) => Some(it), 134 LangItemTarget::ImplDefId(it) => Some(it),
135 _ => None, 135 _ => None,
136 }) 136 })
137 .map(|it| it.lookup(db).container.module(db).krate) 137 .map(|it| it.lookup(db).container.module(db).krate)
@@ -177,7 +177,7 @@ pub enum LookupMode {
177} 177}
178 178
179// This would be nicer if it just returned an iterator, but that runs into 179// This would be nicer if it just returned an iterator, but that runs into
180// lifetime problems, because we need to borrow temp `CrateImplBlocks`. 180// lifetime problems, because we need to borrow temp `CrateImplDefs`.
181// FIXME add a context type here? 181// FIXME add a context type here?
182pub fn iterate_method_candidates<T>( 182pub fn iterate_method_candidates<T>(
183 ty: &Canonical<Ty>, 183 ty: &Canonical<Ty>,
@@ -425,8 +425,8 @@ fn iterate_inherent_methods<T>(
425 for krate in self_ty.value.def_crates(db, krate)? { 425 for krate in self_ty.value.def_crates(db, krate)? {
426 let impls = db.impls_in_crate(krate); 426 let impls = db.impls_in_crate(krate);
427 427
428 for impl_block in impls.lookup_impl_blocks(&self_ty.value) { 428 for impl_def in impls.lookup_impl_defs(&self_ty.value) {
429 for &item in db.impl_data(impl_block).items.iter() { 429 for &item in db.impl_data(impl_def).items.iter() {
430 if !is_valid_candidate(db, name, receiver_ty, item, self_ty) { 430 if !is_valid_candidate(db, name, receiver_ty, item, self_ty) {
431 continue; 431 continue;
432 } 432 }
@@ -434,8 +434,7 @@ fn iterate_inherent_methods<T>(
434 // that the impl is for. If we have a receiver type, this 434 // that the impl is for. If we have a receiver type, this
435 // already happens in `is_valid_candidate` above; if not, we 435 // already happens in `is_valid_candidate` above; if not, we
436 // check it here 436 // check it here
437 if receiver_ty.is_none() && inherent_impl_substs(db, impl_block, self_ty).is_none() 437 if receiver_ty.is_none() && inherent_impl_substs(db, impl_def, self_ty).is_none() {
438 {
439 test_utils::tested_by!(impl_self_type_match_without_receiver); 438 test_utils::tested_by!(impl_self_type_match_without_receiver);
440 continue; 439 continue;
441 } 440 }
diff --git a/crates/ra_hir_ty/src/tests/macros.rs b/crates/ra_hir_ty/src/tests/macros.rs
index 652420ea8..53cd81d46 100644
--- a/crates/ra_hir_ty/src/tests/macros.rs
+++ b/crates/ra_hir_ty/src/tests/macros.rs
@@ -4,7 +4,7 @@ use insta::assert_snapshot;
4use ra_db::fixture::WithFixture; 4use ra_db::fixture::WithFixture;
5 5
6#[test] 6#[test]
7fn cfg_impl_block() { 7fn cfg_impl_def() {
8 let (db, pos) = TestDB::with_position( 8 let (db, pos) = TestDB::with_position(
9 r#" 9 r#"
10//- /main.rs crate:main deps:foo cfg:test 10//- /main.rs crate:main deps:foo cfg:test
@@ -347,17 +347,17 @@ mod m {
347m::foo!(foo); 347m::foo!(foo);
348use foo as bar; 348use foo as bar;
349fn f() -> bar { 0 } 349fn f() -> bar { 0 }
350fn main() { 350fn main() {
351 let _a = f(); 351 let _a = f();
352} 352}
353"#), 353"#),
354 @r###" 354 @r###"
355 [159; 164) '{ 0 }': u64 355 [159; 164) '{ 0 }': u64
356 [161; 162) '0': u64 356 [161; 162) '0': u64
357 [175; 199) '{ ...f(); }': () 357 [175; 197) '{ ...f(); }': ()
358 [187; 189) '_a': u64 358 [185; 187) '_a': u64
359 [193; 194) 'f': fn f() -> u64 359 [191; 192) 'f': fn f() -> u64
360 [193; 196) 'f()': u64 360 [191; 194) 'f()': u64
361 "### 361 "###
362 ); 362 );
363} 363}
diff --git a/crates/ra_hir_ty/src/traits.rs b/crates/ra_hir_ty/src/traits.rs
index 17aef9490..bc6ee2600 100644
--- a/crates/ra_hir_ty/src/traits.rs
+++ b/crates/ra_hir_ty/src/traits.rs
@@ -131,8 +131,8 @@ pub(crate) fn impls_for_trait_query(
131 for dep in db.crate_graph().dependencies(krate) { 131 for dep in db.crate_graph().dependencies(krate) {
132 impls.extend(db.impls_for_trait(dep.crate_id, trait_).iter()); 132 impls.extend(db.impls_for_trait(dep.crate_id, trait_).iter());
133 } 133 }
134 let crate_impl_blocks = db.impls_in_crate(krate); 134 let crate_impl_defs = db.impls_in_crate(krate);
135 impls.extend(crate_impl_blocks.lookup_impl_blocks_for_trait(trait_)); 135 impls.extend(crate_impl_defs.lookup_impl_defs_for_trait(trait_));
136 impls.into_iter().collect() 136 impls.into_iter().collect()
137} 137}
138 138
@@ -346,7 +346,7 @@ pub struct UnsizeToSuperTraitObjectData {
346#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 346#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
347pub enum Impl { 347pub enum Impl {
348 /// A normal impl from an impl block. 348 /// A normal impl from an impl block.
349 ImplBlock(ImplId), 349 ImplDef(ImplId),
350 /// Closure types implement the Fn traits synthetically. 350 /// Closure types implement the Fn traits synthetically.
351 ClosureFnTraitImpl(ClosureFnTraitImplData), 351 ClosureFnTraitImpl(ClosureFnTraitImplData),
352 /// [T; n]: Unsize<[T]> 352 /// [T; n]: Unsize<[T]>
diff --git a/crates/ra_hir_ty/src/traits/builtin.rs b/crates/ra_hir_ty/src/traits/builtin.rs
index cc0f3eeb4..03f9b4e27 100644
--- a/crates/ra_hir_ty/src/traits/builtin.rs
+++ b/crates/ra_hir_ty/src/traits/builtin.rs
@@ -96,7 +96,7 @@ fn get_builtin_unsize_impls(
96 96
97pub(super) fn impl_datum(db: &impl HirDatabase, krate: CrateId, impl_: Impl) -> BuiltinImplData { 97pub(super) fn impl_datum(db: &impl HirDatabase, krate: CrateId, impl_: Impl) -> BuiltinImplData {
98 match impl_ { 98 match impl_ {
99 Impl::ImplBlock(_) => unreachable!(), 99 Impl::ImplDef(_) => unreachable!(),
100 Impl::ClosureFnTraitImpl(data) => closure_fn_trait_impl_datum(db, krate, data), 100 Impl::ClosureFnTraitImpl(data) => closure_fn_trait_impl_datum(db, krate, data),
101 Impl::UnsizeArray => array_unsize_impl_datum(db, krate), 101 Impl::UnsizeArray => array_unsize_impl_datum(db, krate),
102 Impl::UnsizeToTraitObject(trait_) => trait_object_unsize_impl_datum(db, krate, trait_), 102 Impl::UnsizeToTraitObject(trait_) => trait_object_unsize_impl_datum(db, krate, trait_),
diff --git a/crates/ra_hir_ty/src/traits/chalk.rs b/crates/ra_hir_ty/src/traits/chalk.rs
index 5b6c1a62e..4001aa941 100644
--- a/crates/ra_hir_ty/src/traits/chalk.rs
+++ b/crates/ra_hir_ty/src/traits/chalk.rs
@@ -576,7 +576,7 @@ where
576 .impls_for_trait(self.krate, trait_) 576 .impls_for_trait(self.krate, trait_)
577 .iter() 577 .iter()
578 .copied() 578 .copied()
579 .map(Impl::ImplBlock) 579 .map(Impl::ImplDef)
580 .map(|impl_| impl_.to_chalk(self.db)) 580 .map(|impl_| impl_.to_chalk(self.db))
581 .collect(); 581 .collect();
582 582
@@ -712,12 +712,12 @@ pub(crate) fn impl_datum_query(
712 debug!("impl_datum {:?}", impl_id); 712 debug!("impl_datum {:?}", impl_id);
713 let impl_: Impl = from_chalk(db, impl_id); 713 let impl_: Impl = from_chalk(db, impl_id);
714 match impl_ { 714 match impl_ {
715 Impl::ImplBlock(impl_block) => impl_block_datum(db, krate, impl_id, impl_block), 715 Impl::ImplDef(impl_def) => impl_def_datum(db, krate, impl_id, impl_def),
716 _ => Arc::new(builtin::impl_datum(db, krate, impl_).to_chalk(db)), 716 _ => Arc::new(builtin::impl_datum(db, krate, impl_).to_chalk(db)),
717 } 717 }
718} 718}
719 719
720fn impl_block_datum( 720fn impl_def_datum(
721 db: &impl HirDatabase, 721 db: &impl HirDatabase,
722 krate: CrateId, 722 krate: CrateId,
723 chalk_id: ImplId, 723 chalk_id: ImplId,
@@ -815,7 +815,7 @@ fn type_alias_associated_ty_value(
815 let ty = db.ty(type_alias.into()); 815 let ty = db.ty(type_alias.into());
816 let value_bound = chalk_rust_ir::AssociatedTyValueBound { ty: ty.value.to_chalk(db) }; 816 let value_bound = chalk_rust_ir::AssociatedTyValueBound { ty: ty.value.to_chalk(db) };
817 let value = chalk_rust_ir::AssociatedTyValue { 817 let value = chalk_rust_ir::AssociatedTyValue {
818 impl_id: Impl::ImplBlock(impl_id).to_chalk(db), 818 impl_id: Impl::ImplDef(impl_id).to_chalk(db),
819 associated_ty_id: assoc_ty.to_chalk(db), 819 associated_ty_id: assoc_ty.to_chalk(db),
820 value: make_binders(value_bound, ty.num_binders), 820 value: make_binders(value_bound, ty.num_binders),
821 }; 821 };