mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Move trait selection error reporting to its own top-level module
This commit is contained in:
parent
a06e9c83f6
commit
fe4c995ccb
@ -34,9 +34,9 @@ use rustc_span::def_id::LocalDefId;
|
|||||||
use rustc_span::hygiene::DesugaringKind;
|
use rustc_span::hygiene::DesugaringKind;
|
||||||
use rustc_span::symbol::{kw, sym, Ident};
|
use rustc_span::symbol::{kw, sym, Ident};
|
||||||
use rustc_span::{BytePos, Span, Symbol};
|
use rustc_span::{BytePos, Span, Symbol};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::FindExprBySpan;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::FindExprBySpan;
|
|
||||||
use rustc_trait_selection::traits::{Obligation, ObligationCause, ObligationCtxt};
|
use rustc_trait_selection::traits::{Obligation, ObligationCause, ObligationCtxt};
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
|
@ -17,7 +17,7 @@ use rustc_middle::ty::adjustment::PointerCoercion;
|
|||||||
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt};
|
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt};
|
||||||
use rustc_span::symbol::{kw, Symbol};
|
use rustc_span::symbol::{kw, Symbol};
|
||||||
use rustc_span::{sym, DesugaringKind, Span};
|
use rustc_span::{sym, DesugaringKind, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::FindExprBySpan;
|
use rustc_trait_selection::error_reporting::traits::FindExprBySpan;
|
||||||
|
|
||||||
use crate::region_infer::{BlameConstraint, ExtraConstraintInfo};
|
use crate::region_infer::{BlameConstraint, ExtraConstraintInfo};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -27,8 +27,8 @@ use rustc_span::def_id::LocalDefId;
|
|||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::{symbol::sym, Span, Symbol, DUMMY_SP};
|
use rustc_span::{symbol::sym, Span, Symbol, DUMMY_SP};
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
use rustc_target::abi::{FieldIdx, VariantIdx};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
type_known_to_meet_bound_modulo_regions, FulfillmentErrorCode,
|
type_known_to_meet_bound_modulo_regions, FulfillmentErrorCode,
|
||||||
};
|
};
|
||||||
|
@ -9,7 +9,7 @@ use rustc_middle::mir::*;
|
|||||||
use rustc_middle::ty::{self, Ty};
|
use rustc_middle::ty::{self, Ty};
|
||||||
use rustc_mir_dataflow::move_paths::{LookupResult, MovePathIndex};
|
use rustc_mir_dataflow::move_paths::{LookupResult, MovePathIndex};
|
||||||
use rustc_span::{BytePos, ExpnKind, MacroKind, Span};
|
use rustc_span::{BytePos, ExpnKind, MacroKind, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::FindExprBySpan;
|
use rustc_trait_selection::error_reporting::traits::FindExprBySpan;
|
||||||
|
|
||||||
use crate::diagnostics::CapturedMessageOpt;
|
use crate::diagnostics::CapturedMessageOpt;
|
||||||
use crate::diagnostics::{DescribePlaceOpt, UseSpans};
|
use crate::diagnostics::{DescribePlaceOpt, UseSpans};
|
||||||
|
@ -16,9 +16,9 @@ use rustc_middle::{
|
|||||||
use rustc_span::symbol::{kw, Symbol};
|
use rustc_span::symbol::{kw, Symbol};
|
||||||
use rustc_span::{sym, BytePos, DesugaringKind, Span};
|
use rustc_span::{sym, BytePos, DesugaringKind, Span};
|
||||||
use rustc_target::abi::FieldIdx;
|
use rustc_target::abi::FieldIdx;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt;
|
|
||||||
|
|
||||||
use crate::diagnostics::BorrowedContentSource;
|
use crate::diagnostics::BorrowedContentSource;
|
||||||
use crate::util::FindAssignments;
|
use crate::util::FindAssignments;
|
||||||
|
@ -11,7 +11,7 @@ use rustc_middle::ty::visit::TypeVisitableExt;
|
|||||||
use rustc_middle::ty::{self, OpaqueHiddenType, OpaqueTypeKey, Ty, TyCtxt, TypeFoldable};
|
use rustc_middle::ty::{self, OpaqueHiddenType, OpaqueTypeKey, Ty, TyCtxt, TypeFoldable};
|
||||||
use rustc_middle::ty::{GenericArgKind, GenericArgs};
|
use rustc_middle::ty::{GenericArgKind, GenericArgs};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
|
|
||||||
use crate::session_diagnostics::LifetimeMismatchOpaqueParam;
|
use crate::session_diagnostics::LifetimeMismatchOpaqueParam;
|
||||||
|
@ -11,8 +11,8 @@ use rustc_middle::traits::query::OutlivesBound;
|
|||||||
use rustc_middle::traits::ObligationCause;
|
use rustc_middle::traits::ObligationCause;
|
||||||
use rustc_middle::ty::{self, RegionVid, Ty, TypeVisitableExt};
|
use rustc_middle::ty::{self, RegionVid, Ty, TypeVisitableExt};
|
||||||
use rustc_span::{ErrorGuaranteed, Span};
|
use rustc_span::{ErrorGuaranteed, Span};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::solve::deeply_normalize;
|
use rustc_trait_selection::solve::deeply_normalize;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::query::type_op::{self, TypeOp};
|
use rustc_trait_selection::traits::query::type_op::{self, TypeOp};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use type_op::TypeOpOutput;
|
use type_op::TypeOpOutput;
|
||||||
|
@ -13,7 +13,7 @@ use rustc_middle::ty::{self, adjustment::PointerCoercion, Ty, TyCtxt};
|
|||||||
use rustc_middle::ty::{Instance, InstanceKind, TypeVisitableExt};
|
use rustc_middle::ty::{Instance, InstanceKind, TypeVisitableExt};
|
||||||
use rustc_mir_dataflow::Analysis;
|
use rustc_mir_dataflow::Analysis;
|
||||||
use rustc_span::{sym, Span, Symbol, DUMMY_SP};
|
use rustc_span::{sym, Span, Symbol, DUMMY_SP};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCauseCode, ObligationCtxt};
|
use rustc_trait_selection::traits::{self, ObligationCauseCode, ObligationCtxt};
|
||||||
use rustc_type_ir::visit::{TypeSuperVisitable, TypeVisitor};
|
use rustc_type_ir::visit::{TypeSuperVisitable, TypeVisitor};
|
||||||
|
|
||||||
|
@ -25,9 +25,9 @@ use rustc_middle::ty::{
|
|||||||
};
|
};
|
||||||
use rustc_session::lint::builtin::{UNINHABITED_STATIC, UNSUPPORTED_CALLING_CONVENTIONS};
|
use rustc_session::lint::builtin::{UNINHABITED_STATIC, UNSUPPORTED_CALLING_CONVENTIONS};
|
||||||
use rustc_target::abi::FieldIdx;
|
use rustc_target::abi::FieldIdx;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::on_unimplemented::OnUnimplementedDirective;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_trait_selection::traits::error_reporting::on_unimplemented::OnUnimplementedDirective;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
||||||
use rustc_type_ir::fold::TypeFoldable;
|
use rustc_type_ir::fold::TypeFoldable;
|
||||||
|
|
||||||
|
@ -21,9 +21,9 @@ use rustc_middle::ty::{
|
|||||||
use rustc_middle::ty::{GenericParamDefKind, TyCtxt};
|
use rustc_middle::ty::{GenericParamDefKind, TyCtxt};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
self, FulfillmentError, ObligationCause, ObligationCauseCode, ObligationCtxt, Reveal,
|
self, FulfillmentError, ObligationCause, ObligationCauseCode, ObligationCtxt, Reveal,
|
||||||
|
@ -7,7 +7,7 @@ use rustc_session::config::EntryFnType;
|
|||||||
use rustc_span::def_id::{DefId, LocalDefId, CRATE_DEF_ID};
|
use rustc_span::def_id::{DefId, LocalDefId, CRATE_DEF_ID};
|
||||||
use rustc_span::{symbol::sym, Span};
|
use rustc_span::{symbol::sym, Span};
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCause, ObligationCauseCode};
|
use rustc_trait_selection::traits::{self, ObligationCause, ObligationCauseCode};
|
||||||
|
|
||||||
use std::ops::Not;
|
use std::ops::Not;
|
||||||
|
@ -96,10 +96,10 @@ use rustc_span::symbol::{kw, sym, Ident};
|
|||||||
use rustc_span::{def_id::CRATE_DEF_ID, BytePos, Span, Symbol, DUMMY_SP};
|
use rustc_span::{def_id::CRATE_DEF_ID, BytePos, Span, Symbol, DUMMY_SP};
|
||||||
use rustc_target::abi::VariantIdx;
|
use rustc_target::abi::VariantIdx;
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::{
|
use rustc_trait_selection::error_reporting::traits::suggestions::{
|
||||||
ReturnsVisitor, TypeErrCtxtExt as _,
|
ReturnsVisitor, TypeErrCtxtExt as _,
|
||||||
};
|
};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
|
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
|
@ -29,8 +29,8 @@ use rustc_session::parse::feature_err;
|
|||||||
use rustc_span::symbol::{sym, Ident};
|
use rustc_span::symbol::{sym, Ident};
|
||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::misc::{
|
use rustc_trait_selection::traits::misc::{
|
||||||
type_allowed_to_implement_const_param_ty, ConstParamTyImplementationError,
|
type_allowed_to_implement_const_param_ty, ConstParamTyImplementationError,
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@ use rustc_middle::ty::adjustment::CoerceUnsizedInfo;
|
|||||||
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
||||||
use rustc_middle::ty::{self, suggest_constraining_type_params, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, suggest_constraining_type_params, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::traits::misc::{
|
use rustc_trait_selection::traits::misc::{
|
||||||
type_allowed_to_implement_const_param_ty, type_allowed_to_implement_copy,
|
type_allowed_to_implement_const_param_ty, type_allowed_to_implement_copy,
|
||||||
ConstParamTyImplementationError, CopyImplementationError, InfringingFieldsReason,
|
ConstParamTyImplementationError, CopyImplementationError, InfringingFieldsReason,
|
||||||
|
@ -35,8 +35,8 @@ use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
|||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use rustc_target::abi::FieldIdx;
|
use rustc_target::abi::FieldIdx;
|
||||||
use rustc_target::spec::abi;
|
use rustc_target::spec::abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::NextTypeParamName;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::NextTypeParamName;
|
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
@ -4,7 +4,6 @@ use crate::errors::{
|
|||||||
};
|
};
|
||||||
use crate::fluent_generated as fluent;
|
use crate::fluent_generated as fluent;
|
||||||
use crate::hir_ty_lowering::HirTyLowerer;
|
use crate::hir_ty_lowering::HirTyLowerer;
|
||||||
use crate::traits::error_reporting::report_object_safety_error;
|
|
||||||
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
|
||||||
use rustc_data_structures::sorted_map::SortedMap;
|
use rustc_data_structures::sorted_map::SortedMap;
|
||||||
use rustc_data_structures::unord::UnordMap;
|
use rustc_data_structures::unord::UnordMap;
|
||||||
@ -27,6 +26,7 @@ use rustc_span::edit_distance::find_best_match_for_name;
|
|||||||
use rustc_span::symbol::{kw, sym, Ident};
|
use rustc_span::symbol::{kw, sym, Ident};
|
||||||
use rustc_span::BytePos;
|
use rustc_span::BytePos;
|
||||||
use rustc_span::{Span, Symbol, DUMMY_SP};
|
use rustc_span::{Span, Symbol, DUMMY_SP};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::report_object_safety_error;
|
||||||
use rustc_trait_selection::traits::FulfillmentError;
|
use rustc_trait_selection::traits::FulfillmentError;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
object_safety_violations_for_assoc_item, TraitAliasExpansionInfo,
|
object_safety_violations_for_assoc_item, TraitAliasExpansionInfo,
|
||||||
|
@ -4,7 +4,7 @@ use rustc_hir as hir;
|
|||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_lint_defs::{builtin::BARE_TRAIT_OBJECTS, Applicability};
|
use rustc_lint_defs::{builtin::BARE_TRAIT_OBJECTS, Applicability};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::NextTypeParamName;
|
use rustc_trait_selection::error_reporting::traits::suggestions::NextTypeParamName;
|
||||||
|
|
||||||
use super::HirTyLowerer;
|
use super::HirTyLowerer;
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ use rustc_middle::ty::fold::BottomUpFolder;
|
|||||||
use rustc_middle::ty::{self, ExistentialPredicateStableCmpExt as _, Ty, TyCtxt, TypeFoldable};
|
use rustc_middle::ty::{self, ExistentialPredicateStableCmpExt as _, Ty, TyCtxt, TypeFoldable};
|
||||||
use rustc_middle::ty::{DynKind, Upcast};
|
use rustc_middle::ty::{DynKind, Upcast};
|
||||||
use rustc_span::{ErrorGuaranteed, Span};
|
use rustc_span::{ErrorGuaranteed, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::report_object_safety_error;
|
use rustc_trait_selection::error_reporting::traits::report_object_safety_error;
|
||||||
use rustc_trait_selection::traits::{self, hir_ty_lowering_object_safety_violations};
|
use rustc_trait_selection::traits::{self, hir_ty_lowering_object_safety_violations};
|
||||||
|
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
|
@ -78,7 +78,7 @@ use rustc_middle::ty::trait_def::TraitSpecializationKind;
|
|||||||
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_middle::ty::{GenericArg, GenericArgs, GenericArgsRef};
|
use rustc_middle::ty::{GenericArg, GenericArgs, GenericArgsRef};
|
||||||
use rustc_span::{ErrorGuaranteed, Span};
|
use rustc_span::{ErrorGuaranteed, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
use rustc_trait_selection::traits::outlives_bounds::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{self, translate_args_with_cause, wf, ObligationCtxt};
|
use rustc_trait_selection::traits::{self, translate_args_with_cause, wf, ObligationCtxt};
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ use rustc_span::def_id::LocalDefId;
|
|||||||
use rustc_span::symbol::{sym, Ident};
|
use rustc_span::symbol::{sym, Ident};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::spec::abi;
|
use rustc_target::spec::abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::DefIdOrName;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt as _;
|
use rustc_trait_selection::infer::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::error_reporting::DefIdOrName;
|
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
|
|
||||||
use std::{iter, slice};
|
use std::{iter, slice};
|
||||||
|
@ -17,9 +17,9 @@ use rustc_middle::ty::{self, Ty, TyCtxt, TypeSuperVisitable, TypeVisitor};
|
|||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::ArgKind;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_trait_selection::traits::error_reporting::ArgKind;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::InferCtxtExt as _;
|
|
||||||
use rustc_type_ir::ClosureKind;
|
use rustc_type_ir::ClosureKind;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
|
@ -58,9 +58,9 @@ use rustc_session::parse::feature_err;
|
|||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::{BytePos, DesugaringKind, Span, DUMMY_SP};
|
use rustc_span::{BytePos, DesugaringKind, Span, DUMMY_SP};
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt as _;
|
use rustc_trait_selection::infer::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
self, NormalizeExt, ObligationCause, ObligationCauseCode, ObligationCtxt,
|
self, NormalizeExt, ObligationCause, ObligationCauseCode, ObligationCtxt,
|
||||||
|
@ -53,9 +53,9 @@ use rustc_span::source_map::Spanned;
|
|||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::{FieldIdx, FIRST_VARIANT};
|
use rustc_target::abi::{FieldIdx, FIRST_VARIANT};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt as _;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCauseCode};
|
use rustc_trait_selection::traits::{self, ObligationCauseCode};
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ use rustc_span::hygiene::DesugaringKind;
|
|||||||
use rustc_span::symbol::{kw, sym};
|
use rustc_span::symbol::{kw, sym};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::FieldIdx;
|
use rustc_target::abi::FieldIdx;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
self, NormalizeExt, ObligationCauseCode, ObligationCtxt, StructurallyNormalizeExt,
|
self, NormalizeExt, ObligationCauseCode, ObligationCtxt, StructurallyNormalizeExt,
|
||||||
};
|
};
|
||||||
|
@ -32,10 +32,10 @@ use rustc_session::errors::ExprParenthesesNeeded;
|
|||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{sym, Ident};
|
use rustc_span::symbol::{sym, Ident};
|
||||||
use rustc_span::{Span, Symbol};
|
use rustc_span::{Span, Symbol};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::DefIdOrName;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::DefIdOrName;
|
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
|
|
||||||
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
|
@ -35,9 +35,9 @@ use rustc_span::def_id::DefIdSet;
|
|||||||
use rustc_span::symbol::{kw, sym, Ident};
|
use rustc_span::symbol::{kw, sym, Ident};
|
||||||
use rustc_span::{edit_distance, ErrorGuaranteed, ExpnKind, FileName, MacroKind, Span};
|
use rustc_span::{edit_distance, ErrorGuaranteed, ExpnKind, FileName, MacroKind, Span};
|
||||||
use rustc_span::{Symbol, DUMMY_SP};
|
use rustc_span::{Symbol, DUMMY_SP};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::on_unimplemented::OnUnimplementedNote;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::on_unimplemented::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::on_unimplemented::OnUnimplementedNote;
|
|
||||||
use rustc_trait_selection::traits::error_reporting::on_unimplemented::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
supertraits, FulfillmentError, Obligation, ObligationCause, ObligationCauseCode,
|
supertraits, FulfillmentError, Obligation, ObligationCause, ObligationCauseCode,
|
||||||
|
@ -18,8 +18,8 @@ use rustc_session::errors::ExprParenthesesNeeded;
|
|||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{sym, Ident};
|
use rustc_span::symbol::{sym, Ident};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::{FulfillmentError, ObligationCtxt};
|
use rustc_trait_selection::traits::{FulfillmentError, ObligationCtxt};
|
||||||
use rustc_type_ir::TyKind::*;
|
use rustc_type_ir::TyKind::*;
|
||||||
|
|
||||||
|
@ -18,8 +18,8 @@ use rustc_middle::ty::TypeSuperFoldable;
|
|||||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::solve;
|
use rustc_trait_selection::solve;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ use crate::LateContext;
|
|||||||
use crate::LateLintPass;
|
use crate::LateLintPass;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_session::{declare_lint, declare_lint_pass};
|
use rustc_session::{declare_lint, declare_lint_pass};
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::suggest_desugaring_async_fn_to_impl_future_in_trait;
|
use rustc_trait_selection::error_reporting::traits::suggestions::suggest_desugaring_async_fn_to_impl_future_in_trait;
|
||||||
|
|
||||||
declare_lint! {
|
declare_lint! {
|
||||||
/// The `async_fn_in_trait` lint detects use of `async fn` in the
|
/// The `async_fn_in_trait` lint detects use of `async fn` in the
|
||||||
|
@ -11,10 +11,10 @@ use rustc_session::{declare_lint, impl_lint_pass};
|
|||||||
use rustc_span::def_id::{DefId, LOCAL_CRATE};
|
use rustc_span::def_id::{DefId, LOCAL_CRATE};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::{sym, symbol::kw, ExpnKind, MacroKind, Symbol};
|
use rustc_span::{sym, symbol::kw, ExpnKind, MacroKind, Symbol};
|
||||||
use rustc_trait_selection::infer::TyCtxtInferExt;
|
use rustc_trait_selection::error_reporting::traits::ambiguity::{
|
||||||
use rustc_trait_selection::traits::error_reporting::ambiguity::{
|
|
||||||
compute_applicable_impls_for_diagnostics, CandidateSource,
|
compute_applicable_impls_for_diagnostics, CandidateSource,
|
||||||
};
|
};
|
||||||
|
use rustc_trait_selection::infer::TyCtxtInferExt;
|
||||||
|
|
||||||
use crate::fluent_generated as fluent;
|
use crate::fluent_generated as fluent;
|
||||||
use crate::lints::{NonLocalDefinitionsCargoUpdateNote, NonLocalDefinitionsDiag};
|
use crate::lints::{NonLocalDefinitionsCargoUpdateNote, NonLocalDefinitionsDiag};
|
||||||
|
@ -81,8 +81,8 @@ use rustc_span::symbol::sym;
|
|||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::{FieldIdx, VariantIdx};
|
use rustc_target::abi::{FieldIdx, VariantIdx};
|
||||||
use rustc_target::spec::PanicStrategy;
|
use rustc_target::spec::PanicStrategy;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use rustc_trait_selection::infer::TyCtxtInferExt as _;
|
use rustc_trait_selection::infer::TyCtxtInferExt as _;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt as _;
|
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
||||||
use std::{iter, ops};
|
use std::{iter, ops};
|
||||||
|
@ -34,8 +34,8 @@ use rustc_session::parse::feature_err;
|
|||||||
use rustc_span::symbol::{kw, sym, Symbol};
|
use rustc_span::symbol::{kw, sym, Symbol};
|
||||||
use rustc_span::{BytePos, Span, DUMMY_SP};
|
use rustc_span::{BytePos, Span, DUMMY_SP};
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::infer::{TyCtxtInferExt, ValuePairs};
|
use rustc_trait_selection::infer::{TyCtxtInferExt, ValuePairs};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
|
@ -8,7 +8,7 @@ use rustc_span::source_map::Spanned;
|
|||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::{HasDataLayout, TargetDataLayout};
|
use rustc_target::abi::{HasDataLayout, TargetDataLayout};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::{infer::TyCtxtInferExt, traits};
|
use rustc_trait_selection::{infer::TyCtxtInferExt, traits};
|
||||||
|
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
pub mod traits;
|
@ -6,10 +6,12 @@ pub mod on_unimplemented;
|
|||||||
pub mod suggestions;
|
pub mod suggestions;
|
||||||
mod type_err_ctxt_ext;
|
mod type_err_ctxt_ext;
|
||||||
|
|
||||||
use super::{Obligation, ObligationCause, ObligationCauseCode, PredicateObligation};
|
use rustc_data_structures::fx::FxIndexSet;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_hir::intravisit::Visitor;
|
use rustc_hir::intravisit::Visitor;
|
||||||
|
use rustc_infer::traits::{Obligation, ObligationCause, ObligationCauseCode, PredicateObligation};
|
||||||
|
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
@ -180,3 +182,61 @@ pub enum DefIdOrName {
|
|||||||
DefId(DefId),
|
DefId(DefId),
|
||||||
Name(&'static str),
|
Name(&'static str),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Recovers the "impl X for Y" signature from `impl_def_id` and returns it as a
|
||||||
|
/// string.
|
||||||
|
pub(crate) fn to_pretty_impl_header(tcx: TyCtxt<'_>, impl_def_id: DefId) -> Option<String> {
|
||||||
|
use std::fmt::Write;
|
||||||
|
|
||||||
|
let trait_ref = tcx.impl_trait_ref(impl_def_id)?.instantiate_identity();
|
||||||
|
let mut w = "impl".to_owned();
|
||||||
|
|
||||||
|
let args = ty::GenericArgs::identity_for_item(tcx, impl_def_id);
|
||||||
|
|
||||||
|
// FIXME: Currently only handles ?Sized.
|
||||||
|
// Needs to support ?Move and ?DynSized when they are implemented.
|
||||||
|
let mut types_without_default_bounds = FxIndexSet::default();
|
||||||
|
let sized_trait = tcx.lang_items().sized_trait();
|
||||||
|
|
||||||
|
let arg_names = args.iter().map(|k| k.to_string()).filter(|k| k != "'_").collect::<Vec<_>>();
|
||||||
|
if !arg_names.is_empty() {
|
||||||
|
types_without_default_bounds.extend(args.types());
|
||||||
|
w.push('<');
|
||||||
|
w.push_str(&arg_names.join(", "));
|
||||||
|
w.push('>');
|
||||||
|
}
|
||||||
|
|
||||||
|
write!(
|
||||||
|
w,
|
||||||
|
" {} for {}",
|
||||||
|
trait_ref.print_only_trait_path(),
|
||||||
|
tcx.type_of(impl_def_id).instantiate_identity()
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// The predicates will contain default bounds like `T: Sized`. We need to
|
||||||
|
// remove these bounds, and add `T: ?Sized` to any untouched type parameters.
|
||||||
|
let predicates = tcx.predicates_of(impl_def_id).predicates;
|
||||||
|
let mut pretty_predicates =
|
||||||
|
Vec::with_capacity(predicates.len() + types_without_default_bounds.len());
|
||||||
|
|
||||||
|
for (p, _) in predicates {
|
||||||
|
if let Some(poly_trait_ref) = p.as_trait_clause() {
|
||||||
|
if Some(poly_trait_ref.def_id()) == sized_trait {
|
||||||
|
// FIXME(#120456) - is `swap_remove` correct?
|
||||||
|
types_without_default_bounds.swap_remove(&poly_trait_ref.self_ty().skip_binder());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pretty_predicates.push(p.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
pretty_predicates.extend(types_without_default_bounds.iter().map(|ty| format!("{ty}: ?Sized")));
|
||||||
|
|
||||||
|
if !pretty_predicates.is_empty() {
|
||||||
|
write!(w, "\n where {}", pretty_predicates.join(", ")).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
w.push(';');
|
||||||
|
Some(w)
|
||||||
|
}
|
@ -1,10 +1,10 @@
|
|||||||
use super::{ObligationCauseCode, PredicateObligation};
|
use super::{ObligationCauseCode, PredicateObligation};
|
||||||
|
use crate::error_reporting::traits::type_err_ctxt_ext::InferCtxtPrivExt;
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
EmptyOnClauseInOnUnimplemented, InvalidOnClauseInOnUnimplemented, NoValueInOnUnimplemented,
|
EmptyOnClauseInOnUnimplemented, InvalidOnClauseInOnUnimplemented, NoValueInOnUnimplemented,
|
||||||
};
|
};
|
||||||
use crate::infer::error_reporting::TypeErrCtxt;
|
use crate::infer::error_reporting::TypeErrCtxt;
|
||||||
use crate::infer::InferCtxtExt;
|
use crate::infer::InferCtxtExt;
|
||||||
use crate::traits::error_reporting::type_err_ctxt_ext::InferCtxtPrivExt;
|
|
||||||
use rustc_ast::AttrArgs;
|
use rustc_ast::AttrArgs;
|
||||||
use rustc_ast::AttrArgsEq;
|
use rustc_ast::AttrArgsEq;
|
||||||
use rustc_ast::AttrKind;
|
use rustc_ast::AttrKind;
|
@ -44,8 +44,8 @@ use std::assert_matches::debug_assert_matches;
|
|||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
|
use crate::error_reporting::traits::type_err_ctxt_ext::InferCtxtPrivExt;
|
||||||
use crate::infer::InferCtxtExt as _;
|
use crate::infer::InferCtxtExt as _;
|
||||||
use crate::traits::error_reporting::type_err_ctxt_ext::InferCtxtPrivExt;
|
|
||||||
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
use rustc_middle::ty::print::{
|
use rustc_middle::ty::print::{
|
||||||
with_forced_trimmed_paths, with_no_trimmed_paths, PrintPolyTraitPredicateExt as _,
|
with_forced_trimmed_paths, with_no_trimmed_paths, PrintPolyTraitPredicateExt as _,
|
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
use super::on_unimplemented::{AppendConstMessage, OnUnimplementedNote, TypeErrCtxtExt as _};
|
use super::on_unimplemented::{AppendConstMessage, OnUnimplementedNote, TypeErrCtxtExt as _};
|
||||||
use super::suggestions::{get_explanation_based_on_obligation, TypeErrCtxtExt as _};
|
use super::suggestions::{get_explanation_based_on_obligation, TypeErrCtxtExt as _};
|
||||||
|
use crate::error_reporting::traits::infer_ctxt_ext::InferCtxtExt;
|
||||||
|
use crate::error_reporting::traits::to_pretty_impl_header;
|
||||||
|
use crate::error_reporting::traits::{ambiguity, ambiguity::CandidateSource::*};
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
AsyncClosureNotFn, ClosureFnMutLabel, ClosureFnOnceLabel, ClosureKindMismatch,
|
AsyncClosureNotFn, ClosureFnMutLabel, ClosureFnOnceLabel, ClosureKindMismatch,
|
||||||
};
|
};
|
||||||
use crate::infer::error_reporting::{TyCategory, TypeAnnotationNeeded as ErrorCode};
|
use crate::infer::error_reporting::{TyCategory, TypeAnnotationNeeded as ErrorCode};
|
||||||
use crate::infer::InferCtxtExt as _;
|
use crate::infer::InferCtxtExt as _;
|
||||||
use crate::infer::{self, InferCtxt};
|
use crate::infer::{self, InferCtxt};
|
||||||
use crate::traits::error_reporting::infer_ctxt_ext::InferCtxtExt;
|
|
||||||
use crate::traits::error_reporting::{ambiguity, ambiguity::CandidateSource::*};
|
|
||||||
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
use crate::traits::specialize::to_pretty_impl_header;
|
|
||||||
use crate::traits::NormalizeExt;
|
use crate::traits::NormalizeExt;
|
||||||
use crate::traits::{
|
use crate::traits::{
|
||||||
elaborate, FulfillmentError, FulfillmentErrorCode, MismatchedProjectionTypes, Obligation,
|
elaborate, FulfillmentError, FulfillmentErrorCode, MismatchedProjectionTypes, Obligation,
|
@ -33,6 +33,7 @@
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate tracing;
|
extern crate tracing;
|
||||||
|
|
||||||
|
pub mod error_reporting;
|
||||||
pub mod errors;
|
pub mod errors;
|
||||||
pub mod infer;
|
pub mod infer;
|
||||||
pub mod regions;
|
pub mod regions;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
use crate::traits::error_reporting::{OverflowCause, TypeErrCtxtExt};
|
use crate::error_reporting::traits::{OverflowCause, TypeErrCtxtExt};
|
||||||
use crate::traits::query::evaluate_obligation::InferCtxtExt;
|
use crate::traits::query::evaluate_obligation::InferCtxtExt;
|
||||||
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
|
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
|
||||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||||
|
@ -30,8 +30,8 @@ use rustc_span::symbol::sym;
|
|||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use super::error_reporting::suggest_new_overflow_limit;
|
|
||||||
use super::ObligationCtxt;
|
use super::ObligationCtxt;
|
||||||
|
use crate::error_reporting::traits::suggest_new_overflow_limit;
|
||||||
|
|
||||||
pub struct OverlapResult<'tcx> {
|
pub struct OverlapResult<'tcx> {
|
||||||
pub impl_header: ty::ImplHeader<'tcx>,
|
pub impl_header: ty::ImplHeader<'tcx>,
|
||||||
|
@ -3,10 +3,10 @@ use std::fmt::Debug;
|
|||||||
|
|
||||||
use super::{FromSolverError, TraitEngine};
|
use super::{FromSolverError, TraitEngine};
|
||||||
use super::{FulfillmentContext, ScrubbedTraitError};
|
use super::{FulfillmentContext, ScrubbedTraitError};
|
||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use crate::regions::InferCtxtRegionExt;
|
use crate::regions::InferCtxtRegionExt;
|
||||||
use crate::solve::FulfillmentCtxt as NextFulfillmentCtxt;
|
use crate::solve::FulfillmentCtxt as NextFulfillmentCtxt;
|
||||||
use crate::solve::NextSolverError;
|
use crate::solve::NextSolverError;
|
||||||
use crate::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use crate::traits::fulfill::OldSolverError;
|
use crate::traits::fulfill::OldSolverError;
|
||||||
use crate::traits::NormalizeExt;
|
use crate::traits::NormalizeExt;
|
||||||
use crate::traits::StructurallyNormalizeExt;
|
use crate::traits::StructurallyNormalizeExt;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use crate::infer::{InferCtxt, TyOrConstInferVar};
|
use crate::infer::{InferCtxt, TyOrConstInferVar};
|
||||||
use crate::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use crate::traits::normalize::normalize_with_depth_to;
|
use crate::traits::normalize::normalize_with_depth_to;
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
use rustc_data_structures::obligation_forest::ProcessResult;
|
use rustc_data_structures::obligation_forest::ProcessResult;
|
||||||
|
@ -6,7 +6,6 @@ pub mod auto_trait;
|
|||||||
pub(crate) mod coherence;
|
pub(crate) mod coherence;
|
||||||
pub mod const_evaluatable;
|
pub mod const_evaluatable;
|
||||||
mod engine;
|
mod engine;
|
||||||
pub mod error_reporting;
|
|
||||||
mod fulfill;
|
mod fulfill;
|
||||||
pub mod misc;
|
pub mod misc;
|
||||||
pub mod normalize;
|
pub mod normalize;
|
||||||
@ -24,10 +23,10 @@ mod util;
|
|||||||
pub mod vtable;
|
pub mod vtable;
|
||||||
pub mod wf;
|
pub mod wf;
|
||||||
|
|
||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt as _;
|
||||||
use crate::infer::outlives::env::OutlivesEnvironment;
|
use crate::infer::outlives::env::OutlivesEnvironment;
|
||||||
use crate::infer::{InferCtxt, TyCtxtInferExt};
|
use crate::infer::{InferCtxt, TyCtxtInferExt};
|
||||||
use crate::regions::InferCtxtRegionExt;
|
use crate::regions::InferCtxtRegionExt;
|
||||||
use crate::traits::error_reporting::TypeErrCtxtExt as _;
|
|
||||||
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_middle::query::Providers;
|
use rustc_middle::query::Providers;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
//! Deeply normalize types using the old trait solver.
|
//! Deeply normalize types using the old trait solver.
|
||||||
|
|
||||||
use super::error_reporting::OverflowCause;
|
|
||||||
use super::error_reporting::TypeErrCtxtExt;
|
|
||||||
use super::SelectionContext;
|
use super::SelectionContext;
|
||||||
use super::{project, with_replaced_escaping_bound_vars, BoundVarReplacer, PlaceholderReplacer};
|
use super::{project, with_replaced_escaping_bound_vars, BoundVarReplacer, PlaceholderReplacer};
|
||||||
|
use crate::error_reporting::traits::OverflowCause;
|
||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use crate::solve::NextSolverError;
|
use crate::solve::NextSolverError;
|
||||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||||
use rustc_infer::infer::at::At;
|
use rustc_infer::infer::at::At;
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
//! which folds deeply, invoking the underlying
|
//! which folds deeply, invoking the underlying
|
||||||
//! `normalize_canonicalized_projection_ty` query when it encounters projections.
|
//! `normalize_canonicalized_projection_ty` query when it encounters projections.
|
||||||
|
|
||||||
|
use crate::error_reporting::traits::OverflowCause;
|
||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use crate::infer::at::At;
|
use crate::infer::at::At;
|
||||||
use crate::infer::canonical::OriginalQueryValues;
|
use crate::infer::canonical::OriginalQueryValues;
|
||||||
use crate::infer::{InferCtxt, InferOk};
|
use crate::infer::{InferCtxt, InferOk};
|
||||||
use crate::traits::error_reporting::OverflowCause;
|
|
||||||
use crate::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use crate::traits::normalize::needs_normalization;
|
use crate::traits::normalize::needs_normalization;
|
||||||
use crate::traits::Normalized;
|
use crate::traits::Normalized;
|
||||||
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
|
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
|
||||||
|
@ -18,9 +18,9 @@ use super::{
|
|||||||
TraitQueryMode,
|
TraitQueryMode,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use crate::infer::{InferCtxt, InferCtxtExt, InferOk, TypeFreshener};
|
use crate::infer::{InferCtxt, InferCtxtExt, InferOk, TypeFreshener};
|
||||||
use crate::solve::InferCtxtSelectExt as _;
|
use crate::solve::InferCtxtSelectExt as _;
|
||||||
use crate::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use crate::traits::normalize::normalize_with_depth;
|
use crate::traits::normalize::normalize_with_depth;
|
||||||
use crate::traits::normalize::normalize_with_depth_to;
|
use crate::traits::normalize::normalize_with_depth_to;
|
||||||
use crate::traits::project::ProjectAndUnifyResult;
|
use crate::traits::project::ProjectAndUnifyResult;
|
||||||
|
@ -14,6 +14,7 @@ use rustc_infer::infer::DefineOpaqueTypes;
|
|||||||
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
use rustc_middle::ty::print::PrintTraitRefExt as _;
|
||||||
use specialization_graph::GraphExt;
|
use specialization_graph::GraphExt;
|
||||||
|
|
||||||
|
use crate::error_reporting::traits::to_pretty_impl_header;
|
||||||
use crate::errors::NegativePositiveConflict;
|
use crate::errors::NegativePositiveConflict;
|
||||||
use crate::infer::{InferCtxt, InferOk, TyCtxtInferExt};
|
use crate::infer::{InferCtxt, InferOk, TyCtxtInferExt};
|
||||||
use crate::traits::select::IntercrateAmbiguityCause;
|
use crate::traits::select::IntercrateAmbiguityCause;
|
||||||
@ -25,8 +26,8 @@ use rustc_errors::{codes::*, Diag, EmissionGuarantee};
|
|||||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::query::LocalCrate;
|
use rustc_middle::query::LocalCrate;
|
||||||
|
use rustc_middle::ty::GenericArgsRef;
|
||||||
use rustc_middle::ty::{self, ImplSubject, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, ImplSubject, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_middle::ty::{GenericArgs, GenericArgsRef};
|
|
||||||
use rustc_session::lint::builtin::COHERENCE_LEAK_CHECK;
|
use rustc_session::lint::builtin::COHERENCE_LEAK_CHECK;
|
||||||
use rustc_session::lint::builtin::ORDER_DEPENDENT_TRAIT_OBJECTS;
|
use rustc_session::lint::builtin::ORDER_DEPENDENT_TRAIT_OBJECTS;
|
||||||
use rustc_span::{sym, ErrorGuaranteed, Span, DUMMY_SP};
|
use rustc_span::{sym, ErrorGuaranteed, Span, DUMMY_SP};
|
||||||
@ -485,61 +486,3 @@ fn report_conflicting_impls<'tcx>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Recovers the "impl X for Y" signature from `impl_def_id` and returns it as a
|
|
||||||
/// string.
|
|
||||||
pub(crate) fn to_pretty_impl_header(tcx: TyCtxt<'_>, impl_def_id: DefId) -> Option<String> {
|
|
||||||
use std::fmt::Write;
|
|
||||||
|
|
||||||
let trait_ref = tcx.impl_trait_ref(impl_def_id)?.instantiate_identity();
|
|
||||||
let mut w = "impl".to_owned();
|
|
||||||
|
|
||||||
let args = GenericArgs::identity_for_item(tcx, impl_def_id);
|
|
||||||
|
|
||||||
// FIXME: Currently only handles ?Sized.
|
|
||||||
// Needs to support ?Move and ?DynSized when they are implemented.
|
|
||||||
let mut types_without_default_bounds = FxIndexSet::default();
|
|
||||||
let sized_trait = tcx.lang_items().sized_trait();
|
|
||||||
|
|
||||||
let arg_names = args.iter().map(|k| k.to_string()).filter(|k| k != "'_").collect::<Vec<_>>();
|
|
||||||
if !arg_names.is_empty() {
|
|
||||||
types_without_default_bounds.extend(args.types());
|
|
||||||
w.push('<');
|
|
||||||
w.push_str(&arg_names.join(", "));
|
|
||||||
w.push('>');
|
|
||||||
}
|
|
||||||
|
|
||||||
write!(
|
|
||||||
w,
|
|
||||||
" {} for {}",
|
|
||||||
trait_ref.print_only_trait_path(),
|
|
||||||
tcx.type_of(impl_def_id).instantiate_identity()
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// The predicates will contain default bounds like `T: Sized`. We need to
|
|
||||||
// remove these bounds, and add `T: ?Sized` to any untouched type parameters.
|
|
||||||
let predicates = tcx.predicates_of(impl_def_id).predicates;
|
|
||||||
let mut pretty_predicates =
|
|
||||||
Vec::with_capacity(predicates.len() + types_without_default_bounds.len());
|
|
||||||
|
|
||||||
for (p, _) in predicates {
|
|
||||||
if let Some(poly_trait_ref) = p.as_trait_clause() {
|
|
||||||
if Some(poly_trait_ref.def_id()) == sized_trait {
|
|
||||||
// FIXME(#120456) - is `swap_remove` correct?
|
|
||||||
types_without_default_bounds.swap_remove(&poly_trait_ref.self_ty().skip_binder());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pretty_predicates.push(p.to_string());
|
|
||||||
}
|
|
||||||
|
|
||||||
pretty_predicates.extend(types_without_default_bounds.iter().map(|ty| format!("{ty}: ?Sized")));
|
|
||||||
|
|
||||||
if !pretty_predicates.is_empty() {
|
|
||||||
write!(w, "\n where {}", pretty_predicates.join(", ")).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
w.push(';');
|
|
||||||
Some(w)
|
|
||||||
}
|
|
||||||
|
@ -7,7 +7,7 @@ use rustc_infer::infer::TyCtxtInferExt;
|
|||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::traits::CodegenObligationError;
|
use rustc_middle::traits::CodegenObligationError;
|
||||||
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
ImplSource, Obligation, ObligationCause, ObligationCtxt, ScrubbedTraitError, SelectionContext,
|
ImplSource, Obligation, ObligationCause, ObligationCtxt, ScrubbedTraitError, SelectionContext,
|
||||||
Unimplemented,
|
Unimplemented,
|
||||||
|
@ -2,8 +2,8 @@ use rustc_infer::infer::canonical::{Canonical, QueryResponse};
|
|||||||
use rustc_infer::infer::TyCtxtInferExt;
|
use rustc_infer::infer::TyCtxtInferExt;
|
||||||
use rustc_middle::query::Providers;
|
use rustc_middle::query::Providers;
|
||||||
use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
|
use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
|
||||||
|
use rustc_trait_selection::error_reporting::traits::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::infer::InferCtxtBuilderExt;
|
use rustc_trait_selection::infer::InferCtxtBuilderExt;
|
||||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
|
||||||
use rustc_trait_selection::traits::query::{
|
use rustc_trait_selection::traits::query::{
|
||||||
normalize::NormalizationResult, CanonicalAliasGoal, NoSolution,
|
normalize::NormalizationResult, CanonicalAliasGoal, NoSolution,
|
||||||
};
|
};
|
||||||
|
@ -15,7 +15,7 @@ use rustc_middle::ty::{
|
|||||||
use rustc_session::declare_lint_pass;
|
use rustc_session::declare_lint_pass;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::spec::abi::Abi;
|
use rustc_target::spec::abi::Abi;
|
||||||
use rustc_trait_selection::traits::error_reporting::InferCtxtExt as _;
|
use rustc_trait_selection::error_reporting::traits::InferCtxtExt as _;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// ### What it does
|
/// ### What it does
|
||||||
|
@ -9,7 +9,7 @@ use rustc_middle::ty::{self, AliasTy, ClauseKind, PredicateKind};
|
|||||||
use rustc_session::declare_lint_pass;
|
use rustc_session::declare_lint_pass;
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::{sym, Span};
|
use rustc_span::{sym, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::TypeErrCtxtExt;
|
use rustc_trait_selection::error_reporting::traits::suggestions::TypeErrCtxtExt;
|
||||||
use rustc_trait_selection::traits::{self, FulfillmentError, ObligationCtxt};
|
use rustc_trait_selection::traits::{self, FulfillmentError, ObligationCtxt};
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
|
@ -15,7 +15,7 @@ use rustc_middle::ty::{self, AssocKind, Ty, TyCtxt};
|
|||||||
use rustc_session::impl_lint_pass;
|
use rustc_session::impl_lint_pass;
|
||||||
use rustc_span::symbol::{kw, Ident};
|
use rustc_span::symbol::{kw, Ident};
|
||||||
use rustc_span::{sym, Span};
|
use rustc_span::{sym, Span};
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::ReturnsVisitor;
|
use rustc_trait_selection::error_reporting::traits::suggestions::ReturnsVisitor;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// ### What it does
|
/// ### What it does
|
||||||
|
Loading…
Reference in New Issue
Block a user