diff options
Diffstat (limited to 'crates/ra_hir_ty/src')
-rw-r--r-- | crates/ra_hir_ty/src/db.rs | 6 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/method_resolution.rs | 23 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/tests/macros.rs | 12 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/traits.rs | 6 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/traits/builtin.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/traits/chalk.rs | 8 |
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}; | |||
11 | use ra_prof::profile; | 11 | use ra_prof::profile; |
12 | 12 | ||
13 | use crate::{ | 13 | use 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)] |
45 | pub struct CrateImplBlocks { | 45 | pub 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 | ||
50 | impl CrateImplBlocks { | 50 | impl 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? |
182 | pub fn iterate_method_candidates<T>( | 182 | pub 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; | |||
4 | use ra_db::fixture::WithFixture; | 4 | use ra_db::fixture::WithFixture; |
5 | 5 | ||
6 | #[test] | 6 | #[test] |
7 | fn cfg_impl_block() { | 7 | fn 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 { | |||
347 | m::foo!(foo); | 347 | m::foo!(foo); |
348 | use foo as bar; | 348 | use foo as bar; |
349 | fn f() -> bar { 0 } | 349 | fn f() -> bar { 0 } |
350 | fn main() { | 350 | fn 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)] |
347 | pub enum Impl { | 347 | pub 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 | ||
97 | pub(super) fn impl_datum(db: &impl HirDatabase, krate: CrateId, impl_: Impl) -> BuiltinImplData { | 97 | pub(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 | ||
720 | fn impl_block_datum( | 720 | fn 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 | }; |