Rollup merge of #48902 - csmoe:refactor_BorrowckErrors_fn_self, r=nikomatsakis

refactor the `BorrowckErrors` trait to take `fn(self)`

Fixes #48783
This commit is contained in:
kennytm
2018-03-20 07:15:16 +08:00
committed by GitHub
2 changed files with 93 additions and 93 deletions

View File

@@ -253,8 +253,8 @@ pub struct BorrowckCtxt<'a, 'tcx: 'a> {
used_mut_nodes: RefCell<FxHashSet<HirId>>, used_mut_nodes: RefCell<FxHashSet<HirId>>,
} }
impl<'b, 'tcx: 'b> BorrowckErrors for BorrowckCtxt<'b, 'tcx> { impl<'a, 'b, 'tcx: 'b> BorrowckErrors<'a> for &'a BorrowckCtxt<'b, 'tcx> {
fn struct_span_err_with_code<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err_with_code<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str, msg: &str,
code: DiagnosticId) code: DiagnosticId)
@@ -263,7 +263,7 @@ impl<'b, 'tcx: 'b> BorrowckErrors for BorrowckCtxt<'b, 'tcx> {
self.tcx.sess.struct_span_err_with_code(sp, msg, code) self.tcx.sess.struct_span_err_with_code(sp, msg, code)
} }
fn struct_span_err<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str) msg: &str)
-> DiagnosticBuilder<'a> -> DiagnosticBuilder<'a>
@@ -271,7 +271,7 @@ impl<'b, 'tcx: 'b> BorrowckErrors for BorrowckCtxt<'b, 'tcx> {
self.tcx.sess.struct_span_err(sp, msg) self.tcx.sess.struct_span_err(sp, msg)
} }
fn cancel_if_wrong_origin<'a>(&'a self, fn cancel_if_wrong_origin(self,
mut diag: DiagnosticBuilder<'a>, mut diag: DiagnosticBuilder<'a>,
o: Origin) o: Origin)
-> DiagnosticBuilder<'a> -> DiagnosticBuilder<'a>

View File

