Skip to content

Commit 41c4afd

Browse files
Update to new lint API
1 parent 9b0e787 commit 41c4afd

File tree

9 files changed

+302
-223
lines changed

9 files changed

+302
-223
lines changed

compiler/rustc_attr_parsing/messages.ftl

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ attr_parsing_deprecated_item_suggestion =
1717
attr_parsing_doc_alias_bad_char =
1818
{$char_} character isn't allowed in {$attr_str}
1919
20-
attr_parsing_doc_alias_duplicated = doc alias is duplicated
21-
.label = first defined here
22-
2320
attr_parsing_doc_alias_empty =
2421
{$attr_str} attribute cannot have empty value
2522
@@ -33,58 +30,10 @@ attr_parsing_doc_attribute_not_attribute =
3330
nonexistent builtin attribute `{$attribute}` used in `#[doc(attribute = "...")]`
3431
.help = only existing builtin attributes are allowed in core/std
3532
36-
attr_parsing_doc_auto_cfg_expects_hide_or_show =
37-
only `hide` or `show` are allowed in `#[doc(auto_cfg(...))]`
38-
39-
attr_parsing_doc_auto_cfg_hide_show_expects_list =
40-
`#![doc(auto_cfg({$attr_name}(...)))]` expects a list of items
41-
42-
attr_parsing_doc_auto_cfg_hide_show_unexpected_item =
43-
`#![doc(auto_cfg({$attr_name}(...)))]` only accepts identifiers or key/value items
44-
45-
attr_parsing_doc_auto_cfg_wrong_literal =
46-
expected boolean for `#[doc(auto_cfg = ...)]`
47-
48-
attr_parsing_doc_invalid =
49-
invalid `doc` attribute
50-
5133
attr_parsing_doc_keyword_not_keyword =
5234
nonexistent keyword `{$keyword}` used in `#[doc(keyword = "...")]`
5335
.help = only existing keywords are allowed in core/std
5436
55-
attr_parsing_doc_test_literal = `#![doc(test(...)]` does not take a literal
56-
57-
attr_parsing_doc_test_takes_list =
58-
`#[doc(test(...)]` takes a list of attributes
59-
60-
attr_parsing_doc_test_unknown =
61-
unknown `doc(test)` attribute `{$name}`
62-
63-
attr_parsing_doc_unknown_any =
64-
unknown `doc` attribute `{$name}`
65-
66-
attr_parsing_doc_unknown_include =
67-
unknown `doc` attribute `include`
68-
.suggestion = use `doc = include_str!` instead
69-
70-
attr_parsing_doc_unknown_passes =
71-
unknown `doc` attribute `{$name}`
72-
.note = `doc` attribute `{$name}` no longer functions; see issue #44136 <https://github.com/rust-lang/rust/issues/44136>
73-
.label = no longer functions
74-
.no_op_note = `doc({$name})` is now a no-op
75-
76-
attr_parsing_doc_unknown_plugins =
77-
unknown `doc` attribute `plugins`
78-
.note = `doc` attribute `plugins` no longer functions; see issue #44136 <https://github.com/rust-lang/rust/issues/44136> and CVE-2018-1000622 <https://nvd.nist.gov/vuln/detail/CVE-2018-1000622>
79-
.label = no longer functions
80-
.no_op_note = `doc(plugins)` is now a no-op
81-
82-
attr_parsing_doc_unknown_spotlight =
83-
unknown `doc` attribute `spotlight`
84-
.note = `doc(spotlight)` was renamed to `doc(notable_trait)`
85-
.suggestion = use `notable_trait` instead
86-
.no_op_note = `doc(spotlight)` is now a no-op
87-
8837
attr_parsing_empty_attribute =
8938
unused attribute
9039
.suggestion = {$valid_without_list ->
@@ -316,8 +265,5 @@ attr_parsing_unused_multiple =
316265
.suggestion = remove this attribute
317266
.note = attribute also specified here
318267
319-
attr_parsing_doc_alias_duplicated = doc alias is duplicated
320-
.label = first defined here
321-
322268
attr_parsing_whole_archive_needs_static =
323269
linking modifier `whole-archive` is only compatible with `static` linking kind

compiler/rustc_attr_parsing/src/attributes/doc.rs

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,18 @@ impl DocParser {
116116
}
117117
}
118118
Some(name) => {
119-
cx.emit_lint(AttributeLintKind::DocTestUnknown { name }, path.span());
119+
cx.emit_lint(
120+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
121+
AttributeLintKind::DocTestUnknown { name },
122+
path.span(),
123+
);
120124
}
121125
None => {
122-
cx.emit_lint(AttributeLintKind::DocTestLiteral, path.span());
126+
cx.emit_lint(
127+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
128+
AttributeLintKind::DocTestLiteral,
129+
path.span(),
130+
);
123131
}
124132
}
125133
}
@@ -151,7 +159,11 @@ impl DocParser {
151159
}
152160

