Adjust pretty printing of RPITITs
This commit is contained in:
parent
ec170bef0d
commit
270b776ef9
@ -61,6 +61,7 @@
|
||||
use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed, IntoDiagnosticArg};
|
||||
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticStyledString, MultiSpan};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||
use rustc_hir::lang_items::LangItem;
|
||||
use rustc_hir::Node;
|
||||
@ -1682,6 +1683,19 @@ enum Mismatch<'a> {
|
||||
pos.col.to_usize() + 1,
|
||||
)
|
||||
}
|
||||
(true, ty::Projection(proj))
|
||||
if self.tcx.def_kind(proj.item_def_id)
|
||||
== DefKind::ImplTraitPlaceholder =>
|
||||
{
|
||||
let sm = self.tcx.sess.source_map();
|
||||
let pos = sm.lookup_char_pos(self.tcx.def_span(proj.item_def_id).lo());
|
||||
format!(
|
||||
" (trait associated opaque type at <{}:{}:{}>)",
|
||||
sm.filename_for_diagnostics(&pos.file.name),
|
||||
pos.line,
|
||||
pos.col.to_usize() + 1,
|
||||
)
|
||||
}
|
||||
(true, _) => format!(" ({})", ty.sort_string(self.tcx)),
|
||||
(false, _) => "".to_string(),
|
||||
};
|
||||
|
@ -632,7 +632,13 @@ fn pretty_print_type(mut self, ty: Ty<'tcx>) -> Result<Self::Type, Self::Error>
|
||||
ty::Foreign(def_id) => {
|
||||
p!(print_def_path(def_id, &[]));
|
||||
}
|
||||
ty::Projection(ref data) => p!(print(data)),
|
||||
ty::Projection(ref data) => {
|
||||
if self.tcx().def_kind(data.item_def_id) == DefKind::ImplTraitPlaceholder {
|
||||
return self.pretty_print_opaque_impl_type(data.item_def_id, data.substs);
|
||||
} else {
|
||||
p!(print(data))
|
||||
}
|
||||
}
|
||||
ty::Placeholder(placeholder) => p!(write("Placeholder({:?})", placeholder)),
|
||||
ty::Opaque(def_id, substs) => {
|
||||
// FIXME(eddyb) print this with `print_def_path`.
|
||||
|
@ -48,8 +48,8 @@ LL | async fn foo() {}
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| ------------------------------- the found opaque type
|
||||
|
|
||||
= note: expected associated type `<Self as T>::foo::{opaque#0}`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: expected associated type `impl Future<Output = ()>` (trait associated opaque type at <$DIR/async-trait-fn.rs:3:20>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/async-trait-fn.rs:5:25
|
||||
@ -62,8 +62,8 @@ LL | async fn bar(&self) {}
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| ------------------------------- the found opaque type
|
||||
|
|
||||
= note: expected associated type `<Self as T>::bar::{opaque#0}<'_>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: expected associated type `impl Future<Output = ()>` (trait associated opaque type at <$DIR/async-trait-fn.rs:5:25>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/async-trait-fn.rs:7:20
|
||||
@ -81,8 +81,8 @@ LL | | }
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| ------------------------------- the found opaque type
|
||||
|
|
||||
= note: expected associated type `<Self as T>::baz::{opaque#0}`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: expected associated type `impl Future<Output = ()>` (trait associated opaque type at <$DIR/async-trait-fn.rs:7:20>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
@ -103,8 +103,8 @@ LL | async fn foo() {}
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| ------------------------------- the found opaque type
|
||||
|
|
||||
= note: expected associated type `<Self as Bar>::foo::{opaque#0}`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: expected associated type `impl Future<Output = ()>` (trait associated opaque type at <$DIR/edition-deny-async-fns-2015.rs:18:20>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
||||
|
@ -85,8 +85,8 @@ LL | trait C{async fn new(val: T) {}
|
||||
LL | pub const fn from_generator<T>(gen: T) -> impl Future<Output = T::Return>
|
||||
| ------------------------------- the found opaque type
|
||||
|
|
||||
= note: expected associated type `<Self as C>::new::{opaque#0}`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: expected associated type `impl Future<Output = ()>` (trait associated opaque type at <$DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:30>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>)
|
||||
|
||||
warning: changes to closure capture in Rust 2021 will affect drop order
|
||||
--> $DIR/drop-location-span-error-rust-2021-incompatible-closure-captures-93117.rs:13:30
|
||||
|
Loading…
Reference in New Issue
Block a user