@@ -200,11 +200,13 @@ fn resolve_struct_error<'b, 'a: 'b, 'c>(resolver: &'b Resolver<'a>,
200200
201201 match resolution_error {
202202 ResolutionError :: TypeParametersFromOuterFunction => {
203- struct_span_err ! ( resolver. session,
204- span,
205- E0401 ,
206- "can't use type parameters from outer function; try using a local \
207- type parameter instead")
203+ let mut err = struct_span_err ! ( resolver. session,
204+ span,
205+ E0401 ,
206+ "can't use type parameters from outer function; \
207+ try using a local type parameter instead") ;
208+ err = err. span_label ( span, & format ! ( "use of type variable from outer function" ) ) ;
209+ err
208210 }
209211 ResolutionError :: OuterTypeParameterContext => {
210212 struct_span_err ! ( resolver. session,
@@ -230,6 +232,7 @@ fn resolve_struct_error<'b, 'a: 'b, 'c>(resolver: &'b Resolver<'a>,
230232 "trait `{}` is not in scope" ,
231233 name) ;
232234 show_candidates ( & mut err, & candidates) ;
235+ err = err. span_label ( span, & format ! ( "`{}` is not in scope" , name) ) ;
233236 err
234237 }
235238 ResolutionError :: UndeclaredAssociatedType => {
@@ -278,10 +281,12 @@ fn resolve_struct_error<'b, 'a: 'b, 'c>(resolver: &'b Resolver<'a>,
278281 pattern_number)
279282 }
280283 ResolutionError :: SelfUsedOutsideImplOrTrait => {
281- struct_span_err ! ( resolver. session,
282- span,
283- E0411 ,
284- "use of `Self` outside of an impl or trait" )
284+ let mut err = struct_span_err ! ( resolver. session,
285+ span,
286+ E0411 ,
287+ "use of `Self` outside of an impl or trait" ) ;
288+ err = err. span_label ( span, & format ! ( "Used outside of impl or trait" ) ) ;
289+ err
285290 }
286291 ResolutionError :: UseOfUndeclared ( kind, name, candidates) => {
287292 let mut err = struct_span_err ! ( resolver. session,
@@ -291,54 +296,63 @@ fn resolve_struct_error<'b, 'a: 'b, 'c>(resolver: &'b Resolver<'a>,
291296 kind,
292297 name) ;
293298 show_candidates ( & mut err, & candidates) ;
299+ err = err. span_label ( span, & format ! ( "undefined or not in scope" ) ) ;
294300 err
295301 }
296302 ResolutionError :: DeclarationShadowsEnumVariantOrUnitLikeStruct ( name) => {
297- struct_span_err ! ( resolver. session,
303+ let mut err = struct_span_err ! ( resolver. session,
298304 span,
299305 E0413 ,
300- "declaration of `{}` shadows an enum variant \
306+ "`{}` cannot be named the same as an enum variant \
301307 or unit-like struct in scope",
302- name)
308+ name) ;
309+ err = err. span_label ( span,
310+ & format ! ( "has same name as enum variant or unit-like struct" ) ) ;
311+ err
303312 }
304313 ResolutionError :: ConstantForIrrefutableBinding ( name) => {
305314 let mut err = struct_span_err ! ( resolver. session,
306315 span,
307316 E0414 ,
308- "variable bindings cannot shadow constants" ) ;
309- err. span_note ( span,
310- "there already is a constant in scope sharing the same \
311- name as this pattern") ;
317+ "let variables cannot be named the same as const variables" ) ;
318+ err = err. span_label ( span,
319+ & format ! ( "cannot be named the same as a const variable" ) ) ;
312320 if let Some ( binding) = resolver. current_module
313321 . resolve_name_in_lexical_scope ( name, ValueNS ) {
314322 let participle = if binding. is_import ( ) { "imported" } else { "defined" } ;
315- err. span_note ( binding. span , & format ! ( "constant {} here" , participle) ) ;
323+ err = err. span_label ( binding. span , & format ! ( "a constant `{}` is {} here" ,
324+ name, participle) ) ;
316325 }
317326 err
318327 }
319328 ResolutionError :: IdentifierBoundMoreThanOnceInParameterList ( identifier) => {
320- struct_span_err ! ( resolver. session,
329+ let mut err = struct_span_err ! ( resolver. session,
321330 span,
322331 E0415 ,
323332 "identifier `{}` is bound more than once in this parameter list" ,
324- identifier)
333+ identifier) ;
334+ err = err. span_label ( span, & format ! ( "used as parameter more than once" ) ) ;
335+ err
325336 }
326337 ResolutionError :: IdentifierBoundMoreThanOnceInSamePattern ( identifier) => {
327- struct_span_err ! ( resolver. session,
338+ let mut err = struct_span_err ! ( resolver. session,
328339 span,
329340 E0416 ,
330341 "identifier `{}` is bound more than once in the same pattern" ,
331- identifier)
342+ identifier) ;
343+ err = err. span_label ( span, & format ! ( "used in a pattern more than once" ) ) ;
344+ err
332345 }
333346 ResolutionError :: StaticVariableReference ( binding) => {
334347 let mut err = struct_span_err ! ( resolver. session,
335348 span,
336349 E0417 ,
337350 "static variables cannot be referenced in a \
338351 pattern, use a `const` instead") ;
352+ err = err. span_label ( span, & format ! ( "static variable used in pattern" ) ) ;
339353 if binding. span != codemap:: DUMMY_SP {
340354 let participle = if binding. is_import ( ) { "imported" } else { "defined" } ;
341- err. span_note ( binding. span , & format ! ( "static variable {} here" , participle) ) ;
355+ err = err . span_label ( binding. span , & format ! ( "static variable {} here" , participle) ) ;
342356 }
343357 err
344358 }
@@ -1804,7 +1818,9 @@ impl<'a> Resolver<'a> {
18041818
18051819 // If it's a typedef, give a note
18061820 if let Def :: TyAlias ( ..) = path_res. base_def {
1807- err. note ( "`type` aliases cannot be used for traits" ) ;
1821+ let trait_name = trait_path. segments . last ( ) . unwrap ( ) . identifier . name ;
1822+ err = err. span_label ( trait_path. span ,
1823+ & format ! ( "`{}` is not a trait" , trait_name) ) ;
18081824
18091825 let definition_site = {
18101826 let segments = & trait_path. segments ;
@@ -1816,7 +1832,8 @@ impl<'a> Resolver<'a> {
18161832 } ;
18171833
18181834 if definition_site != codemap:: DUMMY_SP {
1819- err. span_note ( definition_site, "type defined here" ) ;
1835+ err = err. span_label ( definition_site,
1836+ & format ! ( "note: type aliases cannot be used for traits" ) ) ;
18201837 }
18211838 }
18221839 err. emit ( ) ;
@@ -3462,12 +3479,15 @@ impl<'a> Resolver<'a> {
34623479 _ => match ( old_binding. is_import ( ) , binding. is_import ( ) ) {
34633480 ( false , false ) => struct_span_err ! ( self . session, span, E0428 , "{}" , msg) ,
34643481 ( true , true ) => struct_span_err ! ( self . session, span, E0252 , "{}" , msg) ,
3465- _ => struct_span_err ! ( self . session, span, E0255 , "{}" , msg) ,
3482+ _ => {
3483+ let e = struct_span_err ! ( self . session, span, E0255 , "{}" , msg) ;
3484+ e. span_label ( span, & format ! ( "`{}` was already imported" , name) )
3485+ }
34663486 } ,
34673487 } ;
34683488
34693489 if old_binding. span != codemap:: DUMMY_SP {
3470- err. span_note ( old_binding. span , & format ! ( "previous {} of `{}` here" , noun, name) ) ;
3490+ err = err . span_label ( old_binding. span , & format ! ( "previous {} of `{}` here" , noun, name) ) ;
34713491 }
34723492 err. emit ( ) ;
34733493 }
0 commit comments