Rollup merge of #35454 - Detegr:master, r=jonathandturner
New error message format for E0117 and E0118 Part of #35233 r? @jonathandturner
This commit is contained in:
commit
fe7b3ae13b
@ -66,7 +66,7 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> {
|
||||
fn check_item(&self, item: &hir::Item) {
|
||||
let def_id = self.tcx.map.local_def_id(item.id);
|
||||
match item.node {
|
||||
hir::ItemImpl(_, _, _, None, _, _) => {
|
||||
hir::ItemImpl(_, _, _, None, ref ty, _) => {
|
||||
// For inherent impls, self type must be a nominal type
|
||||
// defined in this crate.
|
||||
debug!("coherence2::orphan check: inherent impl {}",
|
||||
@ -209,11 +209,11 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> {
|
||||
return;
|
||||
}
|
||||
_ => {
|
||||
struct_span_err!(self.tcx.sess, item.span, E0118,
|
||||
struct_span_err!(self.tcx.sess, ty.span, E0118,
|
||||
"no base type found for inherent implementation")
|
||||
.span_help(item.span,
|
||||
"either implement a trait on it or create a newtype to wrap it \
|
||||
instead")
|
||||
.span_label(ty.span, &format!("impl requires a base type"))
|
||||
.note(&format!("either implement a trait on it or create a newtype \
|
||||
to wrap it instead"))
|
||||
.emit();
|
||||
return;
|
||||
}
|
||||
@ -228,12 +228,14 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> {
|
||||
match traits::orphan_check(self.tcx, def_id) {
|
||||
Ok(()) => { }
|
||||
Err(traits::OrphanCheckErr::NoLocalInputType) => {
|
||||
span_err!(
|
||||
struct_span_err!(
|
||||
self.tcx.sess, item.span, E0117,
|
||||
"the impl does not reference any \
|
||||
types defined in this crate; \
|
||||
only traits defined in the current crate can be \
|
||||
implemented for arbitrary types");
|
||||
"only traits defined in the current crate can be \
|
||||
implemented for arbitrary types")
|
||||
.span_label(item.span, &format!("impl doesn't use types inside crate"))
|
||||
.note(&format!("the impl does not reference any \
|
||||
types defined in this crate"))
|
||||
.emit();
|
||||
return;
|
||||
}
|
||||
Err(traits::OrphanCheckErr::UncoveredTy(param_ty)) => {
|
||||
|
@ -9,6 +9,8 @@
|
||||
// except according to those terms.
|
||||
|
||||
impl Drop for u32 {} //~ ERROR E0117
|
||||
//~^ NOTE impl doesn't use types inside crate
|
||||
//~| NOTE the impl does not reference any types defined in this crate
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
@ -9,6 +9,8 @@
|
||||
// except according to those terms.
|
||||
|
||||
impl (u8, u8) { //~ ERROR E0118
|
||||
//~^ NOTE impl requires a base type
|
||||
//~| NOTE either implement a trait on it or create a newtype to wrap it instead
|
||||
fn get_state(&self) -> String {
|
||||
String::new()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user