Skip to content

Commit d79da22

Browse files
committed
migrate var_span_label to var_subdiag
1 parent 7b513af commit d79da22

File tree

5 files changed

+113
-47
lines changed

5 files changed

+113
-47
lines changed

compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs

+38-28
Original file line numberDiff line numberDiff line change
@@ -677,11 +677,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
677677

678678
borrow_spans.var_path_only_subdiag(&mut err, crate::InitializationRequiringAction::Borrow);
679679

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+
});
685687

686688
self.explain_why_borrow_contains_point(location, borrow, None)
687689
.add_explanation_to_diagnostic(
@@ -832,16 +834,17 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
832834
immutable_section_description,
833835
"mutably borrow",
834836
);
835-
borrow_spans.var_span_label(
837+
borrow_spans.var_subdiag(
836838
&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+
},
843847
);
844-
845848
return err;
846849
} else {
847850
first_borrow_desc = "immutable ";
@@ -914,11 +917,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
914917
};
915918

916919
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+
});
922927
} else {
923928
let borrow_place = &issued_borrow.borrowed_place;
924929
let borrow_place_desc = self.describe_any_place(borrow_place.as_ref());
@@ -2056,11 +2061,14 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
20562061
section,
20572062
"assign",
20582063
);
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+
});
20642072

20652073
self.buffer_error(err);
20662074

@@ -2070,11 +2078,13 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
20702078

20712079
let mut err = self.cannot_assign_to_borrowed(span, loan_span, &descr_place);
20722080

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+
});
20782088

20792089
self.explain_why_borrow_contains_point(location, loan, None).add_explanation_to_diagnostic(
20802090
self.infcx.tcx,

compiler/rustc_borrowck/src/diagnostics/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ impl UseSpans<'_> {
651651
self,
652652
err: &mut Diagnostic,
653653
kind: Option<rustc_middle::mir::BorrowKind>,
654-
f: impl Fn(Option<GeneratorKind>, Span) -> crate::session_diagnostics::CaptureVarCause,
654+
f: impl FnOnce(Option<GeneratorKind>, Span) -> crate::session_diagnostics::CaptureVarCause,
655655
) {
656656
use crate::session_diagnostics::CaptureVarKind::*;
657657
if let UseSpans::ClosureUse { generator_kind, capture_kind_span, path_span, .. } = self {

compiler/rustc_borrowck/src/diagnostics/mutability_errors.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,16 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
195195
let borrow_spans = self.borrow_spans(span, location);
196196
let borrow_span = borrow_spans.args_or_use();
197197
err = self.cannot_borrow_path_as_mutable_because(borrow_span, &item_msg, &reason);
198-
borrow_spans.var_span_label(
198+
borrow_spans.var_subdiag(
199199
&mut err,
200-
format!(
201-
"mutable borrow occurs due to use of {} in closure",
202-
self.describe_any_place(access_place.as_ref()),
203-
),
204-
"mutable",
200+
Some(mir::BorrowKind::Mut { allow_two_phase_borrow: false }),
201+
|_kind, var_span| {
202+
let place = self.describe_any_place(access_place.as_ref());
203+
crate::session_diagnostics::CaptureVarCause::MutableBorrowUsePlaceClosure {
204+
place,
205+
var_span,
206+
}
207+
},
205208
);
206209
borrow_span
207210
}

compiler/rustc_borrowck/src/session_diagnostics.rs

+38
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,44 @@ pub(crate) enum CaptureVarCause {
226226
#[primary_span]
227227
var_span: Span,
228228
},
229+
#[label(borrowck_var_borrows_by_use_place_in_generator)]
230+
BorrowsUsePlaceGenerator {
231+
place: String,
232+
#[primary_span]
233+
var_span: Span,
234+
},
235+
#[label(borrowck_var_borrows_by_use_place_in_closure)]
236+
BorrowsUsePlaceClosure {
237+
place: String,
238+
#[primary_span]
239+
var_span: Span,
240+
},
241+
#[label(borrowck_var_borrow_by_use_in_generator)]
242+
BorrowUseInGenerator {
243+
#[primary_span]
244+
var_span: Span,
245+
},
246+
#[label(borrowck_var_borrow_by_use_in_closure)]
247+
BorrowUseInClosure {
248+
#[primary_span]
249+
var_span: Span,
250+
},
251+
#[label(borrowck_var_move_by_use_in_generator)]
252+
MoveUseInGenerator {
253+
#[primary_span]
254+
var_span: Span,
255+
},
256+
#[label(borrowck_var_move_by_use_in_closure)]
257+
MoveUseInClosure {
258+
#[primary_span]
259+
var_span: Span,
260+
},
261+
#[label(borrowck_var_mutable_borrow_by_use_place_in_closure)]
262+
MutableBorrowUsePlaceClosure {
263+
place: String,
264+
#[primary_span]
265+
var_span: Span,
266+
},
229267
}
230268

231269
#[derive(Diagnostic)]

compiler/rustc_error_messages/locales/en-US/borrowck.ftl

+27-12
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,6 @@ borrowck_returned_lifetime_short =
5959
borrowck_used_impl_require_static =
6060
the used `impl` has a `'static` requirement
6161
62-
borrowck_capture_kind_label =
63-
capture is {$kind_desc} because of use here
64-
65-
borrowck_var_borrow_by_use_place_in_generator =
66-
borrow occurs due to use of {$place} in closure in generator
67-
68-
borrowck_var_borrow_by_use_place_in_closure =
69-
borrow occurs due to use of {$place} in closure
70-
71-
borrowck_var_borrow_by_use_place =
72-
borrow occurs due to use of {$place}
73-
7462
borrowck_borrow_due_to_use_generator =
7563
borrow occurs due to use in generator
7664
@@ -104,12 +92,39 @@ borrowck_capture_mut =
10492
borrowck_capture_move =
10593
capture is moved because of use here
10694
95+
borrowck_var_borrow_by_use_place_in_generator =
96+
borrow occurs due to use of {$place} in generator
97+
98+
borrowck_var_borrow_by_use_place_in_closure =
99+
borrow occurs due to use of {$place} in closure
100+
101+
borrowck_var_borrows_by_use_place_in_generator =
102+
borrows occur due to use of {$place} in generator
103+
104+
borrowck_var_borrows_by_use_place_in_closure =
105+
borrows occur due to use of {$place} in closure
106+
107+
borrowck_var_borrow_by_use_in_generator =
108+
borrow occurs due to use in generator
109+
110+
borrowck_var_borrow_by_use_in_closure =
111+
borrow occurs due to use in closure
112+
107113
borrowck_var_move_by_use_place_in_generator =
108114
move occurs due to use of {$place} in generator
109115
110116
borrowck_var_move_by_use_place_in_closure =
111117
move occurs due to use of {$place} in closure
112118
119+
borrowck_var_move_by_use_in_generator =
120+
move occurs due to use in generator
121+
122+
borrowck_var_move_by_use_in_closure =
123+
move occurs due to use in closure
124+
125+
borrowck_var_mutable_borrow_by_use_place_in_closure =
126+
mutable borrow occurs due to use of {$place} in closure
127+
113128
borrowck_cannot_move_when_borrowed =
114129
cannot move out of {$place ->
115130
[value] value

0 commit comments

Comments
 (0)