2022-08-17 14:51:01 +00:00
|
|
|
//! Errors emitted by ast_passes.
|
|
|
|
|
|
|
|
use rustc_errors::fluent;
|
|
|
|
use rustc_errors::{AddSubdiagnostic, Diagnostic};
|
2022-08-17 19:36:57 +00:00
|
|
|
use rustc_macros::{SessionDiagnostic, SessionSubdiagnostic};
|
|
|
|
use rustc_span::{Span, Symbol};
|
2022-08-17 14:51:01 +00:00
|
|
|
|
|
|
|
use crate::ast_validation::ForbiddenLetReason;
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::forbidden_let)]
|
|
|
|
#[note]
|
|
|
|
pub struct ForbiddenLet {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
#[subdiagnostic]
|
|
|
|
pub(crate) reason: ForbiddenLetReason,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl AddSubdiagnostic for ForbiddenLetReason {
|
|
|
|
fn add_to_diagnostic(self, diag: &mut Diagnostic) {
|
|
|
|
match self {
|
|
|
|
Self::GenericForbidden => {}
|
|
|
|
Self::NotSupportedOr(span) => {
|
|
|
|
diag.span_note(span, fluent::ast_passes::not_supported_or);
|
|
|
|
}
|
|
|
|
Self::NotSupportedParentheses(span) => {
|
|
|
|
diag.span_note(span, fluent::ast_passes::not_supported_parentheses);
|
2022-08-18 06:23:00 +00:00
|
|
|
}
|
2022-08-17 14:51:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-08-17 19:36:57 +00:00
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::forbidden_assoc_constraint)]
|
|
|
|
pub struct ForbiddenAssocConstraint {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::keyword_lifetime)]
|
|
|
|
pub struct KeywordLifetime {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::invalid_label)]
|
|
|
|
pub struct InvalidLabel {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
pub name: Symbol,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::invalid_visibility, code = "E0449")]
|
|
|
|
pub struct InvalidVisibility {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
#[label(ast_passes::implied)]
|
|
|
|
pub implied: Option<Span>,
|
|
|
|
#[subdiagnostic]
|
|
|
|
pub note: Option<InvalidVisibilityNote>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionSubdiagnostic)]
|
|
|
|
pub enum InvalidVisibilityNote {
|
|
|
|
#[note(ast_passes::individual_impl_items)]
|
|
|
|
IndividualImplItems,
|
|
|
|
#[note(ast_passes::individual_foreign_items)]
|
|
|
|
IndividualForeignItems,
|
|
|
|
}
|
2022-08-18 07:49:52 +00:00
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::trait_fn_async, code = "E0706")]
|
|
|
|
#[note]
|
|
|
|
#[note(ast_passes::note2)]
|
|
|
|
pub struct TraitFnAsync {
|
|
|
|
#[primary_span]
|
|
|
|
pub fn_span: Span,
|
|
|
|
#[label]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
2022-08-18 07:57:25 +00:00
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::trait_fn_const, code = "E0379")]
|
|
|
|
pub struct TraitFnConst {
|
|
|
|
#[primary_span]
|
|
|
|
#[label]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
2022-08-18 08:38:11 +00:00
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::forbidden_lifetime_bound)]
|
|
|
|
pub struct ForbiddenLifetimeBound {
|
|
|
|
#[primary_span]
|
|
|
|
pub spans: Vec<Span>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::forbidden_non_lifetime_param)]
|
|
|
|
pub struct ForbiddenNonLifetimeParam {
|
|
|
|
#[primary_span]
|
|
|
|
pub spans: Vec<Span>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::too_many_params)]
|
|
|
|
pub struct TooManyParams {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
pub max_num_args: usize,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
2022-08-18 08:53:59 +00:00
|
|
|
#[error(ast_passes::c_var_args_is_sole_param)]
|
|
|
|
pub struct CVarArgsIsSoleParam {
|
2022-08-18 08:38:11 +00:00
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::c_var_args_not_last)]
|
|
|
|
pub struct CVarArgsNotLast {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
2022-08-18 08:46:01 +00:00
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::doc_comment_on_fn_param)]
|
|
|
|
pub struct DocCommentOnFnParam {
|
|
|
|
#[primary_span]
|
|
|
|
#[label]
|
|
|
|
pub span: Span,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(SessionDiagnostic)]
|
|
|
|
#[error(ast_passes::forbidden_attr_on_fn_param)]
|
|
|
|
pub struct ForbiddenAttrOnFnParam {
|
|
|
|
#[primary_span]
|
|
|
|
pub span: Span,
|
|
|
|
}
|