Rollup merge of #114548 - fee1-dead-contrib:migrate-to-trans, r=davidtwco
Migrate a trait selection error to use diagnostic translation
This commit is contained in:
commit
0c2f179901
5 changed files with 79 additions and 41 deletions
|
@ -7,6 +7,7 @@ use std::fmt::Write;
|
|||
|
||||
use crate::query::Providers;
|
||||
use rustc_data_structures::fx::FxIndexMap;
|
||||
use rustc_errors::{DiagnosticArgValue, IntoDiagnosticArg};
|
||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||
use rustc_hir::{self as hir, LangItem};
|
||||
use rustc_span::def_id::LocalDefIdMap;
|
||||
|
@ -89,10 +90,18 @@ pub enum ClosureKind {
|
|||
FnOnce,
|
||||
}
|
||||
|
||||
impl<'tcx> ClosureKind {
|
||||
impl ClosureKind {
|
||||
/// This is the initial value used when doing upvar inference.
|
||||
pub const LATTICE_BOTTOM: ClosureKind = ClosureKind::Fn;
|
||||
|
||||
pub const fn as_str(self) -> &'static str {
|
||||
match self {
|
||||
ClosureKind::Fn => "Fn",
|
||||
ClosureKind::FnMut => "FnMut",
|
||||
ClosureKind::FnOnce => "FnOnce",
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns `true` if a type that impls this closure kind
|
||||
/// must also implement `other`.
|
||||
pub fn extends(self, other: ty::ClosureKind) -> bool {
|
||||
|
@ -115,7 +124,7 @@ impl<'tcx> ClosureKind {
|
|||
|
||||
/// Returns the representative scalar type for this closure kind.
|
||||
/// See `Ty::to_opt_closure_kind` for more details.
|
||||
pub fn to_ty(self, tcx: TyCtxt<'tcx>) -> Ty<'tcx> {
|
||||
pub fn to_ty<'tcx>(self, tcx: TyCtxt<'tcx>) -> Ty<'tcx> {
|
||||
match self {
|
||||
ClosureKind::Fn => tcx.types.i8,
|
||||
ClosureKind::FnMut => tcx.types.i16,
|
||||
|
@ -124,6 +133,12 @@ impl<'tcx> ClosureKind {
|
|||
}
|
||||
}
|
||||
|
||||
impl IntoDiagnosticArg for ClosureKind {
|
||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||
DiagnosticArgValue::Str(self.as_str().into())
|
||||
}
|
||||
}
|
||||
|
||||
/// A composite describing a `Place` that is captured by a closure.
|
||||
#[derive(PartialEq, Clone, Debug, TyEncodable, TyDecodable, HashStable)]
|
||||
#[derive(TypeFoldable, TypeVisitable)]
|
||||
|
|
|
@ -2875,11 +2875,7 @@ define_print_and_forward_display! {
|
|||
}
|
||||
|
||||
ty::ClosureKind {
|
||||
match *self {
|
||||
ty::ClosureKind::Fn => p!("Fn"),
|
||||
ty::ClosureKind::FnMut => p!("FnMut"),
|
||||
ty::ClosureKind::FnOnce => p!("FnOnce"),
|
||||
}
|
||||
p!(write("{}", self.as_str()))
|
||||
}
|
||||
|
||||
ty::Predicate<'tcx> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue