From a6778a2f360c357679f37f6a3b26cdb902659411 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 20 Jan 2016 16:14:42 +0530 Subject: [PATCH] Improve E0317 long diagnostics --- src/librustc_resolve/diagnostics.rs | 36 ++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/librustc_resolve/diagnostics.rs b/src/librustc_resolve/diagnostics.rs index 04ab3fe70e9..dc6da1f0ef8 100644 --- a/src/librustc_resolve/diagnostics.rs +++ b/src/librustc_resolve/diagnostics.rs @@ -207,7 +207,41 @@ https://doc.rust-lang.org/reference.html#statements E0317: r##" User-defined types or type parameters cannot shadow the primitive types. This error indicates you tried to define a type, struct or enum with the same -name as an existing primitive type. +name as an existing primitive type: + +``` +struct u8 { + // ... +} +``` + +To fix this, simply name it something else. + +Such an error may also occur if you define a type parameter which shadows a +primitive type. An example would be something like: + +``` +impl MyTrait for Option { + // ... +} +``` + +In such a case, if you meant for `u8` to be a generic type parameter (i.e. any +type can be used in its place), use something like `T` instead: + +``` +impl MyTrait for Option { + // ... +} +``` + +On the other hand, if you wished to refer to the specific type `u8`, remove it +from the type parameter list: + +``` +impl MyTrait for Option { + // ... +} See the Types section of the reference for more information about the primitive types: