diff options
Diffstat (limited to 'compiler/rustc_lint/src/errors.rs')
| -rw-r--r-- | compiler/rustc_lint/src/errors.rs | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/compiler/rustc_lint/src/errors.rs b/compiler/rustc_lint/src/errors.rs new file mode 100644 index 00000000000..46dfaf0b83f --- /dev/null +++ b/compiler/rustc_lint/src/errors.rs @@ -0,0 +1,110 @@ +use crate::fluent_generated as fluent; +use rustc_errors::{codes::*, Diag, EmissionGuarantee, SubdiagMessageOp, Subdiagnostic}; +use rustc_macros::{Diagnostic, Subdiagnostic}; +use rustc_session::lint::Level; +use rustc_span::{Span, Symbol}; + +#[derive(Diagnostic)] +#[diag(lint_overruled_attribute, code = E0453)] +pub struct OverruledAttribute<'a> { + #[primary_span] + pub span: Span, + #[label] + pub overruled: Span, + pub lint_level: &'a str, + pub lint_source: Symbol, + #[subdiagnostic] + pub sub: OverruledAttributeSub, +} + +pub enum OverruledAttributeSub { + DefaultSource { id: String }, + NodeSource { span: Span, reason: Option<Symbol> }, + CommandLineSource, +} + +impl Subdiagnostic for OverruledAttributeSub { + fn add_to_diag_with<G: EmissionGuarantee, F: SubdiagMessageOp<G>>( + self, + diag: &mut Diag<'_, G>, + _f: &F, + ) { + match self { + OverruledAttributeSub::DefaultSource { id } => { + diag.note(fluent::lint_default_source); + diag.arg("id", id); + } + OverruledAttributeSub::NodeSource { span, reason } => { + diag.span_label(span, fluent::lint_node_source); + if let Some(rationale) = reason { + #[allow(rustc::untranslatable_diagnostic)] + diag.note(rationale.to_string()); + } + } + OverruledAttributeSub::CommandLineSource => { + diag.note(fluent::lint_command_line_source); + } + } + } +} + +#[derive(Diagnostic)] +#[diag(lint_malformed_attribute, code = E0452)] +pub struct MalformedAttribute { + #[primary_span] + pub span: Span, + #[subdiagnostic] + pub sub: MalformedAttributeSub, +} + +#[derive(Subdiagnostic)] +pub enum MalformedAttributeSub { + #[label(lint_bad_attribute_argument)] + BadAttributeArgument(#[primary_span] Span), + #[label(lint_reason_must_be_string_literal)] + ReasonMustBeStringLiteral(#[primary_span] Span), + #[label(lint_reason_must_come_last)] + ReasonMustComeLast(#[primary_span] Span), +} + +#[derive(Diagnostic)] +#[diag(lint_unknown_tool_in_scoped_lint, code = E0710)] +pub struct UnknownToolInScopedLint { + #[primary_span] + pub span: Option<Span>, + pub tool_name: Symbol, + pub lint_name: String, + #[help] + pub is_nightly_build: Option<()>, +} + +#[derive(Diagnostic)] +#[diag(lint_builtin_ellipsis_inclusive_range_patterns, code = E0783)] +pub struct BuiltinEllipsisInclusiveRangePatterns { + #[primary_span] + pub span: Span, + #[suggestion(style = "short", code = "{replace}", applicability = "machine-applicable")] + pub suggestion: Span, + pub replace: String, +} + +#[derive(Subdiagnostic)] +#[note(lint_requested_level)] +pub struct RequestedLevel<'a> { + pub level: Level, + pub lint_name: &'a str, +} + +#[derive(Diagnostic)] +#[diag(lint_unsupported_group, code = E0602)] +pub struct UnsupportedGroup { + pub lint_group: String, +} + +#[derive(Diagnostic)] +#[diag(lint_check_name_unknown_tool, code = E0602)] +pub struct CheckNameUnknownTool<'a> { + pub tool_name: Symbol, + #[subdiagnostic] + pub sub: RequestedLevel<'a>, +} |
