Skip to content

Commit 5468e12

Browse files
committed
add label to unknown meta item error
1 parent f315943 commit 5468e12

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

src/libsyntax/attr/builtin.rs

+33-11
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::{list_contains_name, mark_used, MetaItemKind};
2020

2121
enum 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
}

src/test/ui/deprecation-sanity.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ error[E0541]: unknown meta item 'reason'
22
--> $DIR/deprecation-sanity.rs:14:43
33
|
44
LL | #[deprecated(since = "a", note = "a", reason)] //~ ERROR unknown meta item 'reason'
5-
| ^^^^^^
5+
| ^^^^^^ expected one of `since`, `note`
66

77
error[E0551]: incorrect meta item
88
--> $DIR/deprecation-sanity.rs:17:31

0 commit comments

Comments
 (0)