Auto merge of #17963 - avrong:avrong/error-lifetimes, r=Veykril
Always show error lifetime arguments as `'_`
Fixes #17947
Changed error lifetime argument presentation in non-test environment to `'_` and now showing them even if all of args are error lifetimes.
This also influenced some of the other tests like `extract_function.rs`, `predicate.rs` and `type_pos.rs`. Not sure whether I need to refrain from adding lifetimes args there. Happy to fix if needed
diff --git a/crates/hir-ty/src/display.rs b/crates/hir-ty/src/display.rs
index 4ef0531..4a5eaaa 100644
--- a/crates/hir-ty/src/display.rs
+++ b/crates/hir-ty/src/display.rs
@@ -1438,17 +1438,7 @@
let parameters_to_write = generic_args_sans_defaults(f, generic_def, parameters);
- // FIXME: Remote this
- // most of our lifetimes will be errors as we lack elision and inference
- // so don't render them for now
- let only_err_lifetimes = !cfg!(test)
- && parameters_to_write.iter().all(|arg| {
- matches!(
- arg.data(Interner),
- chalk_ir::GenericArgData::Lifetime(it) if *it.data(Interner) == LifetimeData::Error
- )
- });
- if !parameters_to_write.is_empty() && !only_err_lifetimes {
+ if !parameters_to_write.is_empty() {
write!(f, "<")?;
hir_fmt_generic_arguments(f, parameters_to_write, self_)?;
write!(f, ">")?;
@@ -1523,18 +1513,6 @@
None => (parameters, &[][..]),
};
for generic_arg in lifetimes.iter().chain(ty_or_const) {
- // FIXME: Remove this
- // most of our lifetimes will be errors as we lack elision and inference
- // so don't render them for now
- if !cfg!(test)
- && matches!(
- generic_arg.lifetime(Interner),
- Some(l) if ***l.interned() == LifetimeData::Error
- )
- {
- continue;
- }
-
if !mem::take(&mut first) {
write!(f, ", ")?;
}
@@ -1872,7 +1850,13 @@
LifetimeData::BoundVar(idx) => idx.hir_fmt(f),
LifetimeData::InferenceVar(_) => write!(f, "_"),
LifetimeData::Static => write!(f, "'static"),
- LifetimeData::Error => write!(f, "'?"),
+ LifetimeData::Error => {
+ if cfg!(test) {
+ write!(f, "'?")
+ } else {
+ write!(f, "'_")
+ }
+ }
LifetimeData::Erased => write!(f, "'<erased>"),
LifetimeData::Phantom(void, _) => match *void {},
}
@@ -1887,7 +1871,7 @@
wc.hir_fmt(f)?;
write!(f, ")")?;
}
- _ => write!(f, "?")?,
+ _ => write!(f, "_")?,
}
Ok(())
}
diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs
index fd0b11f..ad0be89 100644
--- a/crates/ide-assists/src/handlers/extract_function.rs
+++ b/crates/ide-assists/src/handlers/extract_function.rs
@@ -5650,7 +5650,7 @@
fun_name(i);
}
-fn $0fun_name(i: Struct<T>) {
+fn $0fun_name(i: Struct<'_, T>) {
foo(i);
}
"#,
diff --git a/crates/ide-completion/src/tests/predicate.rs b/crates/ide-completion/src/tests/predicate.rs
index 62eb642..46a3e97 100644
--- a/crates/ide-completion/src/tests/predicate.rs
+++ b/crates/ide-completion/src/tests/predicate.rs
@@ -19,7 +19,7 @@
en Enum Enum
ma makro!(…) macro_rules! makro
md module
- st Foo<…> Foo<{unknown}, _>
+ st Foo<…> Foo<'_, {unknown}, _>
st Record Record
st Tuple Tuple
st Unit Unit
@@ -92,7 +92,7 @@
en Enum Enum
ma makro!(…) macro_rules! makro
md module
- st Foo<…> Foo<{unknown}, _>
+ st Foo<…> Foo<'_, {unknown}, _>
st Record Record
st Tuple Tuple
st Unit Unit
diff --git a/crates/ide-completion/src/tests/type_pos.rs b/crates/ide-completion/src/tests/type_pos.rs
index ff38c16..db4ac93 100644
--- a/crates/ide-completion/src/tests/type_pos.rs
+++ b/crates/ide-completion/src/tests/type_pos.rs
@@ -20,8 +20,8 @@
en Enum Enum
ma makro!(…) macro_rules! makro
md module
- sp Self Foo<{unknown}, _>
- st Foo<…> Foo<{unknown}, _>
+ sp Self Foo<'_, {unknown}, _>
+ st Foo<…> Foo<'_, {unknown}, _>
st Record Record
st Tuple Tuple
st Unit Unit
@@ -45,8 +45,8 @@
en Enum Enum
ma makro!(…) macro_rules! makro
md module
- sp Self Foo<{unknown}, _>
- st Foo<…> Foo<{unknown}, _>
+ sp Self Foo<'_, {unknown}, _>
+ st Foo<…> Foo<'_, {unknown}, _>
st Record Record
st Tuple Tuple
st Unit Unit
diff --git a/crates/ide/src/inlay_hints/bind_pat.rs b/crates/ide/src/inlay_hints/bind_pat.rs
index d67afe1..82b0a6f 100644
--- a/crates/ide/src/inlay_hints/bind_pat.rs
+++ b/crates/ide/src/inlay_hints/bind_pat.rs
@@ -342,7 +342,7 @@
let x = S::<'static>;
//^ S<'static>
let y = S::<'_>;
- //^ S
+ //^ S<'_>
let z = S::<'a>;
//^ S<'a>