@@ -677,11 +677,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
677
677
678
678
borrow_spans. var_path_only_subdiag ( & mut err, crate :: InitializationRequiringAction :: Borrow ) ;
679
679
680
- move_spans. var_span_label (
681
- & mut err,
682
- format ! ( "move occurs due to use{}" , move_spans. describe( ) ) ,
683
- "moved" ,
684
- ) ;
680
+ move_spans. var_subdiag ( & mut err, None , |kind, var_span| {
681
+ use crate :: session_diagnostics:: CaptureVarCause :: * ;
682
+ match kind {
683
+ Some ( _) => MoveUseInGenerator { var_span } ,
684
+ None => MoveUseInClosure { var_span } ,
685
+ }
686
+ } ) ;
685
687
686
688
self . explain_why_borrow_contains_point ( location, borrow, None )
687
689
. add_explanation_to_diagnostic (
@@ -832,16 +834,17 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
832
834
immutable_section_description,
833
835
"mutably borrow" ,
834
836
) ;
835
- borrow_spans. var_span_label (
837
+ borrow_spans. var_subdiag (
836
838
& mut err,
837
- format ! (
838
- "borrow occurs due to use of {}{}" ,
839
- desc_place,
840
- borrow_spans. describe( ) ,
841
- ) ,
842
- "immutable" ,
839
+ Some ( BorrowKind :: Unique ) ,
840
+ |kind, var_span| {
841
+ use crate :: session_diagnostics:: CaptureVarCause :: * ;
842
+ match kind {
843
+ Some ( _) => BorrowUsePlaceGenerator { place : desc_place, var_span } ,
844
+ None => BorrowUsePlaceClosure { place : desc_place, var_span } ,
845
+ }
846
+ } ,
843
847
) ;
844
-
845
848
return err;
846
849
} else {
847
850
first_borrow_desc = "immutable " ;
@@ -914,11 +917,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
914
917
} ;
915
918
916
919
if issued_spans == borrow_spans {
917
- borrow_spans. var_span_label (
918
- & mut err,
919
- format ! ( "borrows occur due to use of {}{}" , desc_place, borrow_spans. describe( ) , ) ,
920
- gen_borrow_kind. describe_mutability ( ) ,
921
- ) ;
920
+ borrow_spans. var_subdiag ( & mut err, Some ( gen_borrow_kind) , |kind, var_span| {
921
+ use crate :: session_diagnostics:: CaptureVarCause :: * ;
922
+ match kind {
923
+ Some ( _) => BorrowsUsePlaceGenerator { place : desc_place, var_span } ,
924
+ None => BorrowsUsePlaceClosure { place : desc_place, var_span } ,
925
+ }
926
+ } ) ;
922
927
} else {
923
928
let borrow_place = & issued_borrow. borrowed_place ;
924
929
let borrow_place_desc = self . describe_any_place ( borrow_place. as_ref ( ) ) ;
@@ -2056,11 +2061,14 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
2056
2061
section,
2057
2062
"assign" ,
2058
2063
) ;
2059
- loan_spans. var_span_label (
2060
- & mut err,
2061
- format ! ( "borrow occurs due to use{}" , loan_spans. describe( ) ) ,
2062
- loan. kind . describe_mutability ( ) ,
2063
- ) ;
2064
+
2065
+ loan_spans. var_subdiag ( & mut err, Some ( loan. kind ) , |kind, var_span| {
2066
+ use crate :: session_diagnostics:: CaptureVarCause :: * ;
2067
+ match kind {
2068
+ Some ( _) => BorrowUseInGenerator { var_span } ,
2069
+ None => BorrowUseInClosure { var_span } ,
2070
+ }
2071
+ } ) ;
2064
2072
2065
2073
self . buffer_error ( err) ;
2066
2074
@@ -2070,11 +2078,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
2070
2078
2071
2079
let mut err = self . cannot_assign_to_borrowed ( span, loan_span, & descr_place) ;
2072
2080
2073
- loan_spans. var_span_label (
2074
- & mut err,
2075
- format ! ( "borrow occurs due to use{}" , loan_spans. describe( ) ) ,
2076
- loan. kind . describe_mutability ( ) ,
2077
- ) ;
2081
+ loan_spans. var_subdiag ( & mut err, Some ( loan. kind ) , |kind, var_span| {
2082
+ use crate :: session_diagnostics:: CaptureVarCause :: * ;
2083
+ match kind {
2084
+ Some ( _) => BorrowUseInGenerator { var_span } ,
2085
+ None => BorrowUseInClosure { var_span } ,
2086
+ }
2087
+ } ) ;
2078
2088
2079
2089
self . explain_why_borrow_contains_point ( location, loan, None ) . add_explanation_to_diagnostic (
2080
2090
self . infcx . tcx ,
0 commit comments