Support #[fatal(..)]

This commit is contained in:
finalchild 2022-08-18 21:20:50 +09:00
parent bfefefbcfa
commit b28cc097cf
4 changed files with 27 additions and 2 deletions

View File

@ -331,7 +331,7 @@ impl<'a> AstValidator<'a> {
let max_num_args: usize = u16::MAX.into();
if fn_decl.inputs.len() > max_num_args {
let Param { span, .. } = fn_decl.inputs[0];
self.session.emit_err(FnParamTooMany { span, max_num_args });
self.session.emit_fatal(FnParamTooMany { span, max_num_args });
}
}

View File

@ -106,7 +106,7 @@ pub struct ForbiddenNonLifetimeParam {
}
#[derive(SessionDiagnostic)]
#[error(ast_passes::fn_param_too_many)]
#[fatal(ast_passes::fn_param_too_many)]
pub struct FnParamTooMany {
#[primary_span]
pub span: Span,

View File

@ -360,6 +360,17 @@ impl ParseSess {
self.create_warning(warning).emit()
}
pub fn create_fatal<'a>(
&'a self,
fatal: impl SessionDiagnostic<'a, !>,
) -> DiagnosticBuilder<'a, !> {
fatal.into_diagnostic(self)
}
pub fn emit_fatal<'a>(&'a self, fatal: impl SessionDiagnostic<'a, !>) -> ! {
self.create_fatal(fatal).emit()
}
#[rustc_lint_diagnostics]
pub fn struct_err(
&self,
@ -373,6 +384,11 @@ impl ParseSess {
self.span_diagnostic.struct_warn(msg)
}
#[rustc_lint_diagnostics]
pub fn struct_fatal(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, !> {
self.span_diagnostic.struct_fatal(msg)
}
#[rustc_lint_diagnostics]
pub fn struct_diagnostic<G: EmissionGuarantee>(
&self,

View File

@ -482,6 +482,15 @@ impl Session {
pub fn emit_warning<'a>(&'a self, warning: impl SessionDiagnostic<'a, ()>) {
self.parse_sess.emit_warning(warning)
}
pub fn create_fatal<'a>(
&'a self,
fatal: impl SessionDiagnostic<'a, !>,
) -> DiagnosticBuilder<'a, !> {
self.parse_sess.create_fatal(fatal)
}
pub fn emit_fatal<'a>(&'a self, fatal: impl SessionDiagnostic<'a, !>) {
self.parse_sess.emit_fatal(fatal)
}
#[inline]
pub fn err_count(&self) -> usize {
self.diagnostic().err_count()