Change:
] To : This should probably use the covered/local terminology from instead of "base type" to avoid the problematic overlap with subtyping/inheritance terminology.
] ] ] (Not really [C-bug], but it was the closest of the template options.)
Just fyi, you can do modify labels to -C-bug +A-diagnostics +C-enhancement +D-newcomer-roadblock which will let you apply most labels yourself. .
Error: Label D-newcomer-roadblock can only be set by Rust team members Please let know if you're having trouble with this bot.
... Oh, unless that happens.
A second attempt :stuckouttongue: modify labels to -C-bug +A-diagnostics +C-enhancement
In the reference, we use the term "nominal type". The error code explanation should also mention unions and trait objects ( is valid). If the person use or , it should also hint at removing the reference and putting them on in the associated items. Not sure if I should open a new issue for that one or not though.

Discussion:
<del> An inherent implementation was defined for something which isn't a struct nor an enum. </del> <ins> An inherent implementation was defined for something which isn't a struct, enum, union, or trait object. </ins> Erroneous code example: ```compile_fail,E0118 <del> impl (u8, u8) { // error: no base type found for inherent implementation </del> <ins> impl (u8, u8) { // error: no nominal type found for inherent implementation </ins> fn get_state(&self) -> String { // ... }

} } ``` <ins> Instead of defining an inherent implementation on a reference, you could also move the reference inside the implementation: ```compile_fail,E0118 struct Foo; impl &Foo { // error: no nominal type found for inherent implementation fn bar(self, other: Self) {} } ``` becomes ``` struct Foo; impl Foo { fn bar(&self, other: &Self) {} } ``` </ins>

} ty::Error(_) => {} _ => { <del> struct_span_err!( </del> <ins> let mut err = struct_span_err!( </ins> self.tcx.sess, ty.span, E0118, <del> "no base type found for inherent implementation" ) .span_label(ty.span, "impl requires a base type") .note( "either implement a trait on it or create a newtype  to wrap it instead", ) .emit(); </del> <ins> "no nominal type found for inherent implementation" ); err.span_label(ty.span, "impl requires a nominal type") .note("either implement a trait on it or create a newtype to wrap it instead"); if let ty::Ref(_, subty, _) = self_ty.kind() { err.note(&format!( "you could also try moving the reference to  uses of `{}` (such as `self`) within the implementation", subty )); } err.emit(); </ins> } } }

<ins> struct Foo; impl &mut Foo { //~^ ERROR E0118 fn bar(self) {} } fn main() {} </ins>

<ins> error[E0118]: no nominal type found for inherent implementation --> $DIR/E0118-2.rs:3:6 | LL | impl &mut Foo { |      ^^^^^^^^ impl requires a nominal type | = note: either implement a trait on it or create a newtype to wrap it instead = note: you could also try moving the reference to uses of `Foo` (such as `self`) within the implementation error: aborting due to previous error For more information about this error, try `rustc --explain E0118`. </ins>

<del> error[E0118]: no base type found for inherent implementation </del> <ins> error[E0118]: no nominal type found for inherent implementation </ins> --> $DIR/E0118.rs:1:6 | LL | impl (u8, u8) { <del> |      ^^^^^^^^ impl requires a base type </del> <ins> |      ^^^^^^^^ impl requires a nominal type </ins> | = note: either implement a trait on it or create a newtype to wrap it instead

type AssocAlias = m::Pub3; } <del> impl <Priv as PrivTr>::AssocAlias { //~ ERROR no base type found for inherent implementation </del> <ins> impl <Priv as PrivTr>::AssocAlias { //~^ ERROR no nominal type found for inherent implementation </ins> pub fn f(arg: Priv) {} // private type `aliases_pub::Priv` in public interface } }

type AssocAlias = Priv3; } <del> impl <Priv as PrivTr>::AssocAlias { //~ ERROR no base type found for inherent implementation </del> <ins> impl <Priv as PrivTr>::AssocAlias { //~^ ERROR no nominal type found for inherent implementation </ins> pub fn f(arg: Priv) {} // OK } }

<del> error[E0118]: no base type found for inherent implementation </del> <ins> error[E0118]: no nominal type found for inherent implementation </ins> --> $DIR/private-in-public-ill-formed.rs:14:10 | LL |     impl <Priv as PrivTr>::AssocAlias { <del> |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl requires a base type </del> <ins> |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl requires a nominal type </ins> | = note: either implement a trait on it or create a newtype to wrap it instead <del> error[E0118]: no base type found for inherent implementation --> $DIR/private-in-public-ill-formed.rs:30:10 </del> <ins> error[E0118]: no nominal type found for inherent implementation --> $DIR/private-in-public-ill-formed.rs:31:10 </ins> | LL |     impl <Priv as PrivTr>::AssocAlias { <del> |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl requires a base type </del> <ins> |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl requires a nominal type </ins> | = note: either implement a trait on it or create a newtype to wrap it instead