Skip to content

Commit 4f3aad9

Browse files
committed
feat: allow multiple suggestions for malformed crate_type attribute
1 parent 5545959 commit 4f3aad9

File tree

7 files changed

+75
-62
lines changed

7 files changed

+75
-62
lines changed

compiler/rustc_builtin_macros/src/cfg_accessible.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ impl MultiItemModifier for Expander {
4444
item: Annotatable,
4545
_is_derive_const: bool,
4646
) -> ExpandResult<Vec<Annotatable>, Annotatable> {
47-
let template = AttributeTemplate { list: Some("path"), ..Default::default() };
47+
let template = AttributeTemplate { list: Some(&["path"]), ..Default::default() };
48+
4849
validate_attr::check_builtin_meta_item(
4950
&ecx.sess.psess,
5051
meta_item,

compiler/rustc_builtin_macros/src/derive.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ impl MultiItemModifier for Expander {
3434
let (sess, features) = (ecx.sess, ecx.ecfg.features);
3535
let result =
3636
ecx.resolver.resolve_derives(ecx.current_expansion.id, ecx.force_mode, &|| {
37-
let template =
38-
AttributeTemplate { list: Some("Trait1, Trait2, ..."), ..Default::default() };
37+
let template = AttributeTemplate {
38+
list: Some(&["Trait1", "Trait2", "..."]),
39+
..Default::default()
40+
};
3941
validate_attr::check_builtin_meta_item(
4042
&sess.psess,
4143
meta_item,

compiler/rustc_feature/src/builtin_attrs.rs

+64-55
Large diffs are not rendered by default.

compiler/rustc_parse/src/validate_attr.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ fn emit_malformed_attribute(
248248
suggestions.push(format!("#{inner}[{name}]"));
249249
}
250250
if let Some(descr) = template.list {
251-
suggestions.push(format!("#{inner}[{name}({descr})]"));
251+
let descr_formatted = descr.join(", ");
252+
suggestions.push(format!("#{inner}[{name}({descr_formatted})]"));
252253
}
253254
suggestions.extend(template.one_of.iter().map(|&word| format!("#{inner}[{name}({word})]")));
254255
if let Some(descr) = template.name_value_str {

src/tools/rust-analyzer/crates/hir-expand/src/inert_attr_macro.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub struct BuiltinAttribute {
2323
#[derive(Clone, Copy)]
2424
pub struct AttributeTemplate {
2525
pub word: bool,
26-
pub list: Option<&'static str>,
26+
pub list: Option<&'static [&'static str]>,
2727
pub name_value_str: Option<&'static str>,
2828
}
2929

0 commit comments

Comments
 (0)