Auto merge of #37057 - brson:nosuggest, r=nikomatsakis
rustc: Remove all "consider using an explicit lifetime parameter" suggestions These give so many incorrect suggestions that having them is detrimental to the user experience. The compiler should not be suggesting changes to the code that are wrong - it is infuriating: not only is the compiler telling you that _you don't understand_ borrowing, _the compiler itself_ appears to not understand borrowing. It does not inspire confidence. r? @nikomatsakis
This commit is contained in:
commit
154c202afb
7 changed files with 4 additions and 893 deletions
|
|
@ -20,7 +20,6 @@ impl<'r> Itble<'r, usize, Range<usize>> for (usize, usize) {
|
|||
}
|
||||
|
||||
fn check<'r, I: Iterator<Item=usize>, T: Itble<'r, usize, I>>(cont: &T) -> bool
|
||||
//~^ HELP as shown: fn check<'r, I: Iterator<Item = usize>, T: Itble<'r, usize, I>>(cont: &'r T)
|
||||
{
|
||||
let cont_iter = cont.iter();
|
||||
//~^ ERROR cannot infer an appropriate lifetime for autoref due to conflicting requirements
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-tidy-linelength
|
||||
|
||||
use std::ops::Range;
|
||||
|
||||
trait Itble<'r, T, I: Iterator<Item=T>> { fn iter(&'r self) -> I; }
|
||||
|
||||
impl<'r> Itble<'r, usize, Range<usize>> for (usize, usize) {
|
||||
fn iter(&'r self) -> Range<usize> {
|
||||
let &(min, max) = self;
|
||||
min..max
|
||||
}
|
||||
}
|
||||
|
||||
fn check<'r, I: Iterator<Item=usize>, T: Itble<'r, usize, I>>(cont: &T) -> bool {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn check<'r, I: Iterator<Item = usize>, T: Itble<'r, usize, I>>(cont: &'r T)
|
||||
let cont_iter = cont.iter(); //~ ERROR: cannot infer
|
||||
let result = cont_iter.fold(Some(0), |state, val| {
|
||||
state.map_or(None, |mask| {
|
||||
let bit = 1 << val;
|
||||
if mask & bit == 0 {Some(mask|bit)} else {None}
|
||||
})
|
||||
});
|
||||
result.is_some()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-tidy-linelength
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
struct Bar<'x, 'y, 'z> { bar: &'y i32, baz: i32, marker: PhantomData<(&'x(),&'y(),&'z())> }
|
||||
fn bar1<'a>(x: &Bar) -> (&'a i32, &'a i32, &'a i32) {
|
||||
//~^ HELP consider using an explicit lifetime parameter as shown: fn bar1<'b, 'c, 'a>(x: &'a Bar<'b, 'a, 'c>) -> (&'a i32, &'a i32, &'a i32)
|
||||
(x.bar, &x.baz, &x.baz)
|
||||
//~^ ERROR E0312
|
||||
//~| ERROR cannot infer
|
||||
//~| ERROR cannot infer
|
||||
}
|
||||
|
||||
fn bar2<'a, 'b, 'c>(x: &Bar<'a, 'b, 'c>) -> (&'a i32, &'a i32, &'a i32) {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn bar2<'a, 'c>(x: &'a Bar<'a, 'a, 'c>) -> (&'a i32, &'a i32, &'a i32)
|
||||
(x.bar, &x.baz, &x.baz)
|
||||
//~^ ERROR E0312
|
||||
//~| ERROR cannot infer
|
||||
//~| ERROR cannot infer
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-tidy-linelength
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
struct Foo<'x> { bar: isize, marker: PhantomData<&'x ()> }
|
||||
fn foo1<'a>(x: &Foo) -> &'a isize {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn foo1<'a>(x: &'a Foo) -> &'a isize
|
||||
&x.bar //~ ERROR: cannot infer
|
||||
}
|
||||
|
||||
fn foo2<'a, 'b>(x: &'a Foo) -> &'b isize {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn foo2<'a>(x: &'a Foo) -> &'a isize
|
||||
&x.bar //~ ERROR: cannot infer
|
||||
}
|
||||
|
||||
fn foo3<'a>(x: &Foo) -> (&'a isize, &'a isize) {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn foo3<'a>(x: &'a Foo) -> (&'a isize, &'a isize)
|
||||
(&x.bar, &x.bar) //~ ERROR: cannot infer
|
||||
//~^ ERROR: cannot infer
|
||||
}
|
||||
|
||||
fn foo4<'a, 'b>(x: &'a Foo) -> (&'b isize, &'a isize, &'b isize) {
|
||||
//~^ HELP: consider using an explicit lifetime parameter as shown: fn foo4<'a>(x: &'a Foo) -> (&'a isize, &'a isize, &'a isize)
|
||||
(&x.bar, &x.bar, &x.bar) //~ ERROR: cannot infer
|
||||
//~^ ERROR: cannot infer
|
||||
}
|
||||
|
||||
struct Cat<'x, T> { cat: &'x isize, t: T }
|
||||
struct Dog<'y> { dog: &'y isize }
|
||||
|
||||
fn cat2<'x, 'y>(x: Cat<'x, Dog<'y>>) -> &'x isize {
|
||||
//~^ HELP consider using an explicit lifetime parameter as shown: fn cat2<'x>(x: Cat<'x, Dog<'x>>) -> &'x isize
|
||||
x.t.dog //~ ERROR E0312
|
||||
}
|
||||
|
||||
struct Baz<'x> {
|
||||
bar: &'x isize
|
||||
}
|
||||
|
||||
impl<'a> Baz<'a> {
|
||||
fn baz2<'b>(&self, x: &isize) -> (&'b isize, &'b isize) {
|
||||
(self.bar, x) //~ ERROR E0312
|
||||
//~^ ERROR E0312
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue