diff options
| author | Urgau <urgau@numericable.fr> | 2024-05-14 12:41:27 +0200 |
|---|---|---|
| committer | Urgau <urgau@numericable.fr> | 2024-05-27 23:58:55 +0200 |
| commit | 22095fbd8d71d46231d0acc7217594ee2fff133b (patch) | |
| tree | 829bbc374d2f8d9cf94ee8477f9ba25e53967513 /compiler | |
| parent | 26b873d030f5f6bcc21ea1037c6d546f28f98e52 (diff) | |
| download | rust-22095fbd8d71d46231d0acc7217594ee2fff133b.tar.gz rust-22095fbd8d71d46231d0acc7217594ee2fff133b.zip | |
non_local_defs: use labels to indicate what may need to be moved
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_lint/messages.ftl | 4 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/lints.rs | 15 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/non_local_def.rs | 3 |
3 files changed, 19 insertions, 3 deletions
diff --git a/compiler/rustc_lint/messages.ftl b/compiler/rustc_lint/messages.ftl index 52d8def425f..8582148e26c 100644 --- a/compiler/rustc_lint/messages.ftl +++ b/compiler/rustc_lint/messages.ftl @@ -544,7 +544,7 @@ lint_non_local_definitions_deprecation = this lint may become deny-by-default in lint_non_local_definitions_impl = non-local `impl` definition, `impl` blocks should be written at the same level as their item .help = - move this `impl` block outside the of the current {$body_kind_descr} {$depth -> + move this `impl` block outside of the current {$body_kind_descr} {$depth -> [one] `{$body_name}` *[other] `{$body_name}` and up {$depth} bodies } @@ -565,6 +565,8 @@ lint_non_local_definitions_macro_rules = non-local `macro_rules!` definition, `# .non_local = a `macro_rules!` definition is non-local if it is nested inside an item and has a `#[macro_export]` attribute .exception = one exception to the rule are anon-const (`const _: () = {"{"} ... {"}"}`) at top-level module +lint_non_local_definitions_may_move = may need to be moved as well + lint_non_snake_case = {$sort} `{$name}` should have a snake case name .rename_or_convert_suggestion = rename the identifier or convert it to a snake case raw identifier .cannot_convert_note = `{$sc}` cannot be used as a raw identifier diff --git a/compiler/rustc_lint/src/lints.rs b/compiler/rustc_lint/src/lints.rs index d3c409bb6e5..305cc67c1ee 100644 --- a/compiler/rustc_lint/src/lints.rs +++ b/compiler/rustc_lint/src/lints.rs @@ -6,7 +6,7 @@ use crate::errors::RequestedLevel; use crate::fluent_generated as fluent; use rustc_errors::{ codes::*, Applicability, Diag, DiagArgValue, DiagMessage, DiagStyledString, - ElidedLifetimeInPathSubdiag, EmissionGuarantee, LintDiagnostic, SubdiagMessageOp, + ElidedLifetimeInPathSubdiag, EmissionGuarantee, LintDiagnostic, MultiSpan, SubdiagMessageOp, Subdiagnostic, SuggestionStyle, }; use rustc_hir::{def::Namespace, def_id::DefId}; @@ -1336,6 +1336,9 @@ pub enum NonLocalDefinitionsDiag { body_name: String, cargo_update: Option<NonLocalDefinitionsCargoUpdateNote>, const_anon: Option<Option<Span>>, + move_help: Span, + self_ty: Span, + of_trait: Option<Span>, has_trait: bool, }, MacroRules { @@ -1357,6 +1360,9 @@ impl<'a> LintDiagnostic<'a, ()> for NonLocalDefinitionsDiag { body_name, cargo_update, const_anon, + move_help, + self_ty, + of_trait, has_trait, } => { diag.primary_message(fluent::lint_non_local_definitions_impl); @@ -1364,13 +1370,18 @@ impl<'a> LintDiagnostic<'a, ()> for NonLocalDefinitionsDiag { diag.arg("body_kind_descr", body_kind_descr); diag.arg("body_name", body_name); - diag.help(fluent::lint_help); if has_trait { diag.note(fluent::lint_bounds); diag.note(fluent::lint_with_trait); } else { diag.note(fluent::lint_without_trait); } + let mut ms = MultiSpan::from_span(move_help); + ms.push_span_label(self_ty, fluent::lint_non_local_definitions_may_move); + if let Some(of_trait) = of_trait { + ms.push_span_label(of_trait, fluent::lint_non_local_definitions_may_move); + } + diag.span_help(ms, fluent::lint_help); if let Some(cargo_update) = cargo_update { diag.subdiagnostic(&diag.dcx, cargo_update); diff --git a/compiler/rustc_lint/src/non_local_def.rs b/compiler/rustc_lint/src/non_local_def.rs index d4d3afcce3b..6b75e546a66 100644 --- a/compiler/rustc_lint/src/non_local_def.rs +++ b/compiler/rustc_lint/src/non_local_def.rs @@ -222,6 +222,9 @@ impl<'tcx> LateLintPass<'tcx> for NonLocalDefinitions { item.span.shrink_to_lo().to(impl_.self_ty.span), NonLocalDefinitionsDiag::Impl { depth: self.body_depth, + move_help: item.span, + self_ty: impl_.self_ty.span, + of_trait: impl_.of_trait.map(|t| t.path.span), body_kind_descr: cx.tcx.def_kind_descr(parent_def_kind, parent), body_name: parent_opt_item_name .map(|s| s.to_ident_string()) |
