Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/utils.rs')
-rw-r--r--crates/hir-ty/src/utils.rs43
1 files changed, 22 insertions, 21 deletions
diff --git a/crates/hir-ty/src/utils.rs b/crates/hir-ty/src/utils.rs
index af5f7bb42a..9b8a3e2dfb 100644
--- a/crates/hir-ty/src/utils.rs
+++ b/crates/hir-ty/src/utils.rs
@@ -12,7 +12,7 @@ use chalk_ir::{
use hir_def::{
db::DefDatabase,
generics::{
- GenericParamData, GenericParams, LifetimeParamData, TypeOrConstParamData,
+ GenericParamDataRef, GenericParams, LifetimeParamData, TypeOrConstParamData,
TypeParamProvenance, WherePredicate, WherePredicateTypeTarget,
},
lang_item::LangItem,
@@ -277,28 +277,28 @@ impl Generics {
/// Iterator over types and const params of self, then parent.
pub(crate) fn iter<'a>(
&'a self,
- ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + 'a {
+ ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
let from_toc_id = |it: &'a Generics| {
- move |(local_id, p): (_, &TypeOrConstParamData)| {
+ move |(local_id, p): (_, &'a TypeOrConstParamData)| {
let id = TypeOrConstParamId { parent: it.def, local_id };
match p {
TypeOrConstParamData::TypeParamData(p) => (
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
- GenericParamData::TypeParamData(p.clone()),
+ GenericParamDataRef::TypeParamData(p),
),
TypeOrConstParamData::ConstParamData(p) => (
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
- GenericParamData::ConstParamData(p.clone()),
+ GenericParamDataRef::ConstParamData(p),
),
}
}
};
let from_lt_id = |it: &'a Generics| {
- move |(local_id, p): (_, &LifetimeParamData)| {
+ move |(local_id, p): (_, &'a LifetimeParamData)| {
(
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
- GenericParamData::LifetimeParamData(p.clone()),
+ GenericParamDataRef::LifetimeParamData(p),
)
}
};
@@ -310,28 +310,28 @@ impl Generics {
/// Iterate over types and const params without parent params.
pub(crate) fn iter_self<'a>(
&'a self,
- ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + 'a {
+ ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
let from_toc_id = |it: &'a Generics| {
- move |(local_id, p): (_, &TypeOrConstParamData)| {
+ move |(local_id, p): (_, &'a TypeOrConstParamData)| {
let id = TypeOrConstParamId { parent: it.def, local_id };
match p {
TypeOrConstParamData::TypeParamData(p) => (
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
- GenericParamData::TypeParamData(p.clone()),
+ GenericParamDataRef::TypeParamData(p),
),
TypeOrConstParamData::ConstParamData(p) => (
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
- GenericParamData::ConstParamData(p.clone()),
+ GenericParamDataRef::ConstParamData(p),
),
}
}
};
let from_lt_id = |it: &'a Generics| {
- move |(local_id, p): (_, &LifetimeParamData)| {
+ move |(local_id, p): (_, &'a LifetimeParamData)| {
(
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
- GenericParamData::LifetimeParamData(p.clone()),
+ GenericParamDataRef::LifetimeParamData(p),
)
}
};
@@ -340,28 +340,29 @@ impl Generics {
}
/// Iterator over types and const params of parent.
- pub(crate) fn iter_parent(
- &self,
- ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + '_ {
+ #[allow(clippy::needless_lifetimes)]
+ pub(crate) fn iter_parent<'a>(
+ &'a self,
+ ) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
self.parent_generics().into_iter().flat_map(|it| {
- let from_toc_id = move |(local_id, p): (_, &TypeOrConstParamData)| {
+ let from_toc_id = move |(local_id, p): (_, &'a TypeOrConstParamData)| {
let id = TypeOrConstParamId { parent: it.def, local_id };
match p {
TypeOrConstParamData::TypeParamData(p) => (
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
- GenericParamData::TypeParamData(p.clone()),
+ GenericParamDataRef::TypeParamData(p),
),
TypeOrConstParamData::ConstParamData(p) => (
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
- GenericParamData::ConstParamData(p.clone()),
+ GenericParamDataRef::ConstParamData(p),
),
}
};
- let from_lt_id = move |(local_id, p): (_, &LifetimeParamData)| {
+ let from_lt_id = move |(local_id, p): (_, &'a LifetimeParamData)| {
(
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
- GenericParamData::LifetimeParamData(p.clone()),
+ GenericParamDataRef::LifetimeParamData(p),
)
};
let lt_iter = it.params.iter_lt().map(from_lt_id);