@@ -5,7 +5,7 @@ use crate::session_diagnostics::{
55 CaptureVarKind , CaptureVarPathUseCause , OnClosureNote ,
66} ;
77use itertools:: Itertools ;
8- use rustc_errors:: { Applicability , Diag } ;
8+ use rustc_errors:: { Applicability , Diag , DiagArgValue , IntoDiagnosticArg } ;
99use rustc_hir as hir;
1010use rustc_hir:: def:: { CtorKind , Namespace } ;
1111use rustc_hir:: CoroutineKind ;
@@ -48,7 +48,7 @@ mod region_errors;
4848
4949pub ( crate ) use bound_region_errors:: { ToUniverseInfo , UniverseInfo } ;
5050pub ( crate ) use move_errors:: { IllegalMoveOriginKind , MoveError } ;
51- pub ( crate ) use mutability_errors:: AccessKind ;
51+ pub ( crate ) use mutability_errors:: { AccessKind , PlaceAndReason } ;
5252pub ( crate ) use outlives_suggestion:: OutlivesSuggestionBuilder ;
5353pub ( crate ) use region_errors:: { ErrorConstraintInfo , RegionErrorKind , RegionErrors } ;
5454pub ( crate ) use region_name:: { RegionName , RegionNameSource } ;
@@ -64,6 +64,18 @@ pub(super) struct DescribePlaceOpt {
6464
6565pub ( super ) struct IncludingTupleField ( pub ( super ) bool ) ;
6666
67+ #[ derive( Debug ) ]
68+ pub ( super ) struct DescribedPlace ( pub ( super ) Option < String > ) ;
69+
70+ impl IntoDiagnosticArg for DescribedPlace {
71+ fn into_diagnostic_arg ( self ) -> DiagArgValue {
72+ match self . 0 {
73+ Some ( descr) => descr. into_diagnostic_arg ( ) ,
74+ None => "value" . into_diagnostic_arg ( ) ,
75+ }
76+ }
77+ }
78+
6779impl < ' cx , ' tcx > MirBorrowckCtxt < ' cx , ' tcx > {
6880 /// Adds a suggestion when a closure is invoked twice with a moved variable or when a closure
6981 /// is moved after being invoked.
@@ -76,7 +88,6 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
7688 /// LL | for (key, value) in dict {
7789 /// | ^^^^
7890 /// ```
79- #[ allow( rustc:: diagnostic_outside_of_impl) ] // FIXME
8091 pub ( super ) fn add_moved_or_invoked_closure_note (
8192 & self ,
8293 location : Location ,
@@ -176,6 +187,10 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
176187 }
177188 }
178189
190+ pub ( super ) fn describe_place_typed ( & self , place_ref : PlaceRef < ' tcx > ) -> DescribedPlace {
191+ DescribedPlace ( self . describe_place ( place_ref) )
192+ }
193+
179194 /// End-user visible description of `place` if one can be found.
180195 /// If the place is a temporary for instance, `None` will be returned.
181196 pub ( super ) fn describe_place ( & self , place_ref : PlaceRef < ' tcx > ) -> Option < String > {
@@ -586,7 +601,6 @@ impl UseSpans<'_> {
586601 }
587602
588603 /// Add a span label to the arguments of the closure, if it exists.
589- #[ allow( rustc:: diagnostic_outside_of_impl) ]
590604 pub ( super ) fn args_subdiag (
591605 self ,
592606 dcx : & rustc_errors:: DiagCtxt ,
@@ -600,7 +614,6 @@ impl UseSpans<'_> {
600614
601615 /// Add a span label to the use of the captured variable, if it exists.
602616 /// only adds label to the `path_span`
603- #[ allow( rustc:: diagnostic_outside_of_impl) ]
604617 pub ( super ) fn var_path_only_subdiag (
605618 self ,
606619 dcx : & rustc_errors:: DiagCtxt ,
@@ -638,7 +651,6 @@ impl UseSpans<'_> {
638651 }
639652
640653 /// Add a subdiagnostic to the use of the captured variable, if it exists.
641- #[ allow( rustc:: diagnostic_outside_of_impl) ]
642654 pub ( super ) fn var_subdiag (
643655 self ,
644656 dcx : & rustc_errors:: DiagCtxt ,
@@ -703,6 +715,7 @@ impl UseSpans<'_> {
703715 }
704716}
705717
718+ #[ derive( Clone , Copy , Debug ) ]
706719pub ( super ) enum BorrowedContentSource < ' tcx > {
707720 DerefRawPointer ,
708721 DerefMutableRef ,
@@ -754,7 +767,7 @@ impl<'tcx> BorrowedContentSource<'tcx> {
754767 _ => None ,
755768 } )
756769 . unwrap_or_else ( || format ! ( "dereference of `{ty}`" ) ) ,
757- BorrowedContentSource :: OverloadedIndex ( ty) => format ! ( "an index of `{ty}`" ) ,
770+ BorrowedContentSource :: OverloadedIndex ( ty) => format ! ( "`{ty}`" ) ,
758771 }
759772 }
760773
@@ -1012,8 +1025,6 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
10121025 self . borrow_spans ( span, borrow. reserve_location )
10131026 }
10141027
1015- #[ allow( rustc:: diagnostic_outside_of_impl) ]
1016- #[ allow( rustc:: untranslatable_diagnostic) ] // FIXME: make this translatable
10171028 fn explain_captures (
10181029 & mut self ,
10191030 err : & mut Diag < ' _ > ,
0 commit comments