153161
if let Some(first_definition) = self.attribute.aliases.get(&alias).copied() {
154-
cx.emit_lint(AttributeLintKind::DuplicateDocAlias { first_definition }, span);
162+
cx.emit_lint(
163+
rustc_session::lint::builtin::UNUSED_ATTRIBUTES,
164+
AttributeLintKind::DuplicateDocAlias { first_definition },
165+
span,
166+
);
155167
}
156168

157169
self.attribute.aliases.insert(alias, span);
@@ -239,14 +251,19 @@ impl DocParser {
239251
ArgParser::List(list) => {
240252
for meta in list.mixed() {
241253
let MetaItemOrLitParser::MetaItemParser(item) = meta else {
242-
cx.emit_lint(AttributeLintKind::DocAutoCfgExpectsHideOrShow, meta.span());
254+
cx.emit_lint(
255+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
256+
AttributeLintKind::DocAutoCfgExpectsHideOrShow,
257+
meta.span(),
258+
);
243259
continue;
244260
};
245261
let (kind, attr_name) = match item.path().word_sym() {
246262
Some(sym::hide) => (HideOrShow::Hide, sym::hide),
247263
Some(sym::show) => (HideOrShow::Show, sym::show),
248264
_ => {
249265
cx.emit_lint(
266+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
250267
AttributeLintKind::DocAutoCfgExpectsHideOrShow,
251268
item.span(),
252269
);
@@ -255,6 +272,7 @@ impl DocParser {
255272
};
256273
let ArgParser::List(list) = item.args() else {
257274
cx.emit_lint(
275+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
258276
AttributeLintKind::DocAutoCfgHideShowExpectsList { attr_name },
259277
item.span(),
260278
);
@@ -266,6 +284,7 @@ impl DocParser {
266284
for item in list.mixed() {
267285
let MetaItemOrLitParser::MetaItemParser(sub_item) = item else {
268286
cx.emit_lint(
287+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
269288
AttributeLintKind::DocAutoCfgHideShowUnexpectedItem { attr_name },
270289
item.span(),
271290
);
@@ -291,6 +310,7 @@ impl DocParser {
291310
}
292311
_ => {
293312
cx.emit_lint(
313+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
294314
AttributeLintKind::DocAutoCfgHideShowUnexpectedItem {
295315
attr_name,
296316
},
@@ -306,7 +326,11 @@ impl DocParser {
306326
ArgParser::NameValue(nv) => {
307327
let MetaItemLit { kind: LitKind::Bool(bool_value), span, .. } = nv.value_as_lit()
308328
else {
309-
cx.emit_lint(AttributeLintKind::DocAutoCfgWrongLiteral, nv.value_span);
329+
cx.emit_lint(
330+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
331+
AttributeLintKind::DocAutoCfgWrongLiteral,
332+
nv.value_span,
333+
);
310334
return;
311335
};
312336
self.attribute.auto_cfg_change.push((*bool_value, *span));
@@ -397,6 +421,7 @@ impl DocParser {
397421
Some(sym::test) => {
398422
let Some(list) = args.list() else {
399423
cx.emit_lint(
424+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
400425
AttributeLintKind::DocTestTakesList,
401426
args.span().unwrap_or(path.span()),
402427
);
@@ -418,31 +443,53 @@ impl DocParser {
418443
}
419444
}
420445
Some(sym::spotlight) => {
421-
cx.emit_lint(AttributeLintKind::DocUnknownSpotlight, path.span());
446+
cx.emit_lint(
447+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
448+
AttributeLintKind::DocUnknownSpotlight { span: path.span() },
449+
path.span(),
450+
);
422451
}
423452
Some(sym::include) if let Some(nv) = args.name_value() => {
424453
let inner = match cx.attr_style {
425454
AttrStyle::Outer => "",
426455
AttrStyle::Inner => "!",
427456
};
428457
cx.emit_lint(
429-
AttributeLintKind::DocUnknownInclude { inner, value: nv.value_as_lit().symbol },
458+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
459+
AttributeLintKind::DocUnknownInclude {
460+
inner,
461+
value: nv.value_as_lit().symbol,
462+
span: path.span(),
463+
},
430464
path.span(),
431465
);
432466
}
433467
Some(name @ (sym::passes | sym::no_default_passes)) => {
434-
cx.emit_lint(AttributeLintKind::DocUnknownPasses { name }, path.span());
468+
cx.emit_lint(
469+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
470+
AttributeLintKind::DocUnknownPasses { name, span: path.span() },
471+
path.span(),
472+
);
435473
}
436474
Some(sym::plugins) => {
437-
cx.emit_lint(AttributeLintKind::DocUnknownPlugins, path.span());
475+
cx.emit_lint(
476+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
477+
AttributeLintKind::DocUnknownPlugins { span: path.span() },
478+
path.span(),
479+
);
438480
}
439481
Some(name) => {
440-
cx.emit_lint(AttributeLintKind::DocUnknownAny { name }, path.span());
482+
cx.emit_lint(
483+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
484+
AttributeLintKind::DocUnknownAny { name },
485+
path.span(),
486+
);
441487
}
442488
None => {
443489
let full_name =
444490
path.segments().map(|s| s.as_str()).intersperse("::").collect::<String>();
445491
cx.emit_lint(
492+
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
446493
AttributeLintKind::DocUnknownAny { name: Symbol::intern(&full_name) },
447494
path.span(),
448495
);
@@ -459,7 +506,11 @@ impl DocParser {
459506
ArgParser::NoArgs => {
460507
let suggestions = cx.suggestions();
461508
let span = cx.attr_span;
462-
cx.emit_lint(AttributeLintKind::IllFormedAttributeInput { suggestions }, span);
509+
cx.emit_lint(
510+
rustc_session::lint::builtin::ILL_FORMED_ATTRIBUTE_INPUT,
511+
AttributeLintKind::IllFormedAttributeInput { suggestions, docs: None },
512+
span,
513+
);
463514
}
464515
ArgParser::List(items) => {
465516
for i in items.mixed() {

compiler/rustc_attr_parsing/src/session_diagnostics.rs

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -581,13 +581,6 @@ pub(crate) struct NakedFunctionIncompatibleAttribute {
581581
pub attr: String,
582582
}
583583

584-
#[derive(LintDiagnostic)]
585-
#[diag(attr_parsing_doc_alias_duplicated)]
586-
pub(crate) struct DocAliasDuplicated {
587-
#[label]
588-
pub first_defn: Span,
589-
}
590-
591584
#[derive(Diagnostic)]
592585
#[diag(attr_parsing_link_ordinal_out_of_range)]
593586
#[note]
@@ -993,87 +986,6 @@ pub(crate) struct CfgAttrBadDelim {
993986
pub sugg: MetaBadDelimSugg,
994987
}
995988

996-
#[derive(LintDiagnostic)]
997-
#[diag(attr_parsing_doc_auto_cfg_expects_hide_or_show)]
998-
pub(crate) struct DocAutoCfgExpectsHideOrShow;
999-
1000-
#[derive(LintDiagnostic)]
1001-
#[diag(attr_parsing_doc_auto_cfg_hide_show_unexpected_item)]
1002-
pub(crate) struct DocAutoCfgHideShowUnexpectedItem {
1003-
pub attr_name: Symbol,
1004-
}
1005-
1006-
#[derive(LintDiagnostic)]
1007-
#[diag(attr_parsing_doc_auto_cfg_hide_show_expects_list)]
1008-
pub(crate) struct DocAutoCfgHideShowExpectsList {
1009-
pub attr_name: Symbol,
1010-
}
1011-
1012-
#[derive(LintDiagnostic)]
1013-
#[diag(attr_parsing_doc_invalid)]
1014-
pub(crate) struct DocInvalid;
1015-
1016-
#[derive(LintDiagnostic)]
1017-
#[diag(attr_parsing_doc_unknown_include)]
1018-
pub(crate) struct DocUnknownInclude {
1019-
pub inner: &'static str,
1020-
pub value: Symbol,
1021-
#[suggestion(code = "#{inner}[doc = include_str!(\"{value}\")]")]
1022-
pub sugg: (Span, Applicability),
1023-
}
1024-
1025-
#[derive(LintDiagnostic)]
1026-
#[diag(attr_parsing_doc_unknown_spotlight)]
1027-
#[note]
1028-
#[note(attr_parsing_no_op_note)]
1029-
pub(crate) struct DocUnknownSpotlight {
1030-
#[suggestion(style = "short", applicability = "machine-applicable", code = "notable_trait")]
1031-
pub sugg_span: Span,
1032-
}
1033-
1034-
#[derive(LintDiagnostic)]
1035-
#[diag(attr_parsing_doc_unknown_passes)]
1036-
#[note]
1037-
#[note(attr_parsing_no_op_note)]
1038-
pub(crate) struct DocUnknownPasses {
1039-
pub name: Symbol,
1040-
#[label]
1041-
pub note_span: Span,
1042-
}
1043-
1044-
#[derive(LintDiagnostic)]
1045-
#[diag(attr_parsing_doc_unknown_plugins)]
1046-
#[note]
1047-
#[note(attr_parsing_no_op_note)]
1048-
pub(crate) struct DocUnknownPlugins {
1049-
#[label]
1050-
pub label_span: Span,
1051-
}
1052-
1053-
#[derive(LintDiagnostic)]
1054-
#[diag(attr_parsing_doc_unknown_any)]
1055-
pub(crate) struct DocUnknownAny {
1056-
pub name: Symbol,
1057-
}
1058-
1059-
#[derive(LintDiagnostic)]
1060-
#[diag(attr_parsing_doc_auto_cfg_wrong_literal)]
1061-
pub(crate) struct DocAutoCfgWrongLiteral;
1062-
1063-
#[derive(LintDiagnostic)]
1064-
#[diag(attr_parsing_doc_test_takes_list)]
1065-
pub(crate) struct DocTestTakesList;
1066-
1067-
#[derive(LintDiagnostic)]
1068-
#[diag(attr_parsing_doc_test_unknown)]
1069-
pub(crate) struct DocTestUnknown {
1070-
pub name: Symbol,
1071-
}
1072-
1073-
#[derive(LintDiagnostic)]
1074-
#[diag(attr_parsing_doc_test_literal)]
1075-
pub(crate) struct DocTestLiteral;
1076-
1077989
#[derive(Diagnostic)]
1078990
#[diag(attr_parsing_doc_alias_malformed)]
1079991
pub(crate) struct DocAliasMalformed {

0 commit comments

Comments
 (0)