diff options
| author | Andy Russell <arussell123@gmail.com> | 2018-06-30 15:33:59 -0400 |
|---|---|---|
| committer | Andy Russell <arussell123@gmail.com> | 2018-06-30 21:38:18 -0400 |
| commit | 5468e12ca056a6ac46b36e244d235b9a0c987c58 (patch) | |
| tree | 9f18c032756cb746a9fd8fe26f786b4e1a0a78c4 /src/libsyntax/attr | |
| parent | f31594397072f24a06bc9a28b0451eb833bb7cbd (diff) | |
| download | rust-5468e12ca056a6ac46b36e244d235b9a0c987c58.tar.gz rust-5468e12ca056a6ac46b36e244d235b9a0c987c58.zip | |
add label to unknown meta item error
Diffstat (limited to 'src/libsyntax/attr')
| -rw-r--r-- | src/libsyntax/attr/builtin.rs | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/src/libsyntax/attr/builtin.rs b/src/libsyntax/attr/builtin.rs index 7b626a0fc27..ecd52a62eab 100644 --- a/src/libsyntax/attr/builtin.rs +++ b/src/libsyntax/attr/builtin.rs @@ -20,7 +20,7 @@ use super::{list_contains_name, mark_used, MetaItemKind}; enum AttrError { MultipleItem(Name), - UnknownMetaItem(Name), + UnknownMetaItem(Name, &'static [&'static str]), MissingSince, MissingFeature, MultipleStabilityLevels, @@ -31,8 +31,15 @@ fn handle_errors(diag: &Handler, span: Span, error: AttrError) { match error { AttrError::MultipleItem(item) => span_err!(diag, span, E0538, "multiple '{}' items", item), - AttrError::UnknownMetaItem(item) => span_err!(diag, span, E0541, - "unknown meta item '{}'", item), + AttrError::UnknownMetaItem(item, expected) => { + let expected = expected + .iter() + .map(|name| format!("`{}`", name)) + .collect::<Vec<_>>(); + struct_span_err!(diag, span, E0541, "unknown meta item '{}'", item) + .span_label(span, format!("expected one of {}", expected.join(", "))) + .emit(); + } AttrError::MissingSince => span_err!(diag, span, E0542, "missing 'since'"), AttrError::MissingFeature => span_err!(diag, span, E0546, "missing 'feature'"), AttrError::MultipleStabilityLevels => span_err!(diag, span, E0544, @@ -213,8 +220,11 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler, => if !get(mi, &mut $name) { continue 'outer }, )+ _ => { - handle_errors(diagnostic, mi.span, - AttrError::UnknownMetaItem(mi.name())); + let expected = &[ $( stringify!($name) ),+ ]; + handle_errors( + diagnostic, + mi.span, + AttrError::UnknownMetaItem(mi.name(), expected)); continue 'outer } } @@ -286,8 +296,14 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler, "reason" => if !get(mi, &mut reason) { continue 'outer }, "issue" => if !get(mi, &mut issue) { continue 'outer }, _ => { - handle_errors(diagnostic, meta.span, - AttrError::UnknownMetaItem(mi.name())); + handle_errors( + diagnostic, + meta.span, + AttrError::UnknownMetaItem( + mi.name(), + &["feature", "reason", "issue"] + ), + ); continue 'outer } } @@ -341,8 +357,11 @@ fn find_stability_generic<'a, I>(diagnostic: &Handler, "feature" => if !get(mi, &mut feature) { continue 'outer }, "since" => if !get(mi, &mut since) { continue 'outer }, _ => { - handle_errors(diagnostic, meta.span, - AttrError::UnknownMetaItem(mi.name())); + handle_errors( + diagnostic, + meta.span, + AttrError::UnknownMetaItem(mi.name(), &["since", "note"]), + ); continue 'outer } } @@ -520,8 +539,11 @@ fn find_deprecation_generic<'a, I>(diagnostic: &Handler, "since" => if !get(mi, &mut since) { continue 'outer }, "note" => if !get(mi, &mut note) { continue 'outer }, _ => { - handle_errors(diagnostic, meta.span, - AttrError::UnknownMetaItem(mi.name())); + handle_errors( + diagnostic, + meta.span, + AttrError::UnknownMetaItem(mi.name(), &["since", "note"]), + ); continue 'outer } } |
