Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/expr_store/pretty.rs')
-rw-r--r--crates/hir-def/src/expr_store/pretty.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/crates/hir-def/src/expr_store/pretty.rs b/crates/hir-def/src/expr_store/pretty.rs
index 5adf462062..f12a9b7a54 100644
--- a/crates/hir-def/src/expr_store/pretty.rs
+++ b/crates/hir-def/src/expr_store/pretty.rs
@@ -10,7 +10,6 @@ use hir_expand::{Lookup, mod_path::PathKind};
use itertools::Itertools;
use span::Edition;
-use crate::signatures::StructFlags;
use crate::{
AdtId, DefWithBodyId, GenericDefId, ItemTreeLoc, TypeParamId, VariantId,
expr_store::path::{GenericArg, GenericArgs},
@@ -22,6 +21,7 @@ use crate::{
signatures::{FnFlags, FunctionSignature, StructSignature},
type_ref::{ConstRef, LifetimeRef, Mutability, TraitBoundModifier, TypeBound, UseArgRef},
};
+use crate::{LifetimeParamId, signatures::StructFlags};
use crate::{item_tree::FieldsShape, signatures::FieldData};
use super::*;
@@ -342,9 +342,9 @@ fn print_where_clauses(db: &dyn DefDatabase, generic_params: &GenericParams, p:
p.print_type_bounds(std::slice::from_ref(bound));
}
WherePredicate::Lifetime { target, bound } => {
- p.print_lifetime_ref(target);
+ p.print_lifetime_ref(*target);
w!(p, ": ");
- p.print_lifetime_ref(bound);
+ p.print_lifetime_ref(*bound);
}
WherePredicate::ForLifetime { lifetimes, target, bound } => {
w!(p, "for<");
@@ -1199,7 +1199,7 @@ impl Printer<'_> {
match arg {
GenericArg::Type(ty) => self.print_type_ref(*ty),
GenericArg::Const(ConstRef { expr }) => self.print_expr(*expr),
- GenericArg::Lifetime(lt) => self.print_lifetime_ref(lt),
+ GenericArg::Lifetime(lt) => self.print_lifetime_ref(*lt),
}
}
@@ -1212,14 +1212,20 @@ impl Printer<'_> {
}
}
- pub(crate) fn print_lifetime_ref(&mut self, lt_ref: &LifetimeRef) {
- match lt_ref {
+ pub(crate) fn print_lifetime_param(&mut self, param: LifetimeParamId) {
+ let generic_params = self.db.generic_params(param.parent);
+ w!(self, "{}", generic_params[param.local_id].name.display(self.db, self.edition))
+ }
+
+ pub(crate) fn print_lifetime_ref(&mut self, lt_ref: LifetimeRefId) {
+ match &self.store[lt_ref] {
LifetimeRef::Static => w!(self, "'static"),
LifetimeRef::Named(lt) => {
w!(self, "{}", lt.display(self.db, self.edition))
}
LifetimeRef::Placeholder => w!(self, "'_"),
LifetimeRef::Error => w!(self, "'{{error}}"),
+ &LifetimeRef::Param(p) => self.print_lifetime_param(p),
}
}
@@ -1255,7 +1261,7 @@ impl Printer<'_> {
};
w!(self, "&");
if let Some(lt) = &ref_.lifetime {
- self.print_lifetime_ref(lt);
+ self.print_lifetime_ref(*lt);
w!(self, " ");
}
w!(self, "{mtbl}");
@@ -1338,7 +1344,7 @@ impl Printer<'_> {
);
self.print_path(&self.store[*path]);
}
- TypeBound::Lifetime(lt) => self.print_lifetime_ref(lt),
+ TypeBound::Lifetime(lt) => self.print_lifetime_ref(*lt),
TypeBound::Use(args) => {
w!(self, "use<");
let mut first = true;
@@ -1350,7 +1356,7 @@ impl Printer<'_> {
UseArgRef::Name(it) => {
w!(self, "{}", it.display(self.db, self.edition))
}
- UseArgRef::Lifetime(it) => self.print_lifetime_ref(it),
+ UseArgRef::Lifetime(it) => self.print_lifetime_ref(*it),
}
}
w!(self, ">")