non_local_defs: move out from #[derive(LintDiagnostic)]
to manual impl
This commit is contained in:
parent
f00b02e6bb
commit
5ad4ad7aee
@ -1329,40 +1329,88 @@ pub struct SuspiciousDoubleRefCloneDiag<'a> {
|
||||
}
|
||||
|
||||
// non_local_defs.rs
|
||||
#[derive(LintDiagnostic)]
|
||||
pub enum NonLocalDefinitionsDiag {
|
||||
#[diag(lint_non_local_definitions_impl)]
|
||||
#[help]
|
||||
#[note(lint_non_local)]
|
||||
#[note(lint_exception)]
|
||||
#[note(lint_non_local_definitions_deprecation)]
|
||||
Impl {
|
||||
depth: u32,
|
||||
body_kind_descr: &'static str,
|
||||
body_name: String,
|
||||
#[subdiagnostic]
|
||||
cargo_update: Option<NonLocalDefinitionsCargoUpdateNote>,
|
||||
#[suggestion(lint_const_anon, code = "_", applicability = "machine-applicable")]
|
||||
const_anon: Option<Span>,
|
||||
},
|
||||
#[diag(lint_non_local_definitions_macro_rules)]
|
||||
MacroRules {
|
||||
depth: u32,
|
||||
body_kind_descr: &'static str,
|
||||
body_name: String,
|
||||
#[help]
|
||||
help: Option<()>,
|
||||
#[help(lint_help_doctest)]
|
||||
doctest_help: Option<()>,
|
||||
#[note(lint_non_local)]
|
||||
#[note(lint_exception)]
|
||||
#[note(lint_non_local_definitions_deprecation)]
|
||||
notes: (),
|
||||
#[subdiagnostic]
|
||||
cargo_update: Option<NonLocalDefinitionsCargoUpdateNote>,
|
||||
},
|
||||
}
|
||||
|
||||
impl<'a> LintDiagnostic<'a, ()> for NonLocalDefinitionsDiag {
|
||||
fn decorate_lint<'b>(self, diag: &'b mut Diag<'a, ()>) {
|
||||
match self {
|
||||
NonLocalDefinitionsDiag::Impl {
|
||||
depth,
|
||||
body_kind_descr,
|
||||
body_name,
|
||||
cargo_update,
|
||||
const_anon,
|
||||
} => {
|
||||
diag.primary_message(fluent::lint_non_local_definitions_impl);
|
||||
diag.arg("depth", depth);
|
||||
diag.arg("body_kind_descr", body_kind_descr);
|
||||
diag.arg("body_name", body_name);
|
||||
|
||||
diag.help(fluent::lint_help);
|
||||
diag.note(fluent::lint_non_local);
|
||||
diag.note(fluent::lint_exception);
|
||||
diag.note(fluent::lint_non_local_definitions_deprecation);
|
||||
|
||||
if let Some(cargo_update) = cargo_update {
|
||||
diag.subdiagnostic(&diag.dcx, cargo_update);
|
||||
}
|
||||
if let Some(const_anon) = const_anon {
|
||||
diag.span_suggestion(
|
||||
const_anon,
|
||||
fluent::lint_const_anon,
|
||||
"_",
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
}
|
||||
NonLocalDefinitionsDiag::MacroRules {
|
||||
depth,
|
||||
body_kind_descr,
|
||||
body_name,
|
||||
help,
|
||||
doctest_help,
|
||||
cargo_update,
|
||||
} => {
|
||||
diag.primary_message(fluent::lint_non_local_definitions_macro_rules);
|
||||
diag.arg("depth", depth);
|
||||
diag.arg("body_kind_descr", body_kind_descr);
|
||||
diag.arg("body_name", body_name);
|
||||
|
||||
if let Some(()) = help {
|
||||
diag.help(fluent::lint_help);
|
||||
}
|
||||
if let Some(()) = doctest_help {
|
||||
diag.help(fluent::lint_help_doctest);
|
||||
}
|
||||
|
||||
diag.note(fluent::lint_non_local);
|
||||
diag.note(fluent::lint_exception);
|
||||
diag.note(fluent::lint_non_local_definitions_deprecation);
|
||||
|
||||
if let Some(cargo_update) = cargo_update {
|
||||
diag.subdiagnostic(&diag.dcx, cargo_update);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[note(lint_non_local_definitions_cargo_update)]
|
||||
pub struct NonLocalDefinitionsCargoUpdateNote {
|
||||
|
@ -250,7 +250,6 @@ fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx Item<'tcx>) {
|
||||
cargo_update: cargo_update(),
|
||||
help: (!is_at_toplevel_doctest).then_some(()),
|
||||
doctest_help: is_at_toplevel_doctest.then_some(()),
|
||||
notes: (),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user