@@ -52,30 +52,30 @@ impl Origin {
} }
} }
pub trait BorrowckErrors { pub trait BorrowckErrors<'cx>: Sized + Copy {
fn struct_span_err_with_code<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err_with_code<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str, msg: &str,
code: DiagnosticId) code: DiagnosticId)
-> DiagnosticBuilder<'a>; -> DiagnosticBuilder<'cx>;
fn struct_span_err<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str) msg: &str)
-> DiagnosticBuilder<'a>; -> DiagnosticBuilder<'cx>;
/// Cancels the given error if we shouldn't emit errors for a given /// Cancels the given error if we shouldn't emit errors for a given
/// origin in the current mode. /// origin in the current mode.
/// ///
/// Always make sure that the error gets passed through this function /// Always make sure that the error gets passed through this function
/// before you return it. /// before you return it.
fn cancel_if_wrong_origin<'a>(&'a self, fn cancel_if_wrong_origin(self,
diag: DiagnosticBuilder<'a>, diag: DiagnosticBuilder<'cx>,
o: Origin) o: Origin)
-> DiagnosticBuilder<'a>; -> DiagnosticBuilder<'cx>;
fn cannot_move_when_borrowed(&self, span: Span, desc: &str, o: Origin) fn cannot_move_when_borrowed(self, span: Span, desc: &str, o: Origin)
-> DiagnosticBuilder<'_> -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0505, let err = struct_span_err!(self, span, E0505,
"cannot move out of `{}` because it is borrowed{OGN}", "cannot move out of `{}` because it is borrowed{OGN}",
@@ -83,13 +83,13 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_use_when_mutably_borrowed(&self, fn cannot_use_when_mutably_borrowed(self,
span: Span, span: Span,
desc: &str, desc: &str,
borrow_span: Span, borrow_span: Span,
borrow_desc: &str, borrow_desc: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder<'_> -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, span, E0503, let mut err = struct_span_err!(self, span, E0503,
"cannot use `{}` because it was mutably borrowed{OGN}", "cannot use `{}` because it was mutably borrowed{OGN}",
@@ -101,12 +101,12 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_act_on_uninitialized_variable(&self, fn cannot_act_on_uninitialized_variable(self,
span: Span, span: Span,
verb: &str, verb: &str,
desc: &str, desc: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0381, let err = struct_span_err!(self, span, E0381,
"{} of possibly uninitialized variable: `{}`{OGN}", "{} of possibly uninitialized variable: `{}`{OGN}",
@@ -114,7 +114,7 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_mutably_borrow_multiply(&self, fn cannot_mutably_borrow_multiply(self,
new_loan_span: Span, new_loan_span: Span,
desc: &str, desc: &str,
opt_via: &str, opt_via: &str,
@@ -122,7 +122,7 @@ pub trait BorrowckErrors {
old_opt_via: &str, old_opt_via: &str,
old_load_end_span: Option<Span>, old_load_end_span: Option<Span>,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, new_loan_span, E0499, let mut err = struct_span_err!(self, new_loan_span, E0499,
"cannot borrow `{}`{} as mutable more than once at a time{OGN}", "cannot borrow `{}`{} as mutable more than once at a time{OGN}",
@@ -148,13 +148,13 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_uniquely_borrow_by_two_closures(&self, fn cannot_uniquely_borrow_by_two_closures(self,
new_loan_span: Span, new_loan_span: Span,
desc: &str, desc: &str,
old_loan_span: Span, old_loan_span: Span,
old_load_end_span: Option<Span>, old_load_end_span: Option<Span>,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, new_loan_span, E0524, let mut err = struct_span_err!(self, new_loan_span, E0524,
"two closures require unique access to `{}` at the same time{OGN}", "two closures require unique access to `{}` at the same time{OGN}",
@@ -173,7 +173,7 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_uniquely_borrow_by_one_closure(&self, fn cannot_uniquely_borrow_by_one_closure(self,
new_loan_span: Span, new_loan_span: Span,
desc_new: &str, desc_new: &str,
opt_via: &str, opt_via: &str,
@@ -182,7 +182,7 @@ pub trait BorrowckErrors {
old_opt_via: &str, old_opt_via: &str,
previous_end_span: Option<Span>, previous_end_span: Option<Span>,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, new_loan_span, E0500, let mut err = struct_span_err!(self, new_loan_span, E0500,
"closure requires unique access to `{}` but {} is already borrowed{}{OGN}", "closure requires unique access to `{}` but {} is already borrowed{}{OGN}",
@@ -197,7 +197,7 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_reborrow_already_uniquely_borrowed(&self, fn cannot_reborrow_already_uniquely_borrowed(self,
new_loan_span: Span, new_loan_span: Span,
desc_new: &str, desc_new: &str,
opt_via: &str, opt_via: &str,
@@ -206,7 +206,7 @@ pub trait BorrowckErrors {
old_opt_via: &str, old_opt_via: &str,
previous_end_span: Option<Span>, previous_end_span: Option<Span>,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, new_loan_span, E0501, let mut err = struct_span_err!(self, new_loan_span, E0501,
"cannot borrow `{}`{} as {} because previous closure \ "cannot borrow `{}`{} as {} because previous closure \
@@ -222,7 +222,7 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_reborrow_already_borrowed(&self, fn cannot_reborrow_already_borrowed(self,
span: Span, span: Span,
desc_new: &str, desc_new: &str,
msg_new: &str, msg_new: &str,
@@ -233,7 +233,7 @@ pub trait BorrowckErrors {
msg_old: &str, msg_old: &str,
old_load_end_span: Option<Span>, old_load_end_span: Option<Span>,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, span, E0502, let mut err = struct_span_err!(self, span, E0502,
"cannot borrow `{}`{} as {} because {} is also borrowed as {}{}{OGN}", "cannot borrow `{}`{} as {} because {} is also borrowed as {}{}{OGN}",
@@ -246,8 +246,8 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_assign_to_borrowed(&self, span: Span, borrow_span: Span, desc: &str, o: Origin) fn cannot_assign_to_borrowed(self, span: Span, borrow_span: Span, desc: &str, o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, span, E0506, let mut err = struct_span_err!(self, span, E0506,
"cannot assign to `{}` because it is borrowed{OGN}", "cannot assign to `{}` because it is borrowed{OGN}",
@@ -259,8 +259,8 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_move_into_closure(&self, span: Span, desc: &str, o: Origin) fn cannot_move_into_closure(self, span: Span, desc: &str, o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0504, let err = struct_span_err!(self, span, E0504,
"cannot move `{}` into closure because it is borrowed{OGN}", "cannot move `{}` into closure because it is borrowed{OGN}",
@@ -269,8 +269,8 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_reassign_immutable(&self, span: Span, desc: &str, is_arg: bool, o: Origin) fn cannot_reassign_immutable(self, span: Span, desc: &str, is_arg: bool, o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let msg = if is_arg { let msg = if is_arg {
"to immutable argument" "to immutable argument"
@@ -284,7 +284,7 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_assign(&self, span: Span, desc: &str, o: Origin) -> DiagnosticBuilder fn cannot_assign(self, span: Span, desc: &str, o: Origin) -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0594, let err = struct_span_err!(self, span, E0594,
"cannot assign to {}{OGN}", "cannot assign to {}{OGN}",
@@ -292,14 +292,14 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_assign_static(&self, span: Span, desc: &str, o: Origin) fn cannot_assign_static(self, span: Span, desc: &str, o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
self.cannot_assign(span, &format!("immutable static item `{}`", desc), o) self.cannot_assign(span, &format!("immutable static item `{}`", desc), o)
} }
fn cannot_move_out_of(&self, move_from_span: Span, move_from_desc: &str, o: Origin) fn cannot_move_out_of(self, move_from_span: Span, move_from_desc: &str, o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, move_from_span, E0507, let mut err = struct_span_err!(self, move_from_span, E0507,
"cannot move out of {}{OGN}", "cannot move out of {}{OGN}",
@@ -311,12 +311,12 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_move_out_of_interior_noncopy(&self, fn cannot_move_out_of_interior_noncopy(self,
move_from_span: Span, move_from_span: Span,
ty: ty::Ty, ty: ty::Ty,
is_index: bool, is_index: bool,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let type_name = match (&ty.sty, is_index) { let type_name = match (&ty.sty, is_index) {
(&ty::TyArray(_, _), true) => "array", (&ty::TyArray(_, _), true) => "array",
@@ -332,11 +332,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_move_out_of_interior_of_drop(&self, fn cannot_move_out_of_interior_of_drop(self,
move_from_span: Span, move_from_span: Span,
container_ty: ty::Ty, container_ty: ty::Ty,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, move_from_span, E0509, let mut err = struct_span_err!(self, move_from_span, E0509,
"cannot move out of type `{}`, \ "cannot move out of type `{}`, \
@@ -347,13 +347,13 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_act_on_moved_value(&self, fn cannot_act_on_moved_value(self,
use_span: Span, use_span: Span,
verb: &str, verb: &str,
optional_adverb_for_moved: &str, optional_adverb_for_moved: &str,
moved_path: &str, moved_path: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, use_span, E0382, let err = struct_span_err!(self, use_span, E0382,
"{} of {}moved value: `{}`{OGN}", "{} of {}moved value: `{}`{OGN}",
@@ -362,11 +362,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_partially_reinit_an_uninit_struct(&self, fn cannot_partially_reinit_an_uninit_struct(self,
span: Span, span: Span,
uninit_path: &str, uninit_path: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, let err = struct_span_err!(self,
span, span,
@@ -377,11 +377,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn closure_cannot_assign_to_borrowed(&self, fn closure_cannot_assign_to_borrowed(self,
span: Span, span: Span,
descr: &str, descr: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0595, "closure cannot assign to {}{OGN}", let err = struct_span_err!(self, span, E0595, "closure cannot assign to {}{OGN}",
descr, OGN=o); descr, OGN=o);
@@ -389,11 +389,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_borrow_path_as_mutable(&self, fn cannot_borrow_path_as_mutable(self,
span: Span, span: Span,
path: &str, path: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{OGN}", let err = struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{OGN}",
path, OGN=o); path, OGN=o);
@@ -401,11 +401,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_borrow_across_generator_yield(&self, fn cannot_borrow_across_generator_yield(self,
span: Span, span: Span,
yield_span: Span, yield_span: Span,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, let mut err = struct_span_err!(self,
span, span,
@@ -417,11 +417,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn path_does_not_live_long_enough(&self, fn path_does_not_live_long_enough(self,
span: Span, span: Span,
path: &str, path: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0597, "{} does not live long enough{OGN}", let err = struct_span_err!(self, span, E0597, "{} does not live long enough{OGN}",
path, OGN=o); path, OGN=o);
@@ -429,11 +429,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn lifetime_too_short_for_reborrow(&self, fn lifetime_too_short_for_reborrow(self,
span: Span, span: Span,
path: &str, path: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let err = struct_span_err!(self, span, E0598, let err = struct_span_err!(self, span, E0598,
"lifetime of {} is too short to guarantee \ "lifetime of {} is too short to guarantee \
@@ -443,12 +443,12 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_act_on_capture_in_sharable_fn(&self, fn cannot_act_on_capture_in_sharable_fn(self,
span: Span, span: Span,
bad_thing: &str, bad_thing: &str,
help: (Span, &str), help: (Span, &str),
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let (help_span, help_msg) = help; let (help_span, help_msg) = help;
let mut err = struct_span_err!(self, span, E0387, let mut err = struct_span_err!(self, span, E0387,
@@ -459,11 +459,11 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_assign_into_immutable_reference(&self, fn cannot_assign_into_immutable_reference(self,
span: Span, span: Span,
bad_thing: &str, bad_thing: &str,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, span, E0389, "{} in a `&` reference{OGN}", let mut err = struct_span_err!(self, span, E0389, "{} in a `&` reference{OGN}",
bad_thing, OGN=o); bad_thing, OGN=o);
@@ -472,12 +472,12 @@ pub trait BorrowckErrors {
self.cancel_if_wrong_origin(err, o) self.cancel_if_wrong_origin(err, o)
} }
fn cannot_capture_in_long_lived_closure(&self, fn cannot_capture_in_long_lived_closure(self,
closure_span: Span, closure_span: Span,
borrowed_path: &str, borrowed_path: &str,
capture_span: Span, capture_span: Span,
o: Origin) o: Origin)
-> DiagnosticBuilder -> DiagnosticBuilder<'cx>
{ {
let mut err = struct_span_err!(self, closure_span, E0373, let mut err = struct_span_err!(self, closure_span, E0373,
"closure may outlive the current function, \ "closure may outlive the current function, \
@@ -491,28 +491,28 @@ pub trait BorrowckErrors {
} }
} }
impl<'b, 'gcx, 'tcx> BorrowckErrors for TyCtxt<'b, 'gcx, 'tcx> { impl<'cx, 'gcx, 'tcx> BorrowckErrors<'cx> for TyCtxt<'cx, 'gcx, 'tcx> {
fn struct_span_err_with_code<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err_with_code<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str, msg: &str,
code: DiagnosticId) code: DiagnosticId)
-> DiagnosticBuilder<'a> -> DiagnosticBuilder<'cx>
{ {
self.sess.struct_span_err_with_code(sp, msg, code) self.sess.struct_span_err_with_code(sp, msg, code)
} }
fn struct_span_err<'a, S: Into<MultiSpan>>(&'a self, fn struct_span_err<S: Into<MultiSpan>>(self,
sp: S, sp: S,
msg: &str) msg: &str)
-> DiagnosticBuilder<'a> -> DiagnosticBuilder<'cx>
{ {
self.sess.struct_span_err(sp, msg) self.sess.struct_span_err(sp, msg)
} }
fn cancel_if_wrong_origin<'a>(&'a self, fn cancel_if_wrong_origin(self,
mut diag: DiagnosticBuilder<'a>, mut diag: DiagnosticBuilder<'cx>,
o: Origin) o: Origin)
-> DiagnosticBuilder<'a> -> DiagnosticBuilder<'cx>
{ {
if !o.should_emit_errors(self.borrowck_mode()) { if !o.should_emit_errors(self.borrowck_mode()) {
self.sess.diagnostic().cancel(&mut diag); self.sess.diagnostic().cancel(&mut diag);