diff options
| author | Tom Martin <tom.martin1239@gmail.com> | 2023-06-18 12:26:31 +0100 |
|---|---|---|
| committer | Tom Martin <tom.martin1239@gmail.com> | 2023-06-18 12:32:40 +0100 |
| commit | 4b5a5a4529d86cb0ff6abd539cbddebe81e0c0d1 (patch) | |
| tree | d475f103ccd2de99f9f0b716334e98a21e81c90d /compiler/rustc_resolve/src | |
| parent | 355a6895425354ee2caf5df99fbe4ec9d136a460 (diff) | |
| download | rust-4b5a5a4529d86cb0ff6abd539cbddebe81e0c0d1.tar.gz rust-4b5a5a4529d86cb0ff6abd539cbddebe81e0c0d1.zip | |
Add translatable diagnostic for various strings in resolve::unresolved_macro_suggestions
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/diagnostics.rs | 20 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/errors.rs | 31 |
2 files changed, 42 insertions, 9 deletions
diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 0c780672ea3..2a22e1ba242 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -30,7 +30,10 @@ use rustc_span::symbol::{kw, sym, Ident, Symbol}; use rustc_span::{BytePos, Span, SyntaxContext}; use thin_vec::ThinVec; -use crate::errors::{ChangeImportBinding, ChangeImportBindingSuggestion}; +use crate::errors::{ + AddedMacroUse, ChangeImportBinding, ChangeImportBindingSuggestion, ConsiderAddingADerive, + ConsiderAddingADeriveEnum, ExplicitUnsafeTraits, +}; use crate::imports::{Import, ImportKind}; use crate::late::{PatternSource, Rib}; use crate::path_names_to_string; @@ -1377,12 +1380,11 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { ); if macro_kind == MacroKind::Derive && (ident.name == sym::Send || ident.name == sym::Sync) { - let msg = format!("unsafe traits like `{}` should be implemented explicitly", ident); - err.span_note(ident.span, msg); + err.subdiagnostic(ExplicitUnsafeTraits { span: ident.span, ident }); return; } if self.macro_names.contains(&ident.normalize_to_macros_2_0()) { - err.help("have you added the `#[macro_use]` on the module/import?"); + err.subdiagnostic(AddedMacroUse); return; } if ident.name == kw::Default @@ -1392,12 +1394,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { let source_map = self.tcx.sess.source_map(); let head_span = source_map.guess_head_span(span); if let Ok(head) = source_map.span_to_snippet(head_span) { - err.span_suggestion(head_span, "consider adding a derive", format!("#[derive(Default)]\n{head}"), Applicability::MaybeIncorrect); + err.subdiagnostic(ConsiderAddingADerive { + span: head_span, + suggestion: format!("#[derive(Default)]\n{head}") + }); } else { - err.span_help( - head_span, - "consider adding `#[derive(Default)]` to this enum", - ); + err.subdiagnostic(ConsiderAddingADeriveEnum { span: head_span }); } } for ns in [Namespace::MacroNS, Namespace::TypeNS, Namespace::ValueNS] { diff --git a/compiler/rustc_resolve/src/errors.rs b/compiler/rustc_resolve/src/errors.rs index 0f9039912ed..fb70fbe2c1f 100644 --- a/compiler/rustc_resolve/src/errors.rs +++ b/compiler/rustc_resolve/src/errors.rs @@ -622,3 +622,34 @@ pub(crate) struct CannotFindIdentInThisScope<'a> { pub(crate) expected: &'a str, pub(crate) ident: Ident, } + +#[derive(Subdiagnostic)] +#[note(resolve_explicit_unsafe_traits)] +pub(crate) struct ExplicitUnsafeTraits { + #[primary_span] + pub(crate) span: Span, + pub(crate) ident: Ident, +} + +#[derive(Subdiagnostic)] +#[help(resolve_added_macro_use)] +pub(crate) struct AddedMacroUse; + +#[derive(Subdiagnostic)] +#[suggestion( + resolve_consider_adding_a_derive, + code = "{suggestion}", + applicability = "maybe-incorrect" +)] +pub(crate) struct ConsiderAddingADerive { + #[primary_span] + pub(crate) span: Span, + pub(crate) suggestion: String, +} + +#[derive(Subdiagnostic)] +#[help(resolve_consider_adding_a_derive_enum)] +pub(crate) struct ConsiderAddingADeriveEnum { + #[primary_span] + pub(crate) span: Span, +} |
