mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Simplify lint decorator derive too
This commit is contained in:
parent
ca5c68a110
commit
108bec6723
@ -91,10 +91,7 @@ where
|
|||||||
#[rustc_diagnostic_item = "DecorateLint"]
|
#[rustc_diagnostic_item = "DecorateLint"]
|
||||||
pub trait DecorateLint<'a, G: EmissionGuarantee> {
|
pub trait DecorateLint<'a, G: EmissionGuarantee> {
|
||||||
/// Decorate and emit a lint.
|
/// Decorate and emit a lint.
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut DiagnosticBuilder<'a, G>);
|
||||||
self,
|
|
||||||
diag: &'b mut DiagnosticBuilder<'a, G>,
|
|
||||||
) -> &'b mut DiagnosticBuilder<'a, G>;
|
|
||||||
|
|
||||||
fn msg(&self) -> DiagnosticMessage;
|
fn msg(&self) -> DiagnosticMessage;
|
||||||
}
|
}
|
||||||
|
@ -134,12 +134,8 @@ pub struct BuiltinMissingDebugImpl<'a> {
|
|||||||
|
|
||||||
// Needed for def_path_str
|
// Needed for def_path_str
|
||||||
impl<'a> DecorateLint<'a, ()> for BuiltinMissingDebugImpl<'_> {
|
impl<'a> DecorateLint<'a, ()> for BuiltinMissingDebugImpl<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("debug", self.tcx.def_path_str(self.def_id));
|
diag.set_arg("debug", self.tcx.def_path_str(self.def_id));
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> DiagnosticMessage {
|
fn msg(&self) -> DiagnosticMessage {
|
||||||
@ -243,17 +239,13 @@ pub struct BuiltinUngatedAsyncFnTrackCaller<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> DecorateLint<'a, ()> for BuiltinUngatedAsyncFnTrackCaller<'_> {
|
impl<'a> DecorateLint<'a, ()> for BuiltinUngatedAsyncFnTrackCaller<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.span_label(self.label, fluent::lint_label);
|
diag.span_label(self.label, fluent::lint_label);
|
||||||
rustc_session::parse::add_feature_diagnostics(
|
rustc_session::parse::add_feature_diagnostics(
|
||||||
diag,
|
diag,
|
||||||
self.parse_sess,
|
self.parse_sess,
|
||||||
sym::async_fn_track_caller,
|
sym::async_fn_track_caller,
|
||||||
);
|
);
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> DiagnosticMessage {
|
fn msg(&self) -> DiagnosticMessage {
|
||||||
@ -433,10 +425,7 @@ pub struct BuiltinUnpermittedTypeInit<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
|
impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("ty", self.ty);
|
diag.set_arg("ty", self.ty);
|
||||||
diag.span_label(self.label, fluent::lint_builtin_unpermitted_type_init_label);
|
diag.span_label(self.label, fluent::lint_builtin_unpermitted_type_init_label);
|
||||||
if let InhabitedPredicate::True = self.ty.inhabited_predicate(self.tcx) {
|
if let InhabitedPredicate::True = self.ty.inhabited_predicate(self.tcx) {
|
||||||
@ -447,7 +436,6 @@ impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
self.sub.add_to_diagnostic(diag);
|
self.sub.add_to_diagnostic(diag);
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1159,10 +1147,7 @@ pub struct NonFmtPanicUnused {
|
|||||||
|
|
||||||
// Used because of two suggestions based on one Option<Span>
|
// Used because of two suggestions based on one Option<Span>
|
||||||
impl<'a> DecorateLint<'a, ()> for NonFmtPanicUnused {
|
impl<'a> DecorateLint<'a, ()> for NonFmtPanicUnused {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("count", self.count);
|
diag.set_arg("count", self.count);
|
||||||
diag.note(fluent::lint_note);
|
diag.note(fluent::lint_note);
|
||||||
if let Some(span) = self.suggestion {
|
if let Some(span) = self.suggestion {
|
||||||
@ -1179,7 +1164,6 @@ impl<'a> DecorateLint<'a, ()> for NonFmtPanicUnused {
|
|||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1358,12 +1342,9 @@ pub struct DropTraitConstraintsDiag<'a> {
|
|||||||
|
|
||||||
// Needed for def_path_str
|
// Needed for def_path_str
|
||||||
impl<'a> DecorateLint<'a, ()> for DropTraitConstraintsDiag<'_> {
|
impl<'a> DecorateLint<'a, ()> for DropTraitConstraintsDiag<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("predicate", self.predicate);
|
diag.set_arg("predicate", self.predicate);
|
||||||
diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id))
|
diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1378,11 +1359,8 @@ pub struct DropGlue<'a> {
|
|||||||
|
|
||||||
// Needed for def_path_str
|
// Needed for def_path_str
|
||||||
impl<'a> DecorateLint<'a, ()> for DropGlue<'_> {
|
impl<'a> DecorateLint<'a, ()> for DropGlue<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id));
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1655,10 +1633,7 @@ pub struct ImproperCTypes<'a> {
|
|||||||
|
|
||||||
// Used because of the complexity of Option<DiagnosticMessage>, DiagnosticMessage, and Option<Span>
|
// Used because of the complexity of Option<DiagnosticMessage>, DiagnosticMessage, and Option<Span>
|
||||||
impl<'a> DecorateLint<'a, ()> for ImproperCTypes<'_> {
|
impl<'a> DecorateLint<'a, ()> for ImproperCTypes<'_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("ty", self.ty);
|
diag.set_arg("ty", self.ty);
|
||||||
diag.set_arg("desc", self.desc);
|
diag.set_arg("desc", self.desc);
|
||||||
diag.span_label(self.label, fluent::lint_label);
|
diag.span_label(self.label, fluent::lint_label);
|
||||||
@ -1669,7 +1644,6 @@ impl<'a> DecorateLint<'a, ()> for ImproperCTypes<'_> {
|
|||||||
if let Some(note) = self.span_note {
|
if let Some(note) = self.span_note {
|
||||||
diag.span_note(note, fluent::lint_note);
|
diag.span_note(note, fluent::lint_note);
|
||||||
}
|
}
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1802,10 +1776,7 @@ pub enum UnusedDefSuggestion {
|
|||||||
|
|
||||||
// Needed because of def_path_str
|
// Needed because of def_path_str
|
||||||
impl<'a> DecorateLint<'a, ()> for UnusedDef<'_, '_> {
|
impl<'a> DecorateLint<'a, ()> for UnusedDef<'_, '_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.set_arg("pre", self.pre);
|
diag.set_arg("pre", self.pre);
|
||||||
diag.set_arg("post", self.post);
|
diag.set_arg("post", self.post);
|
||||||
diag.set_arg("def", self.cx.tcx.def_path_str(self.def_id));
|
diag.set_arg("def", self.cx.tcx.def_path_str(self.def_id));
|
||||||
@ -1816,7 +1787,6 @@ impl<'a> DecorateLint<'a, ()> for UnusedDef<'_, '_> {
|
|||||||
if let Some(sugg) = self.suggestion {
|
if let Some(sugg) = self.suggestion {
|
||||||
diag.subdiagnostic(sugg);
|
diag.subdiagnostic(sugg);
|
||||||
}
|
}
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
@ -1889,15 +1859,11 @@ pub struct AsyncFnInTraitDiag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> DecorateLint<'a, ()> for AsyncFnInTraitDiag {
|
impl<'a> DecorateLint<'a, ()> for AsyncFnInTraitDiag {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.note(fluent::lint_note);
|
diag.note(fluent::lint_note);
|
||||||
if let Some(sugg) = self.sugg {
|
if let Some(sugg) = self.sugg {
|
||||||
diag.multipart_suggestion(fluent::lint_suggestion, sugg, Applicability::MaybeIncorrect);
|
diag.multipart_suggestion(fluent::lint_suggestion, sugg, Applicability::MaybeIncorrect);
|
||||||
}
|
}
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
|
@ -175,9 +175,9 @@ impl<'a> LintDiagnosticDerive<'a> {
|
|||||||
fn decorate_lint<'__b>(
|
fn decorate_lint<'__b>(
|
||||||
self,
|
self,
|
||||||
#diag: &'__b mut rustc_errors::DiagnosticBuilder<'__a, ()>
|
#diag: &'__b mut rustc_errors::DiagnosticBuilder<'__a, ()>
|
||||||
) -> &'__b mut rustc_errors::DiagnosticBuilder<'__a, ()> {
|
) {
|
||||||
use rustc_errors::IntoDiagnosticArg;
|
use rustc_errors::IntoDiagnosticArg;
|
||||||
#implementation
|
#implementation;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
|
@ -180,10 +180,7 @@ pub(crate) struct UnsafeOpInUnsafeFn {
|
|||||||
|
|
||||||
impl<'a> DecorateLint<'a, ()> for UnsafeOpInUnsafeFn {
|
impl<'a> DecorateLint<'a, ()> for UnsafeOpInUnsafeFn {
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut DiagnosticBuilder<'a, ()> {
|
|
||||||
let handler = diag.handler().expect("lint should not yet be emitted");
|
let handler = diag.handler().expect("lint should not yet be emitted");
|
||||||
let desc = handler.eagerly_translate_to_string(self.details.label(), [].into_iter());
|
let desc = handler.eagerly_translate_to_string(self.details.label(), [].into_iter());
|
||||||
diag.set_arg("details", desc);
|
diag.set_arg("details", desc);
|
||||||
@ -198,8 +195,6 @@ impl<'a> DecorateLint<'a, ()> for UnsafeOpInUnsafeFn {
|
|||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> DiagnosticMessage {
|
fn msg(&self) -> DiagnosticMessage {
|
||||||
@ -213,10 +208,7 @@ pub(crate) enum AssertLint<P> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, P: std::fmt::Debug> DecorateLint<'a, ()> for AssertLint<P> {
|
impl<'a, P: std::fmt::Debug> DecorateLint<'a, ()> for AssertLint<P> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut DiagnosticBuilder<'a, ()> {
|
|
||||||
let span = self.span();
|
let span = self.span();
|
||||||
let assert_kind = self.panic();
|
let assert_kind = self.panic();
|
||||||
let message = assert_kind.diagnostic_message();
|
let message = assert_kind.diagnostic_message();
|
||||||
@ -224,8 +216,6 @@ impl<'a, P: std::fmt::Debug> DecorateLint<'a, ()> for AssertLint<P> {
|
|||||||
diag.set_arg(name, value);
|
diag.set_arg(name, value);
|
||||||
});
|
});
|
||||||
diag.span_label(span, message);
|
diag.span_label(span, message);
|
||||||
|
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> DiagnosticMessage {
|
fn msg(&self) -> DiagnosticMessage {
|
||||||
@ -284,10 +274,7 @@ pub(crate) struct MustNotSupend<'tcx, 'a> {
|
|||||||
|
|
||||||
// Needed for def_path_str
|
// Needed for def_path_str
|
||||||
impl<'a> DecorateLint<'a, ()> for MustNotSupend<'_, '_> {
|
impl<'a> DecorateLint<'a, ()> for MustNotSupend<'_, '_> {
|
||||||
fn decorate_lint<'b>(
|
fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
|
||||||
self,
|
|
||||||
diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
|
|
||||||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
|
||||||
diag.span_label(self.yield_sp, fluent::_subdiag::label);
|
diag.span_label(self.yield_sp, fluent::_subdiag::label);
|
||||||
if let Some(reason) = self.reason {
|
if let Some(reason) = self.reason {
|
||||||
diag.subdiagnostic(reason);
|
diag.subdiagnostic(reason);
|
||||||
@ -296,7 +283,6 @@ impl<'a> DecorateLint<'a, ()> for MustNotSupend<'_, '_> {
|
|||||||
diag.set_arg("pre", self.pre);
|
diag.set_arg("pre", self.pre);
|
||||||
diag.set_arg("def_path", self.tcx.def_path_str(self.def_id));
|
diag.set_arg("def_path", self.tcx.def_path_str(self.def_id));
|
||||||
diag.set_arg("post", self.post);
|
diag.set_arg("post", self.post);
|
||||||
diag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
fn msg(&self) -> rustc_errors::DiagnosticMessage {
|
||||||
|
Loading…
Reference in New Issue
Block a user