From 6a05cd85adf99445a9064a0bbc71b507fcb3856e Mon Sep 17 00:00:00 2001 From: IQuant Date: Thu, 9 Mar 2023 21:59:40 +0300 Subject: [PATCH] A more general implementation of `IntoDiagnosticArg` for `Binder` (Also removes `DiagArg`, as it's no longer necessary) --- compiler/rustc_infer/src/errors/mod.rs | 12 ++-------- .../src/infer/error_reporting/suggest.rs | 6 ++--- compiler/rustc_middle/src/ty/sty.rs | 24 +++++++++---------- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/compiler/rustc_infer/src/errors/mod.rs b/compiler/rustc_infer/src/errors/mod.rs index 2a5d3516c28f..b129621130d4 100644 --- a/compiler/rustc_infer/src/errors/mod.rs +++ b/compiler/rustc_infer/src/errors/mod.rs @@ -1146,14 +1146,6 @@ pub struct OpaqueCapturesLifetime<'tcx> { pub opaque_ty: Ty<'tcx>, } -pub struct DiagArg(pub T); - -impl IntoDiagnosticArg for DiagArg { - fn into_diagnostic_arg(self) -> rustc_errors::DiagnosticArgValue<'static> { - self.0.to_string().into_diagnostic_arg() - } -} - #[derive(Subdiagnostic)] pub enum FunctionPointerSuggestion<'a> { #[suggestion( @@ -1221,7 +1213,7 @@ pub enum FunctionPointerSuggestion<'a> { fn_name: String, #[skip_arg] found_sig: Binder<'a, FnSig<'a>>, - expected_sig: DiagArg>>, + expected_sig: Binder<'a, FnSig<'a>>, }, #[suggestion( infer_fps_cast_both, @@ -1236,7 +1228,7 @@ pub enum FunctionPointerSuggestion<'a> { fn_name: String, #[skip_arg] found_sig: Binder<'a, FnSig<'a>>, - expected_sig: DiagArg>>, + expected_sig: Binder<'a, FnSig<'a>>, }, } diff --git a/compiler/rustc_infer/src/infer/error_reporting/suggest.rs b/compiler/rustc_infer/src/infer/error_reporting/suggest.rs index 82cd05e3d07e..b5aeca12a1f0 100644 --- a/compiler/rustc_infer/src/infer/error_reporting/suggest.rs +++ b/compiler/rustc_infer/src/infer/error_reporting/suggest.rs @@ -13,7 +13,7 @@ use rustc_span::{sym, BytePos, Span}; use rustc_target::abi::FieldIdx; use crate::errors::{ - ConsiderAddingAwait, DiagArg, FnConsiderCasting, FnItemsAreDistinct, FnUniqTypes, + ConsiderAddingAwait, FnConsiderCasting, FnItemsAreDistinct, FnUniqTypes, FunctionPointerSuggestion, SuggestAccessingField, SuggestAsRefWhereAppropriate, SuggestBoxingForReturnImplTrait, SuggestRemoveSemiOrReturnBinding, SuggestTuplePatternMany, SuggestTuplePatternOne, TypeErrorAdditionalDiags, @@ -379,14 +379,14 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> { span, fn_name, found_sig: *found_sig, - expected_sig: DiagArg(*expected_sig), + expected_sig: *expected_sig, } } else { FunctionPointerSuggestion::CastBoth { span, fn_name, found_sig: *found_sig, - expected_sig: DiagArg(*expected_sig), + expected_sig: *expected_sig, } }; diff --git a/compiler/rustc_middle/src/ty/sty.rs b/compiler/rustc_middle/src/ty/sty.rs index 5ea77833af25..061f26384bd0 100644 --- a/compiler/rustc_middle/src/ty/sty.rs +++ b/compiler/rustc_middle/src/ty/sty.rs @@ -15,6 +15,7 @@ use hir::def::DefKind; use polonius_engine::Atom; use rustc_data_structures::captures::Captures; use rustc_data_structures::intern::Interned; +use rustc_errors::{DiagnosticArgValue, IntoDiagnosticArg}; use rustc_hir as hir; use rustc_hir::def_id::DefId; use rustc_hir::LangItem; @@ -26,7 +27,7 @@ use rustc_target::abi::{FieldIdx, VariantIdx, FIRST_VARIANT}; use rustc_target::spec::abi::{self, Abi}; use std::borrow::Cow; use std::cmp::Ordering; -use std::fmt; +use std::fmt::{self, Display}; use std::marker::PhantomData; use std::ops::{ControlFlow, Deref, Range}; use ty::util::IntTypeExt; @@ -877,12 +878,6 @@ impl<'tcx> PolyTraitRef<'tcx> { } } -impl rustc_errors::IntoDiagnosticArg for PolyTraitRef<'_> { - fn into_diagnostic_arg(self) -> rustc_errors::DiagnosticArgValue<'static> { - self.to_string().into_diagnostic_arg() - } -} - /// An existential reference to a trait, where `Self` is erased. /// For example, the trait object `Trait<'a, 'b, X, Y>` is: /// ```ignore (illustrative) @@ -939,12 +934,6 @@ impl<'tcx> PolyExistentialTraitRef<'tcx> { } } -impl rustc_errors::IntoDiagnosticArg for PolyExistentialTraitRef<'_> { - fn into_diagnostic_arg(self) -> rustc_errors::DiagnosticArgValue<'static> { - self.to_string().into_diagnostic_arg() - } -} - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TyEncodable, TyDecodable)] #[derive(HashStable)] pub enum BoundVariableKind { @@ -1159,6 +1148,15 @@ impl<'tcx, T: IntoIterator> Binder<'tcx, T> { } } +impl<'tcx, T> IntoDiagnosticArg for Binder<'tcx, T> +where + Binder<'tcx, T>: Display, +{ + fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> { + self.to_string().into_diagnostic_arg() + } +} + struct SkipBindersAt<'tcx> { tcx: TyCtxt<'tcx>, index: ty::DebruijnIndex,