| use std::borrow::Cow; |
| |
| use rustc_ast::ast; |
| use rustc_errors::codes::*; |
| use rustc_macros::{Diagnostic, Subdiagnostic}; |
| use rustc_session::Limit; |
| use rustc_span::{Ident, MacroRulesNormalizedIdent, Span, Symbol}; |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_expr_repeat_no_syntax_vars)] |
| pub(crate) struct NoSyntaxVarsExprRepeat { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_must_repeat_once)] |
| pub(crate) struct MustRepeatOnce { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_count_repetition_misplaced)] |
| pub(crate) struct CountRepetitionMisplaced { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_var_still_repeating)] |
| pub(crate) struct VarStillRepeating { |
| #[primary_span] |
| pub span: Span, |
| pub ident: MacroRulesNormalizedIdent, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_meta_var_dif_seq_matchers)] |
| pub(crate) struct MetaVarsDifSeqMatchers { |
| #[primary_span] |
| pub span: Span, |
| pub msg: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_resolve_relative_path)] |
| pub(crate) struct ResolveRelativePath { |
| #[primary_span] |
| pub span: Span, |
| pub path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_collapse_debuginfo_illegal)] |
| pub(crate) struct CollapseMacroDebuginfoIllegal { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_macro_const_stability)] |
| pub(crate) struct MacroConstStability { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(expand_label2)] |
| pub head_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_macro_body_stability)] |
| pub(crate) struct MacroBodyStability { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(expand_label2)] |
| pub head_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_feature_removed, code = E0557)] |
| #[note] |
| pub(crate) struct FeatureRemoved<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[subdiagnostic] |
| pub reason: Option<FeatureRemovedReason<'a>>, |
| pub removed_rustc_version: &'a str, |
| pub pull_note: String, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(expand_reason)] |
| pub(crate) struct FeatureRemovedReason<'a> { |
| pub reason: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_feature_not_allowed, code = E0725)] |
| pub(crate) struct FeatureNotAllowed { |
| #[primary_span] |
| pub span: Span, |
| pub name: Symbol, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_recursion_limit_reached)] |
| #[help] |
| pub(crate) struct RecursionLimitReached { |
| #[primary_span] |
| pub span: Span, |
| pub descr: String, |
| pub suggested_limit: Limit, |
| pub crate_name: Symbol, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_malformed_feature_attribute, code = E0556)] |
| pub(crate) struct MalformedFeatureAttribute { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub help: MalformedFeatureAttributeHelp, |
| } |
| |
| #[derive(Subdiagnostic)] |
| pub(crate) enum MalformedFeatureAttributeHelp { |
| #[label(expand_expected)] |
| Label { |
| #[primary_span] |
| span: Span, |
| }, |
| #[suggestion(expand_expected, code = "{suggestion}", applicability = "maybe-incorrect")] |
| Suggestion { |
| #[primary_span] |
| span: Span, |
| suggestion: Symbol, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_remove_expr_not_supported)] |
| pub(crate) struct RemoveExprNotSupported { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| pub(crate) enum InvalidCfg { |
| #[diag(expand_invalid_cfg_no_parens)] |
| NotFollowedByParens { |
| #[primary_span] |
| #[suggestion( |
| expand_invalid_cfg_expected_syntax, |
| code = "cfg(/* predicate */)", |
| applicability = "has-placeholders" |
| )] |
| span: Span, |
| }, |
| #[diag(expand_invalid_cfg_no_predicate)] |
| NoPredicate { |
| #[primary_span] |
| #[suggestion( |
| expand_invalid_cfg_expected_syntax, |
| code = "cfg(/* predicate */)", |
| applicability = "has-placeholders" |
| )] |
| span: Span, |
| }, |
| #[diag(expand_invalid_cfg_multiple_predicates)] |
| MultiplePredicates { |
| #[primary_span] |
| span: Span, |
| }, |
| #[diag(expand_invalid_cfg_predicate_literal)] |
| PredicateLiteral { |
| #[primary_span] |
| span: Span, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_wrong_fragment_kind)] |
| pub(crate) struct WrongFragmentKind<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub kind: &'a str, |
| pub name: &'a ast::Path, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_unsupported_key_value)] |
| pub(crate) struct UnsupportedKeyValue { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_incomplete_parse)] |
| #[note] |
| pub(crate) struct IncompleteParse<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub descr: String, |
| #[label] |
| pub label_span: Span, |
| pub macro_path: &'a ast::Path, |
| pub kind_name: &'a str, |
| #[note(expand_macro_expands_to_match_arm)] |
| pub expands_to_match_arm: bool, |
| |
| #[suggestion( |
| expand_suggestion_add_semi, |
| style = "verbose", |
| code = ";", |
| applicability = "maybe-incorrect" |
| )] |
| pub add_semicolon: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_remove_node_not_supported)] |
| pub(crate) struct RemoveNodeNotSupported { |
| #[primary_span] |
| pub span: Span, |
| pub descr: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_module_circular)] |
| pub(crate) struct ModuleCircular { |
| #[primary_span] |
| pub span: Span, |
| pub modules: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_module_in_block)] |
| pub(crate) struct ModuleInBlock { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub name: Option<ModuleInBlockName>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(expand_note)] |
| pub(crate) struct ModuleInBlockName { |
| #[primary_span] |
| pub span: Span, |
| pub name: Ident, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_module_file_not_found, code = E0583)] |
| #[help] |
| #[note] |
| pub(crate) struct ModuleFileNotFound { |
| #[primary_span] |
| pub span: Span, |
| pub name: Ident, |
| pub default_path: String, |
| pub secondary_path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_module_multiple_candidates, code = E0761)] |
| #[help] |
| pub(crate) struct ModuleMultipleCandidates { |
| #[primary_span] |
| pub span: Span, |
| pub name: Ident, |
| pub default_path: String, |
| pub secondary_path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_trace_macro)] |
| pub(crate) struct TraceMacro { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_proc_macro_panicked)] |
| pub(crate) struct ProcMacroPanicked { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub message: Option<ProcMacroPanickedHelp>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[help(expand_help)] |
| pub(crate) struct ProcMacroPanickedHelp { |
| pub message: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_proc_macro_derive_panicked)] |
| pub(crate) struct ProcMacroDerivePanicked { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub message: Option<ProcMacroDerivePanickedHelp>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[help(expand_help)] |
| pub(crate) struct ProcMacroDerivePanickedHelp { |
| pub message: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_custom_attribute_panicked)] |
| pub(crate) struct CustomAttributePanicked { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub message: Option<CustomAttributePanickedHelp>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[help(expand_help)] |
| pub(crate) struct CustomAttributePanickedHelp { |
| pub message: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_proc_macro_derive_tokens)] |
| pub(crate) struct ProcMacroDeriveTokens { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_duplicate_matcher_binding)] |
| pub(crate) struct DuplicateMatcherBinding { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(expand_label2)] |
| pub prev: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_missing_fragment_specifier)] |
| #[note] |
| #[help(expand_valid)] |
| pub(crate) struct MissingFragmentSpecifier { |
| #[primary_span] |
| pub span: Span, |
| #[suggestion( |
| expand_suggestion_add_fragspec, |
| style = "verbose", |
| code = ":spec", |
| applicability = "maybe-incorrect" |
| )] |
| pub add_span: Span, |
| pub valid: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_invalid_fragment_specifier)] |
| #[help] |
| pub(crate) struct InvalidFragmentSpecifier { |
| #[primary_span] |
| pub span: Span, |
| pub fragment: Ident, |
| pub help: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_expected_paren_or_brace)] |
| pub(crate) struct ExpectedParenOrBrace<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub token: Cow<'a, str>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_empty_delegation_mac)] |
| pub(crate) struct EmptyDelegationMac { |
| #[primary_span] |
| pub span: Span, |
| pub kind: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_glob_delegation_outside_impls)] |
| pub(crate) struct GlobDelegationOutsideImpls { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_crate_name_in_cfg_attr)] |
| pub(crate) struct CrateNameInCfgAttr { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_crate_type_in_cfg_attr)] |
| pub(crate) struct CrateTypeInCfgAttr { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_glob_delegation_traitless_qpath)] |
| pub(crate) struct GlobDelegationTraitlessQpath { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| // This used to be the `proc_macro_back_compat` lint (#83125). It was later |
| // turned into a hard error. |
| #[derive(Diagnostic)] |
| #[diag(expand_proc_macro_back_compat)] |
| #[note] |
| pub(crate) struct ProcMacroBackCompat { |
| pub crate_name: String, |
| pub fixed_version: String, |
| } |
| |
| pub(crate) use metavar_exprs::*; |
| mod metavar_exprs { |
| use super::*; |
| |
| #[derive(Diagnostic, Default)] |
| #[diag(expand_mve_extra_tokens)] |
| pub(crate) struct MveExtraTokens { |
| #[primary_span] |
| #[suggestion(code = "", applicability = "machine-applicable")] |
| pub span: Span, |
| #[label] |
| pub ident_span: Span, |
| pub extra_count: usize, |
| |
| // The rest is only used for specific diagnostics and can be default if neither |
| // `note` is `Some`. |
| #[note(expand_exact)] |
| pub exact_args_note: Option<()>, |
| #[note(expand_range)] |
| pub range_args_note: Option<()>, |
| pub min_or_exact_args: usize, |
| pub max_args: usize, |
| pub name: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[note] |
| #[diag(expand_mve_missing_paren)] |
| pub(crate) struct MveMissingParen { |
| #[primary_span] |
| #[label] |
| pub ident_span: Span, |
| #[label(expand_unexpected)] |
| pub unexpected_span: Option<Span>, |
| #[suggestion(code = "( /* ... */ )", applicability = "has-placeholders")] |
| pub insert_span: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[note] |
| #[diag(expand_mve_unrecognized_expr)] |
| pub(crate) struct MveUnrecognizedExpr { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub valid_expr_list: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(expand_mve_unrecognized_var)] |
| pub(crate) struct MveUnrecognizedVar { |
| #[primary_span] |
| pub span: Span, |
| pub key: MacroRulesNormalizedIdent, |
| } |
| } |