Skip to content

Commit ae39d3d

Browse files
Improve spans of malformed attribute errors
1 parent 69a59e8 commit ae39d3d

34 files changed

+116
-67
lines changed

compiler/rustc_attr_parsing/src/attributes/cfg.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub fn parse_cfg<S: Stage>(
4242
args: &ArgParser,
4343
) -> Option<CfgEntry> {
4444
let ArgParser::List(list) = args else {
45-
cx.expected_list(cx.attr_span);
45+
cx.expected_list(cx.attr_span, args);
4646
return None;
4747
};
4848
let Some(single) = list.single() else {

compiler/rustc_attr_parsing/src/attributes/codegen_attrs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl<S: Stage> SingleAttributeParser<S> for OptimizeParser {
2525

2626
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser) -> Option<AttributeKind> {
2727
let Some(list) = args.list() else {
28-
cx.expected_list(cx.attr_span);
28+
cx.expected_list(cx.attr_span, args);
2929
return None;
3030
};
3131

@@ -478,7 +478,7 @@ fn parse_tf_attribute<S: Stage>(
478478
) -> impl IntoIterator<Item = (Symbol, Span)> {
479479
let mut features = Vec::new();
480480
let ArgParser::List(list) = args else {
481-
cx.expected_list(cx.attr_span);
481+
cx.expected_list(cx.attr_span, args);
482482
return features;
483483
};
484484
if list.is_empty() {
@@ -601,7 +601,7 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
601601

602602
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser) -> Option<AttributeKind> {
603603
let Some(list) = args.list() else {
604-
cx.expected_list(cx.attr_span);
604+
cx.expected_list(cx.attr_span, args);
605605
return None;
606606
};
607607

compiler/rustc_attr_parsing/src/attributes/confusables.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ impl<S: Stage> AttributeParser<S> for ConfusablesParser {
1313
template!(List: &[r#""name1", "name2", ..."#]),
1414
|this, cx, args| {
1515
let Some(list) = args.list() else {
16-
cx.expected_list(cx.attr_span);
16+
cx.expected_list(cx.attr_span, args);
1717
return;
1818
};
1919

compiler/rustc_attr_parsing/src/attributes/debugger.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ impl<S: Stage> CombineAttributeParser<S> for DebuggerViualizerParser {
2121
args: &ArgParser,
2222
) -> impl IntoIterator<Item = Self::Item> {
2323
let Some(l) = args.list() else {
24-
cx.expected_list(args.span().unwrap_or(cx.attr_span));
24+
cx.expected_list(cx.attr_span, args);
2525
return None;
2626
};
2727
let Some(single) = l.single() else {

compiler/rustc_attr_parsing/src/attributes/doc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ impl DocParser {
106106
}
107107
Some(sym::attr) => {
108108
let Some(list) = args.list() else {
109-
cx.expected_list(cx.attr_span);
109+
cx.expected_list(cx.attr_span, args);
110110
return;
111111
};
112112

compiler/rustc_attr_parsing/src/attributes/link_attrs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl<S: Stage> CombineAttributeParser<S> for LinkParser {
7676
return None;
7777
}
7878
_ => {
79-
cx.expected_list(cx.attr_span);
79+
cx.expected_list(cx.attr_span, args);
8080
return None;
8181
}
8282
};
@@ -379,7 +379,7 @@ impl LinkParser {
379379
return true;
380380
}
381381
let Some(link_cfg) = item.args().list() else {
382-
cx.expected_list(item.span());
382+
cx.expected_list(item.span(), item.args());
383383
return true;
384384
};
385385
let Some(link_cfg) = link_cfg.single() else {

compiler/rustc_attr_parsing/src/attributes/macro_attrs.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ impl<S: Stage> AttributeParser<S> for MacroUseParser {
9999
}
100100
}
101101
}
102-
ArgParser::NameValue(_) => {
103-
cx.expected_list_or_no_args(span);
102+
ArgParser::NameValue(nv) => {
103+
cx.expected_list_or_no_args(nv.args_span());
104104
}
105105
}
106106
},
@@ -155,8 +155,8 @@ impl<S: Stage> SingleAttributeParser<S> for MacroExportParser {
155155
}
156156
}
157157
}
158-
ArgParser::NameValue(_) => {
159-
cx.expected_list_or_no_args(cx.attr_span);
158+
ArgParser::NameValue(nv) => {
159+
cx.expected_list_or_no_args(nv.args_span());
160160
return None;
161161
}
162162
};

compiler/rustc_attr_parsing/src/attributes/must_use.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ impl<S: Stage> SingleAttributeParser<S> for MustUseParser {
4141
};
4242
Some(value_str)
4343
}
44-
ArgParser::List(_) => {
45-
cx.expected_name_value(cx.attr_span, None);
44+
ArgParser::List(list) => {
45+
cx.expected_nv_or_no_args(list.span);
4646
return None;
4747
}
4848
},

compiler/rustc_attr_parsing/src/attributes/proc_macro_attrs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ fn parse_derive_like<S: Stage>(
6565
if args.no_args().is_ok() && !trait_name_mandatory {
6666
return Some((None, ThinVec::new()));
6767
}
68-
cx.expected_list(cx.attr_span);
68+
cx.expected_list(cx.attr_span, args);
6969
return None;
7070
};
7171
let mut items = list.mixed();
@@ -96,15 +96,15 @@ fn parse_derive_like<S: Stage>(
9696
let mut attributes = ThinVec::new();
9797
if let Some(attrs) = items.next() {
9898
let Some(attr_list) = attrs.meta_item() else {
99-
cx.expected_list(attrs.span());
99+
cx.unexpected_literal(attrs.span());
100100
return None;
101101
};
102102
if !attr_list.path().word_is(sym::attributes) {
103103
cx.expected_specific_argument(attrs.span(), &[sym::attributes]);
104104
return None;
105105
}
106106
let Some(attr_list) = attr_list.args().list() else {
107-
cx.expected_list(attrs.span());
107+
cx.expected_list(attrs.span(), attr_list.args());
108108
return None;
109109
};
110110

compiler/rustc_attr_parsing/src/attributes/prototype.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl<S: Stage> SingleAttributeParser<S> for CustomMirParser {
2727

2828
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser) -> Option<AttributeKind> {
2929
let Some(list) = args.list() else {
30-
cx.expected_list(cx.attr_span);
30+
cx.expected_list(cx.attr_span, args);
3131
return None;
3232
};
3333

0 commit comments

Comments
 (0)