Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/builtin_derive.rs')
-rw-r--r--crates/hir-ty/src/builtin_derive.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/hir-ty/src/builtin_derive.rs b/crates/hir-ty/src/builtin_derive.rs
index 6a9b1671e7..f14e6e4e4d 100644
--- a/crates/hir-ty/src/builtin_derive.rs
+++ b/crates/hir-ty/src/builtin_derive.rs
@@ -12,7 +12,7 @@ use hir_def::{
use itertools::Itertools;
use la_arena::ArenaMap;
use rustc_type_ir::{
- AliasTyKind, Interner, TypeFoldable, TypeSuperVisitable, TypeVisitable, TypeVisitor, Upcast,
+ AliasTyKind, TypeFoldable, TypeSuperVisitable, TypeVisitable, TypeVisitor, Upcast,
inherent::{GenericArgs as _, IntoKind},
};
@@ -53,7 +53,10 @@ fn trait_args(trait_: BuiltinDeriveImplTrait, self_ty: Ty<'_>) -> GenericArgs<'_
}
}
-pub(crate) fn generics_of<'db>(interner: DbInterner<'db>, id: BuiltinDeriveImplId) -> Generics {
+pub(crate) fn generics_of<'db>(
+ interner: DbInterner<'db>,
+ id: BuiltinDeriveImplId,
+) -> Generics<'db> {
let db = interner.db;
let loc = id.loc(db);
match loc.trait_ {
@@ -65,15 +68,14 @@ pub(crate) fn generics_of<'db>(interner: DbInterner<'db>, id: BuiltinDeriveImplI
| BuiltinDeriveImplTrait::Ord
| BuiltinDeriveImplTrait::PartialOrd
| BuiltinDeriveImplTrait::Eq
- | BuiltinDeriveImplTrait::PartialEq => interner.generics_of(loc.adt.into()),
+ | BuiltinDeriveImplTrait::PartialEq => Generics::from_generic_def(db, loc.adt.into()),
BuiltinDeriveImplTrait::CoerceUnsized | BuiltinDeriveImplTrait::DispatchFromDyn => {
- let mut generics = interner.generics_of(loc.adt.into());
let trait_id = loc
.trait_
.get_id(interner.lang_items())
.expect("we don't pass the impl to the solver if we can't resolve the trait");
- generics.push_param(coerce_pointee_new_type_param(trait_id).into());
- generics
+ let additional_param = coerce_pointee_new_type_param(trait_id).into();
+ Generics::from_generic_def_plus_one(db, loc.adt.into(), additional_param)
}
}
}