Skip to content

Commit 0e54e2b

Browse files
committed
use references in Generics iter methods
1 parent b357bca commit 0e54e2b

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

crates/hir-def/src/generics.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ impl GenericParamData {
142142

143143
impl_from!(TypeParamData, ConstParamData, LifetimeParamData for GenericParamData);
144144

145+
pub enum GenericParamDataRef<'a> {
146+
TypeParamData(&'a TypeParamData),
147+
ConstParamData(&'a ConstParamData),
148+
LifetimeParamData(&'a LifetimeParamData),
149+
}
150+
145151
/// Data about the generic parameters of a function, struct, impl, etc.
146152
#[derive(Clone, PartialEq, Eq, Debug, Hash)]
147153
pub struct GenericParams {

crates/hir-ty/src/display.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//! purposes.
44
55
use std::{
6-
cmp::Ordering,
76
fmt::{self, Debug},
87
mem::size_of,
98
};
@@ -1324,6 +1323,7 @@ fn hir_fmt_generics(
13241323
) -> Result<(), HirDisplayError> {
13251324
let db = f.db;
13261325
if parameters.len(Interner) > 0 {
1326+
use std::cmp::Ordering;
13271327
let param_compare =
13281328
|a: &GenericArg, b: &GenericArg| match (a.data(Interner), b.data(Interner)) {
13291329
(crate::GenericArgData::Lifetime(_), crate::GenericArgData::Lifetime(_)) => {

crates/hir-ty/src/lower.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use hir_def::{
2424
data::adt::StructKind,
2525
expander::Expander,
2626
generics::{
27-
GenericParamData, TypeOrConstParamData, TypeParamProvenance, WherePredicate,
27+
GenericParamDataRef, TypeOrConstParamData, TypeParamProvenance, WherePredicate,
2828
WherePredicateTypeTarget,
2929
},
3030
lang_item::LangItem,
@@ -356,7 +356,7 @@ impl<'a> TyLoweringContext<'a> {
356356
.filter(|(_, data)| {
357357
matches!(
358358
data,
359-
GenericParamData::TypeParamData(data)
359+
GenericParamDataRef::TypeParamData(data)
360360
if data.provenance == TypeParamProvenance::ArgumentImplTrait
361361
)
362362
})
@@ -1770,7 +1770,7 @@ pub(crate) fn generic_defaults_query(
17701770

17711771
let defaults = Arc::from_iter(generic_params.iter().enumerate().map(|(idx, (id, p))| {
17721772
match p {
1773-
GenericParamData::TypeParamData(p) => {
1773+
GenericParamDataRef::TypeParamData(p) => {
17741774
let mut ty =
17751775
p.default.as_ref().map_or(TyKind::Error.intern(Interner), |t| ctx.lower_ty(t));
17761776
// Each default can only refer to previous parameters.
@@ -1779,7 +1779,7 @@ pub(crate) fn generic_defaults_query(
17791779
ty = fallback_bound_vars(ty, idx, parent_start_idx);
17801780
crate::make_binders(db, &generic_params, ty.cast(Interner))
17811781
}
1782-
GenericParamData::ConstParamData(p) => {
1782+
GenericParamDataRef::ConstParamData(p) => {
17831783
let GenericParamId::ConstParamId(id) = id else {
17841784
unreachable!("Unexpected lifetime or type argument")
17851785
};
@@ -1795,7 +1795,7 @@ pub(crate) fn generic_defaults_query(
17951795
val = fallback_bound_vars(val, idx, parent_start_idx);
17961796
make_binders(db, &generic_params, val)
17971797
}
1798-
GenericParamData::LifetimeParamData(_) => {
1798+
GenericParamDataRef::LifetimeParamData(_) => {
17991799
// using static because it requires defaults
18001800
make_binders(db, &generic_params, static_lifetime().cast(Interner))
18011801
}

crates/hir-ty/src/utils.rs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use chalk_ir::{
1212
use hir_def::{
1313
db::DefDatabase,
1414
generics::{
15-
GenericParamData, GenericParams, LifetimeParamData, TypeOrConstParamData,
15+
GenericParamDataRef, GenericParams, LifetimeParamData, TypeOrConstParamData,
1616
TypeParamProvenance, WherePredicate, WherePredicateTypeTarget,
1717
},
1818
lang_item::LangItem,
@@ -277,28 +277,28 @@ impl Generics {
277277
/// Iterator over types and const params of self, then parent.
278278
pub(crate) fn iter<'a>(
279279
&'a self,
280-
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + 'a {
280+
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
281281
let from_toc_id = |it: &'a Generics| {
282-
move |(local_id, p): (_, &TypeOrConstParamData)| {
282+
move |(local_id, p): (_, &'a TypeOrConstParamData)| {
283283
let id = TypeOrConstParamId { parent: it.def, local_id };
284284
match p {
285285
TypeOrConstParamData::TypeParamData(p) => (
286286
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
287-
GenericParamData::TypeParamData(p.clone()),
287+
GenericParamDataRef::TypeParamData(p),
288288
),
289289
TypeOrConstParamData::ConstParamData(p) => (
290290
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
291-
GenericParamData::ConstParamData(p.clone()),
291+
GenericParamDataRef::ConstParamData(p),
292292
),
293293
}
294294
}
295295
};
296296

297297
let from_lt_id = |it: &'a Generics| {
298-
move |(local_id, p): (_, &LifetimeParamData)| {
298+
move |(local_id, p): (_, &'a LifetimeParamData)| {
299299
(
300300
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
301-
GenericParamData::LifetimeParamData(p.clone()),
301+
GenericParamDataRef::LifetimeParamData(p),
302302
)
303303
}
304304
};
@@ -310,28 +310,28 @@ impl Generics {
310310
/// Iterate over types and const params without parent params.
311311
pub(crate) fn iter_self<'a>(
312312
&'a self,
313-
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + 'a {
313+
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
314314
let from_toc_id = |it: &'a Generics| {
315-
move |(local_id, p): (_, &TypeOrConstParamData)| {
315+
move |(local_id, p): (_, &'a TypeOrConstParamData)| {
316316
let id = TypeOrConstParamId { parent: it.def, local_id };
317317
match p {
318318
TypeOrConstParamData::TypeParamData(p) => (
319319
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
320-
GenericParamData::TypeParamData(p.clone()),
320+
GenericParamDataRef::TypeParamData(p),
321321
),
322322
TypeOrConstParamData::ConstParamData(p) => (
323323
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
324-
GenericParamData::ConstParamData(p.clone()),
324+
GenericParamDataRef::ConstParamData(p),
325325
),
326326
}
327327
}
328328
};
329329

330330
let from_lt_id = |it: &'a Generics| {
331-
move |(local_id, p): (_, &LifetimeParamData)| {
331+
move |(local_id, p): (_, &'a LifetimeParamData)| {
332332
(
333333
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
334-
GenericParamData::LifetimeParamData(p.clone()),
334+
GenericParamDataRef::LifetimeParamData(p),
335335
)
336336
}
337337
};
@@ -340,28 +340,29 @@ impl Generics {
340340
}
341341

342342
/// Iterator over types and const params of parent.
343-
pub(crate) fn iter_parent(
344-
&self,
345-
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamData)> + '_ {
343+
#[allow(clippy::needless_lifetimes)]
344+
pub(crate) fn iter_parent<'a>(
345+
&'a self,
346+
) -> impl DoubleEndedIterator<Item = (GenericParamId, GenericParamDataRef<'a>)> + 'a {
346347
self.parent_generics().into_iter().flat_map(|it| {
347-
let from_toc_id = move |(local_id, p): (_, &TypeOrConstParamData)| {
348+
let from_toc_id = move |(local_id, p): (_, &'a TypeOrConstParamData)| {
348349
let id = TypeOrConstParamId { parent: it.def, local_id };
349350
match p {
350351
TypeOrConstParamData::TypeParamData(p) => (
351352
GenericParamId::TypeParamId(TypeParamId::from_unchecked(id)),
352-
GenericParamData::TypeParamData(p.clone()),
353+
GenericParamDataRef::TypeParamData(p),
353354
),
354355
TypeOrConstParamData::ConstParamData(p) => (
355356
GenericParamId::ConstParamId(ConstParamId::from_unchecked(id)),
356-
GenericParamData::ConstParamData(p.clone()),
357+
GenericParamDataRef::ConstParamData(p),
357358
),
358359
}
359360
};
360361

361-
let from_lt_id = move |(local_id, p): (_, &LifetimeParamData)| {
362+
let from_lt_id = move |(local_id, p): (_, &'a LifetimeParamData)| {
362363
(
363364
GenericParamId::LifetimeParamId(LifetimeParamId { parent: it.def, local_id }),
364-
GenericParamData::LifetimeParamData(p.clone()),
365+
GenericParamDataRef::LifetimeParamData(p),
365366
)
366367
};
367368
let lt_iter = it.params.iter_lt().map(from_lt_id);

0 commit comments

Comments
 (0)