mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Remove AttributeLintKind::IllFormedAttributeInput variant
This commit is contained in:
@@ -666,12 +666,11 @@ fn accept_single_doc_attr<S: Stage>(
|
||||
ArgParser::NoArgs => {
|
||||
let suggestions = cx.adcx().suggestions();
|
||||
let span = cx.attr_span;
|
||||
cx.emit_lint(
|
||||
cx.emit_dyn_lint(
|
||||
rustc_session::lint::builtin::INVALID_DOC_ATTRIBUTES,
|
||||
AttributeLintKind::IllFormedAttributeInput {
|
||||
suggestions,
|
||||
docs: None,
|
||||
help: None,
|
||||
move |dcx, level| {
|
||||
crate::errors::IllFormedAttributeInput::new(&suggestions, None, None)
|
||||
.into_diag(dcx, level)
|
||||
},
|
||||
span,
|
||||
);
|
||||
|
||||
@@ -916,9 +916,12 @@ pub(crate) fn warn_ill_formed_attribute_input_with_help(
|
||||
) {
|
||||
let suggestions = self.suggestions();
|
||||
let span = self.attr_span;
|
||||
self.emit_lint(
|
||||
self.emit_dyn_lint(
|
||||
lint,
|
||||
AttributeLintKind::IllFormedAttributeInput { suggestions, docs: None, help },
|
||||
move |dcx, level| {
|
||||
crate::errors::IllFormedAttributeInput::new(&suggestions, None, help.as_deref())
|
||||
.into_diag(dcx, level)
|
||||
},
|
||||
span,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use rustc_errors::MultiSpan;
|
||||
use rustc_errors::{DiagArgValue, MultiSpan};
|
||||
use rustc_macros::{Diagnostic, Subdiagnostic};
|
||||
use rustc_span::{Span, Symbol};
|
||||
|
||||
@@ -66,3 +66,46 @@ pub(crate) struct UnsafeAttrOutsideUnsafeLint {
|
||||
#[subdiagnostic]
|
||||
pub suggestion: Option<crate::session_diagnostics::UnsafeAttrOutsideUnsafeSuggestion>,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(
|
||||
"{$num_suggestions ->
|
||||
[1] attribute must be of the form {$suggestions}
|
||||
*[other] valid forms for the attribute are {$suggestions}
|
||||
}"
|
||||
)]
|
||||
pub(crate) struct IllFormedAttributeInput {
|
||||
pub num_suggestions: usize,
|
||||
pub suggestions: DiagArgValue,
|
||||
#[note("for more information, visit <{$docs}>")]
|
||||
pub has_docs: bool,
|
||||
pub docs: &'static str,
|
||||
#[subdiagnostic]
|
||||
help: Option<IllFormedAttributeInputHelp>,
|
||||
}
|
||||
|
||||
impl IllFormedAttributeInput {
|
||||
pub(crate) fn new(
|
||||
suggestions: &[String],
|
||||
docs: Option<&'static str>,
|
||||
help: Option<&str>,
|
||||
) -> Self {
|
||||
Self {
|
||||
num_suggestions: suggestions.len(),
|
||||
suggestions: DiagArgValue::StrListSepByAnd(
|
||||
suggestions.into_iter().map(|s| format!("`{s}`").into()).collect(),
|
||||
),
|
||||
has_docs: docs.is_some(),
|
||||
docs: docs.unwrap_or(""),
|
||||
help: help.map(|h| IllFormedAttributeInputHelp { lint: h.to_string() }),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[help(
|
||||
"if you meant to silence a warning, consider using #![allow({$lint})] or #![expect({$lint})]"
|
||||
)]
|
||||
struct IllFormedAttributeInputHelp {
|
||||
pub lint: String,
|
||||
}
|
||||
|
||||
@@ -8,10 +8,9 @@
|
||||
use rustc_ast::{
|
||||
self as ast, AttrArgs, Attribute, DelimArgs, MetaItem, MetaItemInner, MetaItemKind, Safety,
|
||||
};
|
||||
use rustc_errors::{Applicability, PResult};
|
||||
use rustc_errors::{Applicability, Diagnostic, PResult};
|
||||
use rustc_feature::{AttributeTemplate, BUILTIN_ATTRIBUTE_MAP, BuiltinAttribute, template};
|
||||
use rustc_hir::AttrPath;
|
||||
use rustc_hir::lints::AttributeLintKind;
|
||||
use rustc_parse::parse_in;
|
||||
use rustc_session::errors::report_lit_error;
|
||||
use rustc_session::lint::builtin::ILL_FORMED_ATTRIBUTE_INPUT;
|
||||
@@ -210,14 +209,14 @@ pub fn emit_malformed_attribute(
|
||||
suggestions.clear();
|
||||
}
|
||||
if should_warn(name) {
|
||||
psess.buffer_lint(
|
||||
let suggestions = suggestions.clone();
|
||||
psess.dyn_buffer_lint(
|
||||
ILL_FORMED_ATTRIBUTE_INPUT,
|
||||
span,
|
||||
ast::CRATE_NODE_ID,
|
||||
AttributeLintKind::IllFormedAttributeInput {
|
||||
suggestions: suggestions.clone(),
|
||||
docs: template.docs,
|
||||
help: None,
|
||||
move |dcx, level| {
|
||||
crate::errors::IllFormedAttributeInput::new(&suggestions, template.docs, None)
|
||||
.into_diag(dcx, level)
|
||||
},
|
||||
);
|
||||
} else {
|
||||
|
||||
@@ -35,18 +35,6 @@ pub struct DecorateAttrLint<'a, 'sess, 'tcx> {
|
||||
impl<'a> Diagnostic<'a, ()> for DecorateAttrLint<'_, '_, '_> {
|
||||
fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, ()> {
|
||||
match self.diagnostic {
|
||||
AttributeLintKind::IllFormedAttributeInput { suggestions, docs, help } => {
|
||||
lints::IllFormedAttributeInput {
|
||||
num_suggestions: suggestions.len(),
|
||||
suggestions: DiagArgValue::StrListSepByAnd(
|
||||
suggestions.into_iter().map(|s| format!("`{s}`").into()).collect(),
|
||||
),
|
||||
has_docs: docs.is_some(),
|
||||
docs: docs.unwrap_or(""),
|
||||
help: help.clone().map(|h| lints::IllFormedAttributeInputHelp { lint: h }),
|
||||
}
|
||||
.into_diag(dcx, level)
|
||||
}
|
||||
AttributeLintKind::EmptyAttribute { first_span, attr_path, valid_without_list } => {
|
||||
lints::EmptyAttributeList {
|
||||
attr_span: *first_span,
|
||||
|
||||
@@ -3025,32 +3025,6 @@ pub(crate) enum CargoHelp {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME(jdonszelmann): duplicated in rustc_attr_parsing, should be moved there completely.
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(
|
||||
"{$num_suggestions ->
|
||||
[1] attribute must be of the form {$suggestions}
|
||||
*[other] valid forms for the attribute are {$suggestions}
|
||||
}"
|
||||
)]
|
||||
pub(crate) struct IllFormedAttributeInput {
|
||||
pub num_suggestions: usize,
|
||||
pub suggestions: DiagArgValue,
|
||||
#[note("for more information, visit <{$docs}>")]
|
||||
pub has_docs: bool,
|
||||
pub docs: &'static str,
|
||||
#[subdiagnostic]
|
||||
pub help: Option<IllFormedAttributeInputHelp>,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[help(
|
||||
"if you meant to silence a warning, consider using #![allow({$lint})] or #![expect({$lint})]"
|
||||
)]
|
||||
pub(crate) struct IllFormedAttributeInputHelp {
|
||||
pub lint: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("creating a {$shared_label}reference to mutable static")]
|
||||
pub(crate) struct RefOfMutStatic<'a> {
|
||||
|
||||
@@ -654,11 +654,6 @@ pub enum DeprecatedSinceKind {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum AttributeLintKind {
|
||||
IllFormedAttributeInput {
|
||||
suggestions: Vec<String>,
|
||||
docs: Option<&'static str>,
|
||||
help: Option<String>,
|
||||
},
|
||||
EmptyAttribute {
|
||||
first_span: Span,
|
||||
attr_path: String,
|
||||
|
||||
Reference in New Issue
Block a user