Skip to content

Commit 32ee26c

Browse files
committed
Add more docs to templates for attrs with incorrect arguments
1 parent 413ca5d commit 32ee26c

39 files changed

+225
-56
lines changed

compiler/rustc_attr_parsing/src/attributes/cfg.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ use crate::{
1616
CfgMatchesLintEmitter, fluent_generated, parse_version, session_diagnostics, try_gate_cfg,
1717
};
1818

19-
pub const CFG_TEMPLATE: AttributeTemplate = template!(List: &["predicate"]);
19+
pub const CFG_TEMPLATE: AttributeTemplate = template!(
20+
List: &["predicate"],
21+
"https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg-attribute"
22+
);
2023

2124
pub fn parse_cfg_attr<'c, S: Stage>(
2225
cx: &'c mut AcceptContext<'_, '_, S>,

compiler/rustc_attr_parsing/src/attributes/inline.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ impl<S: Stage> SingleAttributeParser<S> for InlineParser {
1818
const PATH: &'static [Symbol] = &[sym::inline];
1919
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
2020
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
21-
const TEMPLATE: AttributeTemplate = template!(Word, List: &["always", "never"]);
21+
const TEMPLATE: AttributeTemplate = template!(
22+
Word,
23+
List: &["always", "never"],
24+
"https://doc.rust-lang.org/reference/attributes/codegen.html#the-inline-attribute"
25+
);
2226

2327
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
2428
match args {

compiler/rustc_attr_parsing/src/attributes/link_attrs.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ impl<S: Stage> SingleAttributeParser<S> for LinkNameParser {
1616
const PATH: &[Symbol] = &[sym::link_name];
1717
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
1818
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
19-
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");
19+
const TEMPLATE: AttributeTemplate = template!(
20+
NameValueStr: "name",
21+
"https://doc.rust-lang.org/reference/items/external-blocks.html#the-link_name-attribute"
22+
);
2023

2124
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
2225
let Some(nv) = args.name_value() else {
@@ -38,7 +41,10 @@ impl<S: Stage> SingleAttributeParser<S> for LinkSectionParser {
3841
const PATH: &[Symbol] = &[sym::link_section];
3942
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
4043
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
41-
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");
44+
const TEMPLATE: AttributeTemplate = template!(
45+
NameValueStr: "name",
46+
"https://doc.rust-lang.org/reference/abi.html#the-link_section-attribute"
47+
);
4248

4349
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
4450
let Some(nv) = args.name_value() else {
@@ -94,7 +100,10 @@ impl<S: Stage> SingleAttributeParser<S> for LinkOrdinalParser {
94100
const PATH: &[Symbol] = &[sym::link_ordinal];
95101
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
96102
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
97-
const TEMPLATE: AttributeTemplate = template!(List: &["ordinal"]);
103+
const TEMPLATE: AttributeTemplate = template!(
104+
List: &["ordinal"],
105+
"https://doc.rust-lang.org/reference/items/external-blocks.html#the-link_ordinal-attribute"
106+
);
98107

99108
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
100109
let ordinal = parse_single_integer(cx, args)?;

compiler/rustc_attr_parsing/src/attributes/macro_attrs.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ pub(crate) struct MacroUseParser {
3131
first_span: Option<Span>,
3232
}
3333

34-
const MACRO_USE_TEMPLATE: AttributeTemplate = template!(Word, List: &["name1, name2, ..."]);
34+
const MACRO_USE_TEMPLATE: AttributeTemplate = template!(
35+
Word, List: &["name1, name2, ..."],
36+
"https://doc.rust-lang.org/reference/macros-by-example.html#the-macro_use-attribute"
37+
);
3538

3639
impl<S: Stage> AttributeParser<S> for MacroUseParser {
3740
const ATTRIBUTES: AcceptMapping<Self, S> = &[(

compiler/rustc_attr_parsing/src/attributes/must_use.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ impl<S: Stage> SingleAttributeParser<S> for MustUseParser {
1414
const PATH: &[Symbol] = &[sym::must_use];
1515
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
1616
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
17-
const TEMPLATE: AttributeTemplate = template!(Word, NameValueStr: "reason");
17+
const TEMPLATE: AttributeTemplate = template!(
18+
Word, NameValueStr: "reason",
19+
"https://doc.rust-lang.org/reference/attributes/diagnostics.html#the-must_use-attribute"
20+
);
1821

1922
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
2023
Some(AttributeKind::MustUse {

compiler/rustc_attr_parsing/src/attributes/path.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ impl<S: Stage> SingleAttributeParser<S> for PathParser {
1212
const PATH: &[Symbol] = &[sym::path];
1313
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
1414
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
15-
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "file");
15+
const TEMPLATE: AttributeTemplate = template!(
16+
NameValueStr: "file",
17+
"https://doc.rust-lang.org/reference/items/modules.html#the-path-attribute"
18+
);
1619

1720
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
1821
let Some(nv) = args.name_value() else {

compiler/rustc_attr_parsing/src/attributes/proc_macro_attrs.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ impl<S: Stage> SingleAttributeParser<S> for ProcMacroDeriveParser {
2828
const PATH: &[Symbol] = &[sym::proc_macro_derive];
2929
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
3030
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
31-
const TEMPLATE: AttributeTemplate =
32-
template!(List: &["TraitName", "TraitName, attributes(name1, name2, ...)"]);
31+
const TEMPLATE: AttributeTemplate = template!(
32+
List: &["TraitName", "TraitName, attributes(name1, name2, ...)"],
33+
"https://doc.rust-lang.org/reference/procedural-macros.html#derive-macros"
34+
);
3335

3436
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
3537
let (trait_name, helper_attrs) = parse_derive_like(cx, args, true)?;

compiler/rustc_attr_parsing/src/attributes/repr.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ impl<S: Stage> CombineAttributeParser<S> for ReprParser {
2626
const CONVERT: ConvertFn<Self::Item> =
2727
|items, first_span| AttributeKind::Repr { reprs: items, first_span };
2828
// FIXME(jdonszelmann): never used
29-
const TEMPLATE: AttributeTemplate = template!(List: &["C", "Rust", "transparent", "align(...)", "packed(...)", "<integer type>"]);
29+
const TEMPLATE: AttributeTemplate = template!(
30+
List: &["C", "Rust", "transparent", "align(...)", "packed(...)", "<integer type>"],
31+
"https://doc.rust-lang.org/reference/type-layout.html#representations"
32+
);
3033

3134
fn extend<'c>(
3235
cx: &'c mut AcceptContext<'_, '_, S>,

compiler/rustc_attr_parsing/src/attributes/test_attrs.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ impl<S: Stage> SingleAttributeParser<S> for IgnoreParser {
1313
const PATH: &[Symbol] = &[sym::ignore];
1414
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
1515
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
16-
const TEMPLATE: AttributeTemplate = template!(Word, NameValueStr: "reason");
16+
const TEMPLATE: AttributeTemplate = template!(
17+
Word, NameValueStr: "reason",
18+
"https://doc.rust-lang.org/reference/attributes/testing.html#the-ignore-attribute"
19+
);
1720

1821
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
1922
Some(AttributeKind::Ignore {
@@ -51,8 +54,10 @@ impl<S: Stage> SingleAttributeParser<S> for ShouldPanicParser {
5154
const PATH: &[Symbol] = &[sym::should_panic];
5255
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
5356
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
54-
const TEMPLATE: AttributeTemplate =
55-
template!(Word, List: &[r#"expected = "reason""#], NameValueStr: "reason");
57+
const TEMPLATE: AttributeTemplate = template!(
58+
Word, List: &[r#"expected = "reason""#], NameValueStr: "reason",
59+
"https://doc.rust-lang.org/reference/attributes/testing.html#the-should_panic-attribute"
60+
);
5661

5762
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser<'_>) -> Option<AttributeKind> {
5863
Some(AttributeKind::ShouldPanic {

compiler/rustc_attr_parsing/src/session_diagnostics.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,9 @@ impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for AttributeParseError {
691691
}
692692
}
693693

694+
if let Some(link) = self.template.docs {
695+
diag.note(format!("for more information, visit <{link}>"));
696+
}
694697
let suggestions = self.template.suggestions(false, &name);
695698
diag.span_suggestions(
696699
self.attr_span,

0 commit comments

Comments
 (0)