Skip to content

Commit 4640615

Browse files
committed
Auto merge of #49372 - Phlosioneer:inherent-impl-default-error-message, r=nagisa
Better error message when trying to write default impls Previously, if you tried to write this (using the specialization feature flag): default impl PartialEq<MyType> { ... } The compiler would give you the mysterious warning "inherent impls cannot be default". What it really means is that you're trying to write an impl for a Structure or *Trait Object*, and that cannot be "default". However, one of the ways to encounter this error (as shown by the above example) is when you forget to write "for MyType". This PR adds a help message that reads "maybe missing a `for` keyword?" This is useful, actionable advice that will help any user identify their mistake, and doesn't get in the way or mislead any user that really meant to use the "default" keyword for this weird purpose. In particular, this help message will be useful for any users who don't know the "inherent impl" terminology, and/or users who forget that inherent impls CAN be written for traits (they apply to the trait objects). Both of these are somewhat confusing, seldom- used concepts; a one-line error message without any error number for longer explanation is NOT the place to introduce these ideas. I wasn't quite sure what grammar / wording to use. I'm open to suggestions. CC @rust-lang/docs (I hope I'm doing that notation right) (Apparently not. :( )
2 parents 1fac3ca + c61e641 commit 4640615

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/librustc_passes/ast_validation.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,9 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
273273
self.err_handler().span_err(item.span, "inherent impls cannot be negative");
274274
}
275275
if defaultness == Defaultness::Default {
276-
self.err_handler().span_err(item.span, "inherent impls cannot be default");
276+
self.err_handler()
277+
.struct_span_err(item.span, "inherent impls cannot be default")
278+
.note("only trait implementations may be annotated with default").emit();
277279
}
278280
}
279281
ItemKind::ForeignMod(..) => {

0 commit comments

Comments
 (0)