@@ -26,7 +26,7 @@ use rustc_span::symbol::{sym, Symbol};
26
26
use rustc_span:: { Span , DUMMY_SP } ;
27
27
use tracing:: debug;
28
28
29
- use crate :: errors:: UnknownTool ;
29
+ use crate :: errors:: { MalformedAttribute , MalformedAttributeSub , UnknownTool } ;
30
30
31
31
fn lint_levels ( tcx : TyCtxt < ' _ > , ( ) : ( ) ) -> LintLevelMap {
32
32
let store = unerased_lint_store ( tcx) ;
@@ -271,7 +271,7 @@ impl<'s> LintLevelsBuilder<'s> {
271
271
self . cur = self . sets . list . push ( LintSet { specs : FxHashMap :: default ( ) , parent : prev } ) ;
272
272
273
273
let sess = self . sess ;
274
- let bad_attr = |span| struct_span_err ! ( sess, span, E0452 , "malformed lint attribute input" ) ;
274
+ // let bad_attr = |span| struct_span_err!(sess, span, E0452, "malformed lint attribute input");
275
275
for ( attr_index, attr) in attrs. iter ( ) . enumerate ( ) {
276
276
if attr. has_name ( sym:: automatically_derived) {
277
277
self . current_specs_mut ( ) . insert (
@@ -322,20 +322,27 @@ impl<'s> LintLevelsBuilder<'s> {
322
322
}
323
323
reason = Some ( rationale) ;
324
324
} else {
325
- bad_attr ( name_value. span )
326
- . span_label ( name_value. span , "reason must be a string literal" )
327
- . emit ( ) ;
325
+ sess. emit_err ( MalformedAttribute {
326
+ span : name_value. span ,
327
+ sub : MalformedAttributeSub :: ReasonMustBeStringLiteral (
328
+ name_value. span ,
329
+ ) ,
330
+ } ) ;
328
331
}
329
332
// found reason, reslice meta list to exclude it
330
333
metas. pop ( ) . unwrap ( ) ;
331
334
} else {
332
- bad_attr ( item. span )
333
- . span_label ( item. span , "bad attribute argument" )
334
- . emit ( ) ;
335
+ sess. emit_err ( MalformedAttribute {
336
+ span : item. span ,
337
+ sub : MalformedAttributeSub :: BadAttributeArgument ( item. span ) ,
338
+ } ) ;
335
339
}
336
340
}
337
341
ast:: MetaItemKind :: List ( _) => {
338
- bad_attr ( item. span ) . span_label ( item. span , "bad attribute argument" ) . emit ( ) ;
342
+ sess. emit_err ( MalformedAttribute {
343
+ span : item. span ,
344
+ sub : MalformedAttributeSub :: BadAttributeArgument ( item. span ) ,
345
+ } ) ;
339
346
}
340
347
}
341
348
}
@@ -353,20 +360,21 @@ impl<'s> LintLevelsBuilder<'s> {
353
360
let meta_item = match li {
354
361
ast:: NestedMetaItem :: MetaItem ( meta_item) if meta_item. is_word ( ) => meta_item,
355
362
_ => {
356
- let mut err = bad_attr ( sp) ;
357
- let mut add_label = true ;
358
363
if let Some ( item) = li. meta_item ( ) {
359
364
if let ast:: MetaItemKind :: NameValue ( _) = item. kind {
360
365
if item. path == sym:: reason {
361
- err. span_label ( sp, "reason in lint attribute must come last" ) ;
362
- add_label = false ;
366
+ sess. emit_err ( MalformedAttribute {
367
+ span : sp,
368
+ sub : MalformedAttributeSub :: ReasonMustComeLast ( sp) ,
369
+ } ) ;
370
+ continue ;
363
371
}
364
372
}
365
373
}
366
- if add_label {
367
- err . span_label ( sp, "bad attribute argument" ) ;
368
- }
369
- err . emit ( ) ;
374
+ sess . emit_err ( MalformedAttribute {
375
+ span : sp,
376
+ sub : MalformedAttributeSub :: BadAttributeArgument ( sp ) ,
377
+ } ) ;
370
378
continue ;
371
379
}
372
380
} ;
0 commit comments