@@ -20,7 +20,7 @@ use super::{list_contains_name, mark_used, MetaItemKind};
2020
2121enum AttrError {
2222 MultipleItem ( Name ) ,
23- UnknownMetaItem ( Name ) ,
23+ UnknownMetaItem ( Name , & ' static [ & ' static str ] ) ,
2424 MissingSince ,
2525 MissingFeature ,
2626 MultipleStabilityLevels ,
@@ -31,8 +31,15 @@ fn handle_errors(diag: &Handler, span: Span, error: AttrError) {
3131 match error {
3232 AttrError :: MultipleItem ( item) => span_err ! ( diag, span, E0538 ,
3333 "multiple '{}' items" , item) ,
34- AttrError :: UnknownMetaItem ( item) => span_err ! ( diag, span, E0541 ,
35- "unknown meta item '{}'" , item) ,
34+ AttrError :: UnknownMetaItem ( item, expected) => {
35+ let expected = expected
36+ . iter ( )
37+ . map ( |name| format ! ( "`{}`" , name) )
38+ . collect :: < Vec < _ > > ( ) ;
39+ struct_span_err ! ( diag, span, E0541 , "unknown meta item '{}'" , item)
40+ . span_label ( span, format ! ( "expected one of {}" , expected. join( ", " ) ) )
41+ . emit ( ) ;
42+ }
3643 AttrError :: MissingSince => span_err ! ( diag, span, E0542 , "missing 'since'" ) ,
3744 AttrError :: MissingFeature => span_err ! ( diag, span, E0546 , "missing 'feature'" ) ,
3845 AttrError :: MultipleStabilityLevels => span_err ! ( diag, span, E0544 ,
@@ -213,8 +220,11 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler,
213220 => if !get( mi, & mut $name) { continue ' outer } ,
214221 ) +
215222 _ => {
216- handle_errors( diagnostic, mi. span,
217- AttrError :: UnknownMetaItem ( mi. name( ) ) ) ;
223+ let expected = & [ $( stringify!( $name) ) ,+ ] ;
224+ handle_errors(
225+ diagnostic,
226+ mi. span,
227+ AttrError :: UnknownMetaItem ( mi. name( ) , expected) ) ;
218228 continue ' outer
219229 }
220230 }
@@ -286,8 +296,14 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler,
286296 "reason" => if !get ( mi, & mut reason) { continue ' outer } ,
287297 "issue" => if !get ( mi, & mut issue) { continue ' outer } ,
288298 _ => {
289- handle_errors ( diagnostic, meta. span ,
290- AttrError :: UnknownMetaItem ( mi. name ( ) ) ) ;
299+ handle_errors (
300+ diagnostic,
301+ meta. span ,
302+ AttrError :: UnknownMetaItem (
303+ mi. name ( ) ,
304+ & [ "feature" , "reason" , "issue" ]
305+ ) ,
306+ ) ;
291307 continue ' outer
292308 }
293309 }
@@ -341,8 +357,11 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler,
341357 "feature" => if !get ( mi, & mut feature) { continue ' outer } ,
342358 "since" => if !get ( mi, & mut since) { continue ' outer } ,
343359 _ => {
344- handle_errors ( diagnostic, meta. span ,
345- AttrError :: UnknownMetaItem ( mi. name ( ) ) ) ;
360+ handle_errors (
361+ diagnostic,
362+ meta. span ,
363+ AttrError :: UnknownMetaItem ( mi. name ( ) , & [ "since" , "note" ] ) ,
364+ ) ;
346365 continue ' outer
347366 }
348367 }
@@ -520,8 +539,11 @@ fn find_deprecation_generic<'a, I>(diagnostic: &Handler,
520539 "since" => if !get ( mi, & mut since) { continue ' outer } ,
521540 "note" => if !get ( mi, & mut note) { continue ' outer } ,
522541 _ => {
523- handle_errors ( diagnostic, meta. span ,
524- AttrError :: UnknownMetaItem ( mi. name ( ) ) ) ;
542+ handle_errors (
543+ diagnostic,
544+ meta. span ,
545+ AttrError :: UnknownMetaItem ( mi. name ( ) , & [ "since" , "note" ] ) ,
546+ ) ;
525547 continue ' outer
526548 }
527549 }
0 commit comments