1
Fork 0

Migrate derivable diagnostics in lang_items.rs

This commit is contained in:
rdvdev2 2022-09-02 00:11:44 +02:00 committed by Nathan Stocks
parent 2f74d1d14f
commit 17a4a68ab0
3 changed files with 37 additions and 22 deletions

View file

@ -1,4 +1,5 @@
use rustc_errors::{Applicability, MultiSpan};
use rustc_hir::Target;
use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
use rustc_span::{Span, Symbol};
@ -682,3 +683,23 @@ pub struct MissingAllocErrorHandler;
pub struct MissingLangItem {
pub name: Symbol,
}
#[derive(Diagnostic)]
#[diag(passes::lang_item_on_incorrect_target, code = "E0718")]
pub struct LangItemOnIncorrectTarget {
#[primary_span]
#[label]
pub span: Span,
pub name: Symbol,
pub expected_target: Target,
pub actual_target: Target,
}
#[derive(Diagnostic)]
#[diag(passes::unknown_lang_item, code = "E0522")]
pub struct UnknownLangItem {
#[primary_span]
#[label]
pub span: Span,
pub name: Symbol,
}

View file

@ -7,6 +7,7 @@
//! * Traits that represent operators; e.g., `Add`, `Sub`, `Index`.
//! * Functions called by the compiler itself.
use crate::errors::{LangItemOnIncorrectTarget, UnknownLangItem};
use crate::check_attr::target_from_impl_item;
use crate::weak_lang_items;
@ -42,34 +43,19 @@ impl<'tcx> LanguageItemCollector<'tcx> {
}
// Known lang item with attribute on incorrect target.
Some((_, expected_target)) => {
struct_span_err!(
self.tcx.sess,
self.tcx.sess.emit_err(LangItemOnIncorrectTarget {
span,
E0718,
"`{}` language item must be applied to a {}",
value,
name: value,
expected_target,
)
.span_label(
span,
format!(
"attribute should be applied to a {}, not a {}",
expected_target, actual_target,
),
)
.emit();
actual_target,
});
}
// Unknown lang item.
_ => {
struct_span_err!(
self.tcx.sess,
self.tcx.sess.emit_err(UnknownLangItem {
span,
E0522,
"definition of an unknown language item: `{}`",
value
)
.span_label(span, format!("definition of unknown language item `{}`", value))
.emit();
name: value,
});
}
}
}