diff options
Diffstat (limited to 'crates/ra_hir_ty/src/traits/builtin.rs')
-rw-r--r-- | crates/ra_hir_ty/src/traits/builtin.rs | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/crates/ra_hir_ty/src/traits/builtin.rs b/crates/ra_hir_ty/src/traits/builtin.rs index 03f9b4e27..73e3c5c78 100644 --- a/crates/ra_hir_ty/src/traits/builtin.rs +++ b/crates/ra_hir_ty/src/traits/builtin.rs | |||
@@ -26,7 +26,7 @@ pub(super) struct BuiltinImplAssocTyValueData { | |||
26 | } | 26 | } |
27 | 27 | ||
28 | pub(super) fn get_builtin_impls( | 28 | pub(super) fn get_builtin_impls( |
29 | db: &impl HirDatabase, | 29 | db: &dyn HirDatabase, |
30 | krate: CrateId, | 30 | krate: CrateId, |
31 | ty: &Ty, | 31 | ty: &Ty, |
32 | // The first argument for the trait, if present | 32 | // The first argument for the trait, if present |
@@ -59,7 +59,7 @@ pub(super) fn get_builtin_impls( | |||
59 | } | 59 | } |
60 | 60 | ||
61 | fn get_builtin_unsize_impls( | 61 | fn get_builtin_unsize_impls( |
62 | db: &impl HirDatabase, | 62 | db: &dyn HirDatabase, |
63 | krate: CrateId, | 63 | krate: CrateId, |
64 | ty: &Ty, | 64 | ty: &Ty, |
65 | // The first argument for the trait, if present | 65 | // The first argument for the trait, if present |
@@ -79,7 +79,7 @@ fn get_builtin_unsize_impls( | |||
79 | // FIXME what about more complicated dyn tys with marker traits? | 79 | // FIXME what about more complicated dyn tys with marker traits? |
80 | if let Some(trait_ref) = ty.dyn_trait_ref() { | 80 | if let Some(trait_ref) = ty.dyn_trait_ref() { |
81 | if trait_ref.trait_ != target_trait.trait_ { | 81 | if trait_ref.trait_ != target_trait.trait_ { |
82 | let super_traits = all_super_traits(db, trait_ref.trait_); | 82 | let super_traits = all_super_traits(db.upcast(), trait_ref.trait_); |
83 | if super_traits.contains(&target_trait.trait_) { | 83 | if super_traits.contains(&target_trait.trait_) { |
84 | callback(Impl::UnsizeToSuperTraitObject(UnsizeToSuperTraitObjectData { | 84 | callback(Impl::UnsizeToSuperTraitObject(UnsizeToSuperTraitObjectData { |
85 | trait_: trait_ref.trait_, | 85 | trait_: trait_ref.trait_, |
@@ -94,7 +94,7 @@ fn get_builtin_unsize_impls( | |||
94 | } | 94 | } |
95 | } | 95 | } |
96 | 96 | ||
97 | pub(super) fn impl_datum(db: &impl HirDatabase, krate: CrateId, impl_: Impl) -> BuiltinImplData { | 97 | pub(super) fn impl_datum(db: &dyn HirDatabase, krate: CrateId, impl_: Impl) -> BuiltinImplData { |
98 | match impl_ { | 98 | match impl_ { |
99 | Impl::ImplDef(_) => 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), |
@@ -107,7 +107,7 @@ pub(super) fn impl_datum(db: &impl HirDatabase, krate: CrateId, impl_: Impl) -> | |||
107 | } | 107 | } |
108 | 108 | ||
109 | pub(super) fn associated_ty_value( | 109 | pub(super) fn associated_ty_value( |
110 | db: &impl HirDatabase, | 110 | db: &dyn HirDatabase, |
111 | krate: CrateId, | 111 | krate: CrateId, |
112 | data: AssocTyValue, | 112 | data: AssocTyValue, |
113 | ) -> BuiltinImplAssocTyValueData { | 113 | ) -> BuiltinImplAssocTyValueData { |
@@ -122,7 +122,7 @@ pub(super) fn associated_ty_value( | |||
122 | // Closure Fn trait impls | 122 | // Closure Fn trait impls |
123 | 123 | ||
124 | fn check_closure_fn_trait_impl_prerequisites( | 124 | fn check_closure_fn_trait_impl_prerequisites( |
125 | db: &impl HirDatabase, | 125 | db: &dyn HirDatabase, |
126 | krate: CrateId, | 126 | krate: CrateId, |
127 | data: super::ClosureFnTraitImplData, | 127 | data: super::ClosureFnTraitImplData, |
128 | ) -> bool { | 128 | ) -> bool { |
@@ -143,7 +143,7 @@ fn check_closure_fn_trait_impl_prerequisites( | |||
143 | } | 143 | } |
144 | 144 | ||
145 | fn closure_fn_trait_impl_datum( | 145 | fn closure_fn_trait_impl_datum( |
146 | db: &impl HirDatabase, | 146 | db: &dyn HirDatabase, |
147 | krate: CrateId, | 147 | krate: CrateId, |
148 | data: super::ClosureFnTraitImplData, | 148 | data: super::ClosureFnTraitImplData, |
149 | ) -> BuiltinImplData { | 149 | ) -> BuiltinImplData { |
@@ -189,7 +189,7 @@ fn closure_fn_trait_impl_datum( | |||
189 | } | 189 | } |
190 | 190 | ||
191 | fn closure_fn_trait_output_assoc_ty_value( | 191 | fn closure_fn_trait_output_assoc_ty_value( |
192 | db: &impl HirDatabase, | 192 | db: &dyn HirDatabase, |
193 | krate: CrateId, | 193 | krate: CrateId, |
194 | data: super::ClosureFnTraitImplData, | 194 | data: super::ClosureFnTraitImplData, |
195 | ) -> BuiltinImplAssocTyValueData { | 195 | ) -> BuiltinImplAssocTyValueData { |
@@ -223,17 +223,17 @@ fn closure_fn_trait_output_assoc_ty_value( | |||
223 | 223 | ||
224 | // Array unsizing | 224 | // Array unsizing |
225 | 225 | ||
226 | fn check_unsize_impl_prerequisites(db: &impl HirDatabase, krate: CrateId) -> bool { | 226 | fn check_unsize_impl_prerequisites(db: &dyn HirDatabase, krate: CrateId) -> bool { |
227 | // the Unsize trait needs to exist and have two type parameters (Self and T) | 227 | // the Unsize trait needs to exist and have two type parameters (Self and T) |
228 | let unsize_trait = match get_unsize_trait(db, krate) { | 228 | let unsize_trait = match get_unsize_trait(db, krate) { |
229 | Some(t) => t, | 229 | Some(t) => t, |
230 | None => return false, | 230 | None => return false, |
231 | }; | 231 | }; |
232 | let generic_params = generics(db, unsize_trait.into()); | 232 | let generic_params = generics(db.upcast(), unsize_trait.into()); |
233 | generic_params.len() == 2 | 233 | generic_params.len() == 2 |
234 | } | 234 | } |
235 | 235 | ||
236 | fn array_unsize_impl_datum(db: &impl HirDatabase, krate: CrateId) -> BuiltinImplData { | 236 | fn array_unsize_impl_datum(db: &dyn HirDatabase, krate: CrateId) -> BuiltinImplData { |
237 | // impl<T> Unsize<[T]> for [T; _] | 237 | // impl<T> Unsize<[T]> for [T; _] |
238 | // (this can be a single impl because we don't distinguish array sizes currently) | 238 | // (this can be a single impl because we don't distinguish array sizes currently) |
239 | 239 | ||
@@ -260,7 +260,7 @@ fn array_unsize_impl_datum(db: &impl HirDatabase, krate: CrateId) -> BuiltinImpl | |||
260 | // Trait object unsizing | 260 | // Trait object unsizing |
261 | 261 | ||
262 | fn trait_object_unsize_impl_datum( | 262 | fn trait_object_unsize_impl_datum( |
263 | db: &impl HirDatabase, | 263 | db: &dyn HirDatabase, |
264 | krate: CrateId, | 264 | krate: CrateId, |
265 | trait_: TraitId, | 265 | trait_: TraitId, |
266 | ) -> BuiltinImplData { | 266 | ) -> BuiltinImplData { |
@@ -295,7 +295,7 @@ fn trait_object_unsize_impl_datum( | |||
295 | } | 295 | } |
296 | 296 | ||
297 | fn super_trait_object_unsize_impl_datum( | 297 | fn super_trait_object_unsize_impl_datum( |
298 | db: &impl HirDatabase, | 298 | db: &dyn HirDatabase, |
299 | krate: CrateId, | 299 | krate: CrateId, |
300 | data: UnsizeToSuperTraitObjectData, | 300 | data: UnsizeToSuperTraitObjectData, |
301 | ) -> BuiltinImplData { | 301 | ) -> BuiltinImplData { |
@@ -313,7 +313,7 @@ fn super_trait_object_unsize_impl_datum( | |||
313 | let self_bounds = vec![GenericPredicate::Implemented(self_trait_ref.clone())]; | 313 | let self_bounds = vec![GenericPredicate::Implemented(self_trait_ref.clone())]; |
314 | 314 | ||
315 | // we need to go from our trait to the super trait, substituting type parameters | 315 | // we need to go from our trait to the super trait, substituting type parameters |
316 | let path = crate::utils::find_super_trait_path(db, data.trait_, data.super_trait); | 316 | let path = crate::utils::find_super_trait_path(db.upcast(), data.trait_, data.super_trait); |
317 | 317 | ||
318 | let mut current_trait_ref = self_trait_ref; | 318 | let mut current_trait_ref = self_trait_ref; |
319 | for t in path.into_iter().skip(1) { | 319 | for t in path.into_iter().skip(1) { |
@@ -344,11 +344,7 @@ fn super_trait_object_unsize_impl_datum( | |||
344 | BuiltinImplData { num_vars, trait_ref, where_clauses: Vec::new(), assoc_ty_values: Vec::new() } | 344 | BuiltinImplData { num_vars, trait_ref, where_clauses: Vec::new(), assoc_ty_values: Vec::new() } |
345 | } | 345 | } |
346 | 346 | ||
347 | fn get_fn_trait( | 347 | fn get_fn_trait(db: &dyn HirDatabase, krate: CrateId, fn_trait: super::FnTrait) -> Option<TraitId> { |
348 | db: &impl HirDatabase, | ||
349 | krate: CrateId, | ||
350 | fn_trait: super::FnTrait, | ||
351 | ) -> Option<TraitId> { | ||
352 | let target = db.lang_item(krate, fn_trait.lang_item_name().into())?; | 348 | let target = db.lang_item(krate, fn_trait.lang_item_name().into())?; |
353 | match target { | 349 | match target { |
354 | LangItemTarget::TraitId(t) => Some(t), | 350 | LangItemTarget::TraitId(t) => Some(t), |
@@ -356,7 +352,7 @@ fn get_fn_trait( | |||
356 | } | 352 | } |
357 | } | 353 | } |
358 | 354 | ||
359 | fn get_unsize_trait(db: &impl HirDatabase, krate: CrateId) -> Option<TraitId> { | 355 | fn get_unsize_trait(db: &dyn HirDatabase, krate: CrateId) -> Option<TraitId> { |
360 | let target = db.lang_item(krate, "unsize".into())?; | 356 | let target = db.lang_item(krate, "unsize".into())?; |
361 | match target { | 357 | match target { |
362 | LangItemTarget::TraitId(t) => Some(t), | 358 | LangItemTarget::TraitId(t) => Some(t), |