make E0117
error clear
This commit is contained in:
parent
09ccb6c59d
commit
547cb2722b
@ -50,6 +50,7 @@ fn orphan_check_impl(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Result<(), ErrorGua
|
||||
tcx,
|
||||
sp,
|
||||
tr.path.span,
|
||||
trait_ref.self_ty(),
|
||||
impl_.self_ty.span,
|
||||
&impl_.generics,
|
||||
err,
|
||||
@ -201,18 +202,24 @@ fn emit_orphan_check_error<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
sp: Span,
|
||||
trait_span: Span,
|
||||
self_ty: Ty<'tcx>,
|
||||
self_ty_span: Span,
|
||||
generics: &hir::Generics<'tcx>,
|
||||
err: traits::OrphanCheckErr<'tcx>,
|
||||
) -> Result<!, ErrorGuaranteed> {
|
||||
Err(match err {
|
||||
traits::OrphanCheckErr::NonLocalInputType(tys) => {
|
||||
let msg = match self_ty.kind() {
|
||||
ty::Adt(..) => "can be implemented for types defined outside of the crate",
|
||||
ty::Param(_) => "can have blanket implementations defined in this trait",
|
||||
_ if self_ty.is_primitive() => "can be implemented for primitive types",
|
||||
_ => "can be implemented for arbitrary types",
|
||||
};
|
||||
let mut err = struct_span_err!(
|
||||
tcx.sess,
|
||||
sp,
|
||||
E0117,
|
||||
"only traits defined in the current crate can be implemented for \
|
||||
arbitrary types"
|
||||
"only traits defined in the current crate {msg}"
|
||||
);
|
||||
err.span_label(sp, "impl doesn't use only types from inside the current crate");
|
||||
for (ty, is_target_ty) in &tys {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-cow.rs:18:1
|
||||
|
|
||||
LL | impl<T> Remote for Pair<T,Cover<T>> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-cow.rs:22:1
|
||||
|
|
||||
LL | impl<T> Remote for Pair<Cover<T>,T> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-cow.rs:26:1
|
||||
|
|
||||
LL | impl<T,U> Remote for Pair<Cover<T>,U> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/coherence-impls-copy.rs:5:1
|
||||
|
|
||||
LL | impl Copy for i32 {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/coherence-orphan.rs:10:1
|
||||
|
|
||||
LL | impl TheTrait<usize> for isize { }
|
||||
@ -10,7 +10,7 @@ LL | impl TheTrait<usize> for isize { }
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-orphan.rs:17:1
|
||||
|
|
||||
LL | impl !Send for Vec<isize> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-overlapping-pairs.rs:8:1
|
||||
|
|
||||
LL | impl<T> Remote for lib::Pair<T,Foo> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/coherence-pair-covered-uncovered-1.rs:12:1
|
||||
|
|
||||
LL | impl<T, U> Remote1<Pair<T, Local<U>>> for i32 { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-pair-covered-uncovered.rs:8:1
|
||||
|
|
||||
LL | impl<T,U> Remote for Pair<T,Local<U>> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-vec-local-2.rs:11:1
|
||||
|
|
||||
LL | impl<T> Remote for Vec<Local<T>> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence-vec-local.rs:11:1
|
||||
|
|
||||
LL | impl Remote for Vec<Local> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/coherence_local_err_struct.rs:14:1
|
||||
|
|
||||
LL | impl lib::MyCopy for lib::MyStruct<MyType> { }
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign-for-foreign.rs:10:1
|
||||
|
|
||||
LL | impl Remote for i32 {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign-for-foreign[foreign].rs:10:1
|
||||
|
|
||||
LL | impl Remote1<Rc<i32>> for i32 {
|
||||
@ -10,7 +10,7 @@ LL | impl Remote1<Rc<i32>> for i32 {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign-for-foreign[foreign].rs:14:1
|
||||
|
|
||||
LL | impl Remote1<Rc<Local>> for f64 {
|
||||
@ -22,7 +22,7 @@ LL | impl Remote1<Rc<Local>> for f64 {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign-for-foreign[foreign].rs:18:1
|
||||
|
|
||||
LL | impl<T> Remote1<Rc<T>> for f32 {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/impl-foreign-for-fundamental[foreign].rs:10:1
|
||||
|
|
||||
LL | impl Remote for Box<i32> {
|
||||
@ -10,7 +10,7 @@ LL | impl Remote for Box<i32> {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/impl-foreign-for-fundamental[foreign].rs:14:1
|
||||
|
|
||||
LL | impl<T> Remote for Box<Rc<T>> {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign[foreign]-for-foreign.rs:10:1
|
||||
|
|
||||
LL | impl Remote1<u32> for f64 {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign[fundemental[foreign]]-for-foreign.rs:11:1
|
||||
|
|
||||
LL | impl Remote1<Box<String>> for i32 {
|
||||
@ -11,7 +11,7 @@ LL | impl Remote1<Box<String>> for i32 {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign[fundemental[foreign]]-for-foreign.rs:15:1
|
||||
|
|
||||
LL | impl Remote1<Box<Rc<i32>>> for f64 {
|
||||
@ -24,7 +24,7 @@ LL | impl Remote1<Box<Rc<i32>>> for f64 {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/impl-foreign[fundemental[foreign]]-for-foreign.rs:19:1
|
||||
|
|
||||
LL | impl<T> Remote1<Box<Rc<T>>> for f32 {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/impl[t]-foreign-for-foreign[t].rs:11:1
|
||||
|
|
||||
LL | impl Remote for Rc<Local> {
|
||||
@ -9,7 +9,7 @@ LL | impl Remote for Rc<Local> {
|
||||
|
|
||||
= note: define and implement a trait or new type instead
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/impl[t]-foreign-for-foreign[t].rs:16:1
|
||||
|
|
||||
LL | impl<T> Remote for Arc<T> {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/E0117.rs:1:1
|
||||
|
|
||||
LL | impl Drop for u32 {}
|
||||
|
@ -3,7 +3,7 @@
|
||||
pub struct Int(i32);
|
||||
|
||||
impl const std::ops::Add for i32 { //~ ERROR type annotations needed
|
||||
//~^ ERROR only traits defined in the current crate can be implemented for arbitrary types
|
||||
//~^ ERROR only traits defined in the current crate can be implemented for primitive types
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: Self) -> Self {
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for primitive types
|
||||
--> $DIR/const-and-non-const-impl.rs:5:1
|
||||
|
|
||||
LL | impl const std::ops::Add for i32 {
|
||||
|
@ -26,7 +26,7 @@ error[E0321]: cross-crate traits with a default impl, like `DefaultedTrait`, can
|
||||
LL | impl DefaultedTrait for Box<C> { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait for type in another crate
|
||||
|
||||
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
|
||||
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
|
||||
--> $DIR/typeck-default-trait-impl-cross-crate-coherence.rs:22:1
|
||||
|
|
||||
LL | impl DefaultedTrait for lib::Something<C> { }
|
||||
|
Loading…
x
Reference in New Issue
Block a user