change &self to self and fix lifetime annotations

This commit is contained in:
csmoe 2018-03-08 16:29:35 +08:00
parent a7170b0412
commit 0b111e677c
2 changed files with 119 additions and 87 deletions

View File

@ -253,28 +253,28 @@ pub struct BorrowckCtxt<'a, 'tcx: 'a> {
used_mut_nodes: RefCell<FxHashSet<HirId>>,
}
impl<'b, 'tcx: 'b> BorrowckErrors for BorrowckCtxt<'b, 'tcx> {
fn struct_span_err_with_code<'a, S: Into<MultiSpan>>(&'a self,
sp: S,
msg: &str,
code: DiagnosticId)
-> DiagnosticBuilder<'a>
impl<'a, 'b, 'tcx: 'b> BorrowckErrors<'a> for &'a BorrowckCtxt<'b, 'tcx> {
fn struct_span_err_with_code<S: Into<MultiSpan>>(self,
sp: S,
msg: &str,
code: DiagnosticId)
-> DiagnosticBuilder<'a>
{
self.tcx.sess.struct_span_err_with_code(sp, msg, code)
}
fn struct_span_err<'a, S: Into<MultiSpan>>(&'a self,
sp: S,
msg: &str)
-> DiagnosticBuilder<'a>
fn struct_span_err<S: Into<MultiSpan>>(self,
sp: S,
msg: &str)
-> DiagnosticBuilder<'a>
{
self.tcx.sess.struct_span_err(sp, msg)
}
fn cancel_if_wrong_origin<'a>(&'a self,
mut diag: DiagnosticBuilder<'a>,
o: Origin)
-> DiagnosticBuilder<'a>
fn cancel_if_wrong_origin(self,
mut diag: DiagnosticBuilder<'a>,
o: Origin)
-> DiagnosticBuilder<'a>
{
if !o.should_emit_errors(self.tcx.borrowck_mode()) {
self.tcx.sess.diagnostic().cancel(&mut diag);

View File

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